// This file is distributed under the University of Illinois Open Source License.
// See LICENSE.TXT for details.
// 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  S1503C5_nt  {
  int s1503c5f0[2];
  void  mf1503c5(); // _ZN10S1503C5_nt8mf1503c5Ev
};
//SIG(-1 S1503C5_nt) C1{ m Fi[2]}


void  S1503C5_nt ::mf1503c5(){}

//skip512 S1503C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1503C4_nt  {
  int s1503c4f0;
  __tsi64 s1503c4f1;
  void *s1503c4f2[4];
  int s1503c4f3[2];
  void *s1503c4f4;
  ::S1503C5_nt s1503c4f5;
  void *s1503c4f6[2];
  virtual  ~S1503C4_nt(); // _ZN10S1503C4_ntD1Ev
  virtual void  v6(); // _ZN10S1503C4_nt2v6Ev
  virtual void  v7(); // _ZN10S1503C4_nt2v7Ev
  virtual void  v8(); // _ZN10S1503C4_nt2v8Ev
  virtual void  v9(); // _ZN10S1503C4_nt2v9Ev
  virtual void  v10(); // _ZN10S1503C4_nt3v10Ev
  virtual void  v11(); // _ZN10S1503C4_nt3v11Ev
  virtual void  v12(); // _ZN10S1503C4_nt3v12Ev
  virtual void  v13(); // _ZN10S1503C4_nt3v13Ev
  virtual void  v14(); // _ZN10S1503C4_nt3v14Ev
  virtual void  v15(); // _ZN10S1503C4_nt3v15Ev
  virtual void  v16(); // _ZN10S1503C4_nt3v16Ev
  virtual void  v17(); // _ZN10S1503C4_nt3v17Ev
  virtual void  v18(); // _ZN10S1503C4_nt3v18Ev
  virtual void  v19(); // _ZN10S1503C4_nt3v19Ev
  virtual void  v20(); // _ZN10S1503C4_nt3v20Ev
  virtual void  v21(); // _ZN10S1503C4_nt3v21Ev
  virtual void  v22(); // _ZN10S1503C4_nt3v22Ev
  virtual void  v23(); // _ZN10S1503C4_nt3v23Ev
  virtual void  v24(); // _ZN10S1503C4_nt3v24Ev
  virtual void  v25(); // _ZN10S1503C4_nt3v25Ev
  virtual void  v26(); // _ZN10S1503C4_nt3v26Ev
  virtual void  v27(); // _ZN10S1503C4_nt3v27Ev
  virtual void  v28(); // _ZN10S1503C4_nt3v28Ev
  virtual void  v29(); // _ZN10S1503C4_nt3v29Ev
  virtual void  v30(); // _ZN10S1503C4_nt3v30Ev
  virtual void  v31(); // _ZN10S1503C4_nt3v31Ev
  virtual void  v32(); // _ZN10S1503C4_nt3v32Ev
  virtual void  v33(); // _ZN10S1503C4_nt3v33Ev
  virtual void  v34(); // _ZN10S1503C4_nt3v34Ev
  virtual void  v35(); // _ZN10S1503C4_nt3v35Ev
  virtual void  v36(); // _ZN10S1503C4_nt3v36Ev
  virtual void  v37(); // _ZN10S1503C4_nt3v37Ev
  virtual void  v38(); // _ZN10S1503C4_nt3v38Ev
  virtual void  v39(); // _ZN10S1503C4_nt3v39Ev
  virtual void  v40(); // _ZN10S1503C4_nt3v40Ev
  virtual void  v41(); // _ZN10S1503C4_nt3v41Ev
  virtual void  v42(); // _ZN10S1503C4_nt3v42Ev
  virtual void  v43(); // _ZN10S1503C4_nt3v43Ev
  virtual void  v44(); // _ZN10S1503C4_nt3v44Ev
  virtual void  v45(); // _ZN10S1503C4_nt3v45Ev
  virtual void  v46(); // _ZN10S1503C4_nt3v46Ev
  virtual void  v47(); // _ZN10S1503C4_nt3v47Ev
  virtual void  v48(); // _ZN10S1503C4_nt3v48Ev
  virtual void  v49(); // _ZN10S1503C4_nt3v49Ev
  virtual void  v50(); // _ZN10S1503C4_nt3v50Ev
  virtual void  v51(); // _ZN10S1503C4_nt3v51Ev
  virtual void  v52(); // _ZN10S1503C4_nt3v52Ev
  virtual void  v53(); // _ZN10S1503C4_nt3v53Ev
  virtual void  v54(); // _ZN10S1503C4_nt3v54Ev
  virtual void  v55(); // _ZN10S1503C4_nt3v55Ev
  virtual void  v56(); // _ZN10S1503C4_nt3v56Ev
  virtual void  v57(); // _ZN10S1503C4_nt3v57Ev
  virtual void  v58(); // _ZN10S1503C4_nt3v58Ev
  virtual void  v59(); // _ZN10S1503C4_nt3v59Ev
  virtual void  v60(); // _ZN10S1503C4_nt3v60Ev
  virtual void  v61(); // _ZN10S1503C4_nt3v61Ev
  virtual void  v62(); // _ZN10S1503C4_nt3v62Ev
  virtual void  v63(); // _ZN10S1503C4_nt3v63Ev
  virtual void  v64(); // _ZN10S1503C4_nt3v64Ev
  virtual void  v65(); // _ZN10S1503C4_nt3v65Ev
  virtual void  v66(); // _ZN10S1503C4_nt3v66Ev
  virtual void  v67(); // _ZN10S1503C4_nt3v67Ev
  virtual void  v68(); // _ZN10S1503C4_nt3v68Ev
  virtual void  v69(); // _ZN10S1503C4_nt3v69Ev
  S1503C4_nt(); // tgen
};
//SIG(-1 S1503C4_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]}


 S1503C4_nt ::~S1503C4_nt(){ note_dtor("S1503C4_nt", this);}
void  S1503C4_nt ::v6(){vfunc_called(this, "_ZN10S1503C4_nt2v6Ev");}
void  S1503C4_nt ::v7(){vfunc_called(this, "_ZN10S1503C4_nt2v7Ev");}
void  S1503C4_nt ::v8(){vfunc_called(this, "_ZN10S1503C4_nt2v8Ev");}
void  S1503C4_nt ::v9(){vfunc_called(this, "_ZN10S1503C4_nt2v9Ev");}
void  S1503C4_nt ::v10(){vfunc_called(this, "_ZN10S1503C4_nt3v10Ev");}
void  S1503C4_nt ::v11(){vfunc_called(this, "_ZN10S1503C4_nt3v11Ev");}
void  S1503C4_nt ::v12(){vfunc_called(this, "_ZN10S1503C4_nt3v12Ev");}
void  S1503C4_nt ::v13(){vfunc_called(this, "_ZN10S1503C4_nt3v13Ev");}
void  S1503C4_nt ::v14(){vfunc_called(this, "_ZN10S1503C4_nt3v14Ev");}
void  S1503C4_nt ::v15(){vfunc_called(this, "_ZN10S1503C4_nt3v15Ev");}
void  S1503C4_nt ::v16(){vfunc_called(this, "_ZN10S1503C4_nt3v16Ev");}
void  S1503C4_nt ::v17(){vfunc_called(this, "_ZN10S1503C4_nt3v17Ev");}
void  S1503C4_nt ::v18(){vfunc_called(this, "_ZN10S1503C4_nt3v18Ev");}
void  S1503C4_nt ::v19(){vfunc_called(this, "_ZN10S1503C4_nt3v19Ev");}
void  S1503C4_nt ::v20(){vfunc_called(this, "_ZN10S1503C4_nt3v20Ev");}
void  S1503C4_nt ::v21(){vfunc_called(this, "_ZN10S1503C4_nt3v21Ev");}
void  S1503C4_nt ::v22(){vfunc_called(this, "_ZN10S1503C4_nt3v22Ev");}
void  S1503C4_nt ::v23(){vfunc_called(this, "_ZN10S1503C4_nt3v23Ev");}
void  S1503C4_nt ::v24(){vfunc_called(this, "_ZN10S1503C4_nt3v24Ev");}
void  S1503C4_nt ::v25(){vfunc_called(this, "_ZN10S1503C4_nt3v25Ev");}
void  S1503C4_nt ::v26(){vfunc_called(this, "_ZN10S1503C4_nt3v26Ev");}
void  S1503C4_nt ::v27(){vfunc_called(this, "_ZN10S1503C4_nt3v27Ev");}
void  S1503C4_nt ::v28(){vfunc_called(this, "_ZN10S1503C4_nt3v28Ev");}
void  S1503C4_nt ::v29(){vfunc_called(this, "_ZN10S1503C4_nt3v29Ev");}
void  S1503C4_nt ::v30(){vfunc_called(this, "_ZN10S1503C4_nt3v30Ev");}
void  S1503C4_nt ::v31(){vfunc_called(this, "_ZN10S1503C4_nt3v31Ev");}
void  S1503C4_nt ::v32(){vfunc_called(this, "_ZN10S1503C4_nt3v32Ev");}
void  S1503C4_nt ::v33(){vfunc_called(this, "_ZN10S1503C4_nt3v33Ev");}
void  S1503C4_nt ::v34(){vfunc_called(this, "_ZN10S1503C4_nt3v34Ev");}
void  S1503C4_nt ::v35(){vfunc_called(this, "_ZN10S1503C4_nt3v35Ev");}
void  S1503C4_nt ::v36(){vfunc_called(this, "_ZN10S1503C4_nt3v36Ev");}
void  S1503C4_nt ::v37(){vfunc_called(this, "_ZN10S1503C4_nt3v37Ev");}
void  S1503C4_nt ::v38(){vfunc_called(this, "_ZN10S1503C4_nt3v38Ev");}
void  S1503C4_nt ::v39(){vfunc_called(this, "_ZN10S1503C4_nt3v39Ev");}
void  S1503C4_nt ::v40(){vfunc_called(this, "_ZN10S1503C4_nt3v40Ev");}
void  S1503C4_nt ::v41(){vfunc_called(this, "_ZN10S1503C4_nt3v41Ev");}
void  S1503C4_nt ::v42(){vfunc_called(this, "_ZN10S1503C4_nt3v42Ev");}
void  S1503C4_nt ::v43(){vfunc_called(this, "_ZN10S1503C4_nt3v43Ev");}
void  S1503C4_nt ::v44(){vfunc_called(this, "_ZN10S1503C4_nt3v44Ev");}
void  S1503C4_nt ::v45(){vfunc_called(this, "_ZN10S1503C4_nt3v45Ev");}
void  S1503C4_nt ::v46(){vfunc_called(this, "_ZN10S1503C4_nt3v46Ev");}
void  S1503C4_nt ::v47(){vfunc_called(this, "_ZN10S1503C4_nt3v47Ev");}
void  S1503C4_nt ::v48(){vfunc_called(this, "_ZN10S1503C4_nt3v48Ev");}
void  S1503C4_nt ::v49(){vfunc_called(this, "_ZN10S1503C4_nt3v49Ev");}
void  S1503C4_nt ::v50(){vfunc_called(this, "_ZN10S1503C4_nt3v50Ev");}
void  S1503C4_nt ::v51(){vfunc_called(this, "_ZN10S1503C4_nt3v51Ev");}
void  S1503C4_nt ::v52(){vfunc_called(this, "_ZN10S1503C4_nt3v52Ev");}
void  S1503C4_nt ::v53(){vfunc_called(this, "_ZN10S1503C4_nt3v53Ev");}
void  S1503C4_nt ::v54(){vfunc_called(this, "_ZN10S1503C4_nt3v54Ev");}
void  S1503C4_nt ::v55(){vfunc_called(this, "_ZN10S1503C4_nt3v55Ev");}
void  S1503C4_nt ::v56(){vfunc_called(this, "_ZN10S1503C4_nt3v56Ev");}
void  S1503C4_nt ::v57(){vfunc_called(this, "_ZN10S1503C4_nt3v57Ev");}
void  S1503C4_nt ::v58(){vfunc_called(this, "_ZN10S1503C4_nt3v58Ev");}
void  S1503C4_nt ::v59(){vfunc_called(this, "_ZN10S1503C4_nt3v59Ev");}
void  S1503C4_nt ::v60(){vfunc_called(this, "_ZN10S1503C4_nt3v60Ev");}
void  S1503C4_nt ::v61(){vfunc_called(this, "_ZN10S1503C4_nt3v61Ev");}
void  S1503C4_nt ::v62(){vfunc_called(this, "_ZN10S1503C4_nt3v62Ev");}
void  S1503C4_nt ::v63(){vfunc_called(this, "_ZN10S1503C4_nt3v63Ev");}
void  S1503C4_nt ::v64(){vfunc_called(this, "_ZN10S1503C4_nt3v64Ev");}
void  S1503C4_nt ::v65(){vfunc_called(this, "_ZN10S1503C4_nt3v65Ev");}
void  S1503C4_nt ::v66(){vfunc_called(this, "_ZN10S1503C4_nt3v66Ev");}
void  S1503C4_nt ::v67(){vfunc_called(this, "_ZN10S1503C4_nt3v67Ev");}
void  S1503C4_nt ::v68(){vfunc_called(this, "_ZN10S1503C4_nt3v68Ev");}
void  S1503C4_nt ::v69(){vfunc_called(this, "_ZN10S1503C4_nt3v69Ev");}
S1503C4_nt ::S1503C4_nt(){ note_ctor("S1503C4_nt", this);} // tgen

//skip512 S1503C4_nt

#else // __cplusplus

extern void _ZN10S1503C4_ntC1Ev();
extern void _ZN10S1503C4_ntD1Ev();
Name_Map name_map_S1503C4_nt[] = {
  NSPAIR(_ZN10S1503C4_ntC1Ev),
  NSPAIR(_ZN10S1503C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1503C4_nt[];
extern void _ZN10S1503C4_ntD1Ev();
extern void _ZN10S1503C4_ntD0Ev();
extern void _ZN10S1503C4_nt2v6Ev();
extern void _ZN10S1503C4_nt2v7Ev();
extern void _ZN10S1503C4_nt2v8Ev();
extern void _ZN10S1503C4_nt2v9Ev();
extern void _ZN10S1503C4_nt3v10Ev();
extern void _ZN10S1503C4_nt3v11Ev();
extern void _ZN10S1503C4_nt3v12Ev();
extern void _ZN10S1503C4_nt3v13Ev();
extern void _ZN10S1503C4_nt3v14Ev();
extern void _ZN10S1503C4_nt3v15Ev();
extern void _ZN10S1503C4_nt3v16Ev();
extern void _ZN10S1503C4_nt3v17Ev();
extern void _ZN10S1503C4_nt3v18Ev();
extern void _ZN10S1503C4_nt3v19Ev();
extern void _ZN10S1503C4_nt3v20Ev();
extern void _ZN10S1503C4_nt3v21Ev();
extern void _ZN10S1503C4_nt3v22Ev();
extern void _ZN10S1503C4_nt3v23Ev();
extern void _ZN10S1503C4_nt3v24Ev();
extern void _ZN10S1503C4_nt3v25Ev();
extern void _ZN10S1503C4_nt3v26Ev();
extern void _ZN10S1503C4_nt3v27Ev();
extern void _ZN10S1503C4_nt3v28Ev();
extern void _ZN10S1503C4_nt3v29Ev();
extern void _ZN10S1503C4_nt3v30Ev();
extern void _ZN10S1503C4_nt3v31Ev();
extern void _ZN10S1503C4_nt3v32Ev();
extern void _ZN10S1503C4_nt3v33Ev();
extern void _ZN10S1503C4_nt3v34Ev();
extern void _ZN10S1503C4_nt3v35Ev();
extern void _ZN10S1503C4_nt3v36Ev();
extern void _ZN10S1503C4_nt3v37Ev();
extern void _ZN10S1503C4_nt3v38Ev();
extern void _ZN10S1503C4_nt3v39Ev();
extern void _ZN10S1503C4_nt3v40Ev();
extern void _ZN10S1503C4_nt3v41Ev();
extern void _ZN10S1503C4_nt3v42Ev();
extern void _ZN10S1503C4_nt3v43Ev();
extern void _ZN10S1503C4_nt3v44Ev();
extern void _ZN10S1503C4_nt3v45Ev();
extern void _ZN10S1503C4_nt3v46Ev();
extern void _ZN10S1503C4_nt3v47Ev();
extern void _ZN10S1503C4_nt3v48Ev();
extern void _ZN10S1503C4_nt3v49Ev();
extern void _ZN10S1503C4_nt3v50Ev();
extern void _ZN10S1503C4_nt3v51Ev();
extern void _ZN10S1503C4_nt3v52Ev();
extern void _ZN10S1503C4_nt3v53Ev();
extern void _ZN10S1503C4_nt3v54Ev();
extern void _ZN10S1503C4_nt3v55Ev();
extern void _ZN10S1503C4_nt3v56Ev();
extern void _ZN10S1503C4_nt3v57Ev();
extern void _ZN10S1503C4_nt3v58Ev();
extern void _ZN10S1503C4_nt3v59Ev();
extern void _ZN10S1503C4_nt3v60Ev();
extern void _ZN10S1503C4_nt3v61Ev();
extern void _ZN10S1503C4_nt3v62Ev();
extern void _ZN10S1503C4_nt3v63Ev();
extern void _ZN10S1503C4_nt3v64Ev();
extern void _ZN10S1503C4_nt3v65Ev();
extern void _ZN10S1503C4_nt3v66Ev();
extern void _ZN10S1503C4_nt3v67Ev();
extern void _ZN10S1503C4_nt3v68Ev();
extern void _ZN10S1503C4_nt3v69Ev();
static  VTBL_ENTRY vtc_S1503C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1503C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S1503C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v69Ev,
};
extern VTBL_ENTRY _ZTI10S1503C4_nt[];
VTBL_ENTRY *P__ZTI10S1503C4_nt = _ZTI10S1503C4_nt; 
extern  VTBL_ENTRY _ZTV10S1503C4_nt[];
Class_Descriptor cd_S1503C4_nt = {  "S1503C4_nt", // class name
  0,0,//no base classes
  &(vtc_S1503C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI10S1503C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1503C4_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  S1503C8_nt  {
  void *s1503c8f0;
  int s1503c8f1[2];
  void  mf1503c8(); // _ZN10S1503C8_nt8mf1503c8Ev
};
//SIG(-1 S1503C8_nt) C1{ m Fp Fi[2]}


void  S1503C8_nt ::mf1503c8(){}

//skip512 S1503C8_nt

#else // __cplusplus

Class_Descriptor cd_S1503C8_nt = {  "S1503C8_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  S1503C7_nt  : S1503C8_nt {
};
//SIG(-1 S1503C7_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S1503C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
static Base_Class bases_S1503C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_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_S1503C7_nt = {  "S1503C7_nt", // class name
  bases_S1503C7_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  S1503C6_nt  : S1503C7_nt {
};
//SIG(-1 S1503C6_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S1503C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
extern Class_Descriptor cd_S1503C7_nt;
static Base_Class bases_S1503C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_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_S1503C7_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  S1503C9_nt  {
  int s1503c9f0;
  void  mf1503c9(); // _ZN10S1503C9_nt8mf1503c9Ev
};
//SIG(-1 S1503C9_nt) C1{ m Fi}


void  S1503C9_nt ::mf1503c9(){}

//skip512 S1503C9_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S1503C9_nt[];
VTBL_ENTRY *P__ZTI10S1503C9_nt = _ZTI10S1503C9_nt; 
Class_Descriptor cd_S1503C9_nt = {  "S1503C9_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI10S1503C9_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  S1503C13  : S1503C8_nt {
};
//SIG(-1 S1503C13) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1503C13()
{
  extern Class_Descriptor cd_S1503C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1503C13, buf);
    S1503C13 &lv = *(new (buf) S1503C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1503C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C13)");
    check_base_class_offset(lv, (S1503C8_nt*), 0, "S1503C13");
    test_class_info(&lv, &cd_S1503C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C13(Test_S1503C13, "S1503C13", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
static Base_Class bases_S1503C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_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_S1503C13 = {  "S1503C13", // class name
  bases_S1503C13, 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  S1503C12  : S1503C13 {
};
//SIG(-1 S1503C12) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1503C12()
{
  extern Class_Descriptor cd_S1503C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1503C12, buf);
    S1503C12 &lv = *(new (buf) S1503C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1503C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C12)");
    check_base_class_offset(lv, (S1503C8_nt*)(S1503C13*), 0, "S1503C12");
    check_base_class_offset(lv, (S1503C13*), 0, "S1503C12");
    test_class_info(&lv, &cd_S1503C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C12(Test_S1503C12, "S1503C12", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
extern Class_Descriptor cd_S1503C13;
static Base_Class bases_S1503C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_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_S1503C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S1503C12 = {  "S1503C12", // class name
  bases_S1503C12, 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  S1503C14_nt  {
  int s1503c14f0[3];
  void  mf1503c14(); // _ZN11S1503C14_nt9mf1503c14Ev
};
//SIG(-1 S1503C14_nt) C1{ m Fi[3]}


void  S1503C14_nt ::mf1503c14(){}

//skip512 S1503C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1503C19  : S1503C8_nt {
};
//SIG(-1 S1503C19) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1503C19()
{
  extern Class_Descriptor cd_S1503C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1503C19, buf);
    S1503C19 &lv = *(new (buf) S1503C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1503C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C19)");
    check_base_class_offset(lv, (S1503C8_nt*), 0, "S1503C19");
    test_class_info(&lv, &cd_S1503C19);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C19(Test_S1503C19, "S1503C19", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
static Base_Class bases_S1503C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_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_S1503C19 = {  "S1503C19", // class name
  bases_S1503C19, 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  S1503C18  : S1503C19 {
};
//SIG(-1 S1503C18) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1503C18()
{
  extern Class_Descriptor cd_S1503C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1503C18, buf);
    S1503C18 &lv = *(new (buf) S1503C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1503C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C18)");
    check_base_class_offset(lv, (S1503C8_nt*)(S1503C19*), 0, "S1503C18");
    check_base_class_offset(lv, (S1503C19*), 0, "S1503C18");
    test_class_info(&lv, &cd_S1503C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C18(Test_S1503C18, "S1503C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
extern Class_Descriptor cd_S1503C19;
static Base_Class bases_S1503C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_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_S1503C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S1503C18 = {  "S1503C18", // class name
  bases_S1503C18, 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  S1503C3_nt  : S1503C4_nt {
  ::S1503C6_nt s1503c3f0;
  ::S1503C6_nt s1503c3f1;
  ::S1503C9_nt s1503c3f2;
  int s1503c3f3;
  char s1503c3f4[4];
  void *s1503c3f5[2];
  ::S1503C6_nt s1503c3f6;
  unsigned int s1503c3f7:1;
  unsigned int s1503c3f8:1;
  unsigned int s1503c3f9:1;
  unsigned int s1503c3f10:1;
  unsigned int s1503c3f11:1;
  unsigned int s1503c3f12:1;
  unsigned int s1503c3f13:1;
  unsigned int s1503c3f14:1;
  unsigned int s1503c3f15:1;
  unsigned int s1503c3f16:1;
  unsigned int s1503c3f17:1;
  unsigned int s1503c3f18:1;
  unsigned int s1503c3f19:1;
  unsigned int s1503c3f20:1;
  unsigned int s1503c3f21:1;
  unsigned int s1503c3f22:1;
  unsigned int s1503c3f23:1;
  unsigned int s1503c3f24:1;
  unsigned int s1503c3f25:1;
  unsigned int s1503c3f26:1;
  unsigned int s1503c3f27:1;
  unsigned int s1503c3f28:1;
  unsigned int s1503c3f29:1;
  unsigned int s1503c3f30:1;
  unsigned int s1503c3f31:1;
  unsigned int s1503c3f32:1;
  unsigned int s1503c3f33:1;
  unsigned int s1503c3f34:1;
  unsigned int s1503c3f35:1;
  unsigned int s1503c3f36:1;
  unsigned int s1503c3f37:1;
  unsigned int s1503c3f38:1;
  unsigned int s1503c3f39:1;
  unsigned int s1503c3f40:1;
  unsigned int s1503c3f41:1;
  unsigned int s1503c3f42:1;
  unsigned int s1503c3f43:1;
  unsigned int s1503c3f44:1;
  unsigned int s1503c3f45:1;
  unsigned int s1503c3f46:1;
  unsigned int s1503c3f47:1;
  unsigned int s1503c3f48:1;
  unsigned int s1503c3f49:1;
  unsigned int s1503c3f50:1;
  unsigned int s1503c3f51:1;
  unsigned int s1503c3f52:1;
  unsigned int s1503c3f53:1;
  unsigned int s1503c3f54:1;
  unsigned int s1503c3f55:1;
  unsigned int s1503c3f56:1;
  unsigned int s1503c3f57:1;
  unsigned int s1503c3f58:1;
  unsigned int s1503c3f59:1;
  unsigned int s1503c3f60:1;
  unsigned int s1503c3f61:1;
  unsigned int s1503c3f62:1;
  unsigned int s1503c3f63:1;
  unsigned int s1503c3f64:1;
  unsigned int s1503c3f65:1;
  unsigned int s1503c3f66:1;
  unsigned int s1503c3f67:1;
  unsigned int s1503c3f68:1;
  unsigned int s1503c3f69:1;
  unsigned int s1503c3f70:1;
  unsigned int s1503c3f71:1;
  unsigned int s1503c3f72:1;
  unsigned int s1503c3f73:1;
  unsigned int s1503c3f74:1;
  unsigned int s1503c3f75:1;
  unsigned int s1503c3f76:1;
  unsigned int s1503c3f77:1;
  unsigned int s1503c3f78:1;
  unsigned int s1503c3f79:1;
  unsigned int s1503c3f80:1;
  unsigned int s1503c3f81:1;
  unsigned int s1503c3f82:1;
  unsigned int s1503c3f83:1;
  int s1503c3f84[5];
  void *s1503c3f85[2];
  int s1503c3f86[3];
  ::S1503C5_nt s1503c3f87;
  ::S1503C5_nt s1503c3f88;
  ::S1503C5_nt s1503c3f89;
  ::S1503C12 s1503c3f90;
  ::S1503C12 s1503c3f91;
  int s1503c3f92;
  void *s1503c3f93[2];
  ::S1503C14_nt s1503c3f94;
  ::S1503C14_nt s1503c3f95;
  ::S1503C14_nt s1503c3f96;
  ::S1503C14_nt s1503c3f97;
  void *s1503c3f98;
  ::S1503C5_nt s1503c3f99;
  ::S1503C12 s1503c3f100;
  ::S1503C14_nt s1503c3f101;
  ::S1503C14_nt s1503c3f102;
  int s1503c3f103;
  ::S1503C14_nt s1503c3f104;
  ::S1503C14_nt s1503c3f105;
  void *s1503c3f106;
  int s1503c3f107;
  char s1503c3f108;
  ::S1503C14_nt s1503c3f109;
  ::S1503C14_nt s1503c3f110;
  void *s1503c3f111;
  int s1503c3f112;
  void *s1503c3f113;
  ::S1503C12 s1503c3f114;
  ::S1503C18 s1503c3f115;
  ::S1503C18 s1503c3f116;
  virtual  ~S1503C3_nt(); // _ZN10S1503C3_ntD1Ev
  virtual void  v70(); // _ZN10S1503C3_nt3v70Ev
  virtual void  v71(); // _ZN10S1503C3_nt3v71Ev
  virtual void  v72(); // _ZN10S1503C3_nt3v72Ev
  virtual void  v73(); // _ZN10S1503C3_nt3v73Ev
  virtual void  v74(); // _ZN10S1503C3_nt3v74Ev
  virtual void  v75(); // _ZN10S1503C3_nt3v75Ev
  virtual void  v76(); // _ZN10S1503C3_nt3v76Ev
  virtual void  v77(); // _ZN10S1503C3_nt3v77Ev
  virtual void  v78(); // _ZN10S1503C3_nt3v78Ev
  virtual void  v79(); // _ZN10S1503C3_nt3v79Ev
  virtual void  v80(); // _ZN10S1503C3_nt3v80Ev
  virtual void  v81(); // _ZN10S1503C3_nt3v81Ev
  virtual void  v82(); // _ZN10S1503C3_nt3v82Ev
  virtual void  v83(); // _ZN10S1503C3_nt3v83Ev
  virtual void  v84(); // _ZN10S1503C3_nt3v84Ev
  virtual void  v85(); // _ZN10S1503C3_nt3v85Ev
  virtual void  v86(); // _ZN10S1503C3_nt3v86Ev
  virtual void  v87(); // _ZN10S1503C3_nt3v87Ev
  virtual void  v88(); // _ZN10S1503C3_nt3v88Ev
  virtual void  v89(); // _ZN10S1503C3_nt3v89Ev
  virtual void  v90(); // _ZN10S1503C3_nt3v90Ev
  virtual void  v91(); // _ZN10S1503C3_nt3v91Ev
  virtual void  v92(); // _ZN10S1503C3_nt3v92Ev
  virtual void  v93(); // _ZN10S1503C3_nt3v93Ev
  virtual void  v94(); // _ZN10S1503C3_nt3v94Ev
  virtual void  v95(); // _ZN10S1503C3_nt3v95Ev
  virtual void  v96(); // _ZN10S1503C3_nt3v96Ev
  virtual void  v97(); // _ZN10S1503C3_nt3v97Ev
  virtual void  v98(); // _ZN10S1503C3_nt3v98Ev
  virtual void  v99(); // _ZN10S1503C3_nt3v99Ev
  virtual void  v100(); // _ZN10S1503C3_nt4v100Ev
  virtual void  v101(); // _ZN10S1503C3_nt4v101Ev
  virtual void  v102(); // _ZN10S1503C3_nt4v102Ev
  virtual void  v103(); // _ZN10S1503C3_nt4v103Ev
  virtual void  v104(); // _ZN10S1503C3_nt4v104Ev
  virtual void  v105(); // _ZN10S1503C3_nt4v105Ev
  virtual void  v106(); // _ZN10S1503C3_nt4v106Ev
  virtual void  v107(); // _ZN10S1503C3_nt4v107Ev
  virtual void  v108(); // _ZN10S1503C3_nt4v108Ev
  virtual void  v109(); // _ZN10S1503C3_nt4v109Ev
  virtual void  v110(); // _ZN10S1503C3_nt4v110Ev
  virtual void  v111(); // _ZN10S1503C3_nt4v111Ev
  virtual void  v112(); // _ZN10S1503C3_nt4v112Ev
  virtual void  v113(); // _ZN10S1503C3_nt4v113Ev
  virtual void  v114(); // _ZN10S1503C3_nt4v114Ev
  virtual void  v115(); // _ZN10S1503C3_nt4v115Ev
  virtual void  v116(); // _ZN10S1503C3_nt4v116Ev
  virtual void  v117(); // _ZN10S1503C3_nt4v117Ev
  virtual void  v118(); // _ZN10S1503C3_nt4v118Ev
  virtual void  v119(); // _ZN10S1503C3_nt4v119Ev
  virtual void  v120(); // _ZN10S1503C3_nt4v120Ev
  virtual void  v121(); // _ZN10S1503C3_nt4v121Ev
  virtual void  v122(); // _ZN10S1503C3_nt4v122Ev
  virtual void  v123(); // _ZN10S1503C3_nt4v123Ev
  virtual void  v124(); // _ZN10S1503C3_nt4v124Ev
  virtual void  v125(); // _ZN10S1503C3_nt4v125Ev
  virtual void  v126(); // _ZN10S1503C3_nt4v126Ev
  virtual void  v127(); // _ZN10S1503C3_nt4v127Ev
  virtual void  v128(); // _ZN10S1503C3_nt4v128Ev
  virtual void  v129(); // _ZN10S1503C3_nt4v129Ev
  virtual void  v130(); // _ZN10S1503C3_nt4v130Ev
  virtual void  v131(); // _ZN10S1503C3_nt4v131Ev
  virtual void  v132(); // _ZN10S1503C3_nt4v132Ev
  virtual void  v133(); // _ZN10S1503C3_nt4v133Ev
  virtual void  v134(); // _ZN10S1503C3_nt4v134Ev
  virtual void  v135(); // _ZN10S1503C3_nt4v135Ev
  virtual void  v136(); // _ZN10S1503C3_nt4v136Ev
  virtual void  v137(); // _ZN10S1503C3_nt4v137Ev
  virtual void  v138(); // _ZN10S1503C3_nt4v138Ev
  virtual void  v139(); // _ZN10S1503C3_nt4v139Ev
  virtual void  v140(); // _ZN10S1503C3_nt4v140Ev
  virtual void  v141(); // _ZN10S1503C3_nt4v141Ev
  virtual void  v142(); // _ZN10S1503C3_nt4v142Ev
  virtual void  v143(); // _ZN10S1503C3_nt4v143Ev
  virtual void  v144(); // _ZN10S1503C3_nt4v144Ev
  virtual void  v145(); // _ZN10S1503C3_nt4v145Ev
  virtual void  v146(); // _ZN10S1503C3_nt4v146Ev
  virtual void  v147(); // _ZN10S1503C3_nt4v147Ev
  virtual void  v148(); // _ZN10S1503C3_nt4v148Ev
  virtual void  v149(); // _ZN10S1503C3_nt4v149Ev
  virtual void  v150(); // _ZN10S1503C3_nt4v150Ev
  virtual void  v151(); // _ZN10S1503C3_nt4v151Ev
  virtual void  v152(); // _ZN10S1503C3_nt4v152Ev
  virtual void  v153(); // _ZN10S1503C3_nt4v153Ev
  virtual void  v154(); // _ZN10S1503C3_nt4v154Ev
  virtual void  v155(); // _ZN10S1503C3_nt4v155Ev
  virtual void  v156(); // _ZN10S1503C3_nt4v156Ev
  virtual void  v157(); // _ZN10S1503C3_nt4v157Ev
  virtual void  v158(); // _ZN10S1503C3_nt4v158Ev
  virtual void  v159(); // _ZN10S1503C3_nt4v159Ev
  virtual void  v160(); // _ZN10S1503C3_nt4v160Ev
  virtual void  v161(); // _ZN10S1503C3_nt4v161Ev
  virtual void  v162(); // _ZN10S1503C3_nt4v162Ev
  virtual void  v163(); // _ZN10S1503C3_nt4v163Ev
  virtual void  v164(); // _ZN10S1503C3_nt4v164Ev
  virtual void  v165(); // _ZN10S1503C3_nt4v165Ev
  virtual void  v166(); // _ZN10S1503C3_nt4v166Ev
  virtual void  v167(); // _ZN10S1503C3_nt4v167Ev
  virtual void  v168(); // _ZN10S1503C3_nt4v168Ev
  virtual void  v169(); // _ZN10S1503C3_nt4v169Ev
  virtual void  v170(); // _ZN10S1503C3_nt4v170Ev
  virtual void  v171(); // _ZN10S1503C3_nt4v171Ev
  virtual void  v172(); // _ZN10S1503C3_nt4v172Ev
  virtual void  v173(); // _ZN10S1503C3_nt4v173Ev
  virtual void  v174(); // _ZN10S1503C3_nt4v174Ev
  virtual void  v175(); // _ZN10S1503C3_nt4v175Ev
  virtual void  v176(); // _ZN10S1503C3_nt4v176Ev
  virtual void  v177(); // _ZN10S1503C3_nt4v177Ev
  virtual void  v178(); // _ZN10S1503C3_nt4v178Ev
  virtual void  v179(); // _ZN10S1503C3_nt4v179Ev
  virtual void  v180(); // _ZN10S1503C3_nt4v180Ev
  virtual void  v181(); // _ZN10S1503C3_nt4v181Ev
  virtual void  v182(); // _ZN10S1503C3_nt4v182Ev
  virtual void  v183(); // _ZN10S1503C3_nt4v183Ev
  virtual void  v184(); // _ZN10S1503C3_nt4v184Ev
  virtual void  v185(); // _ZN10S1503C3_nt4v185Ev
  virtual void  v186(); // _ZN10S1503C3_nt4v186Ev
  virtual void  v187(); // _ZN10S1503C3_nt4v187Ev
  virtual void  v188(); // _ZN10S1503C3_nt4v188Ev
  virtual void  v189(); // _ZN10S1503C3_nt4v189Ev
  virtual void  v190(); // _ZN10S1503C3_nt4v190Ev
  virtual void  v191(); // _ZN10S1503C3_nt4v191Ev
  virtual void  v192(); // _ZN10S1503C3_nt4v192Ev
  virtual void  v193(); // _ZN10S1503C3_nt4v193Ev
  virtual void  v194(); // _ZN10S1503C3_nt4v194Ev
  virtual void  v195(); // _ZN10S1503C3_nt4v195Ev
  virtual void  v196(); // _ZN10S1503C3_nt4v196Ev
  virtual void  v197(); // _ZN10S1503C3_nt4v197Ev
  virtual void  v198(); // _ZN10S1503C3_nt4v198Ev
  virtual void  v199(); // _ZN10S1503C3_nt4v199Ev
  virtual void  v200(); // _ZN10S1503C3_nt4v200Ev
  virtual void  v201(); // _ZN10S1503C3_nt4v201Ev
  virtual void  v202(); // _ZN10S1503C3_nt4v202Ev
  virtual void  v203(); // _ZN10S1503C3_nt4v203Ev
  virtual void  v204(); // _ZN10S1503C3_nt4v204Ev
  virtual void  v205(); // _ZN10S1503C3_nt4v205Ev
  virtual void  v206(); // _ZN10S1503C3_nt4v206Ev
  virtual void  v207(); // _ZN10S1503C3_nt4v207Ev
  virtual void  v208(); // _ZN10S1503C3_nt4v208Ev
  virtual void  v209(); // _ZN10S1503C3_nt4v209Ev
  virtual void  v210(); // _ZN10S1503C3_nt4v210Ev
  virtual void  v211(); // _ZN10S1503C3_nt4v211Ev
  virtual void  v212(); // _ZN10S1503C3_nt4v212Ev
  S1503C3_nt(); // tgen
};
//SIG(-1 S1503C3_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}


 S1503C3_nt ::~S1503C3_nt(){ note_dtor("S1503C3_nt", this);}
void  S1503C3_nt ::v70(){vfunc_called(this, "_ZN10S1503C3_nt3v70Ev");}
void  S1503C3_nt ::v71(){vfunc_called(this, "_ZN10S1503C3_nt3v71Ev");}
void  S1503C3_nt ::v72(){vfunc_called(this, "_ZN10S1503C3_nt3v72Ev");}
void  S1503C3_nt ::v73(){vfunc_called(this, "_ZN10S1503C3_nt3v73Ev");}
void  S1503C3_nt ::v74(){vfunc_called(this, "_ZN10S1503C3_nt3v74Ev");}
void  S1503C3_nt ::v75(){vfunc_called(this, "_ZN10S1503C3_nt3v75Ev");}
void  S1503C3_nt ::v76(){vfunc_called(this, "_ZN10S1503C3_nt3v76Ev");}
void  S1503C3_nt ::v77(){vfunc_called(this, "_ZN10S1503C3_nt3v77Ev");}
void  S1503C3_nt ::v78(){vfunc_called(this, "_ZN10S1503C3_nt3v78Ev");}
void  S1503C3_nt ::v79(){vfunc_called(this, "_ZN10S1503C3_nt3v79Ev");}
void  S1503C3_nt ::v80(){vfunc_called(this, "_ZN10S1503C3_nt3v80Ev");}
void  S1503C3_nt ::v81(){vfunc_called(this, "_ZN10S1503C3_nt3v81Ev");}
void  S1503C3_nt ::v82(){vfunc_called(this, "_ZN10S1503C3_nt3v82Ev");}
void  S1503C3_nt ::v83(){vfunc_called(this, "_ZN10S1503C3_nt3v83Ev");}
void  S1503C3_nt ::v84(){vfunc_called(this, "_ZN10S1503C3_nt3v84Ev");}
void  S1503C3_nt ::v85(){vfunc_called(this, "_ZN10S1503C3_nt3v85Ev");}
void  S1503C3_nt ::v86(){vfunc_called(this, "_ZN10S1503C3_nt3v86Ev");}
void  S1503C3_nt ::v87(){vfunc_called(this, "_ZN10S1503C3_nt3v87Ev");}
void  S1503C3_nt ::v88(){vfunc_called(this, "_ZN10S1503C3_nt3v88Ev");}
void  S1503C3_nt ::v89(){vfunc_called(this, "_ZN10S1503C3_nt3v89Ev");}
void  S1503C3_nt ::v90(){vfunc_called(this, "_ZN10S1503C3_nt3v90Ev");}
void  S1503C3_nt ::v91(){vfunc_called(this, "_ZN10S1503C3_nt3v91Ev");}
void  S1503C3_nt ::v92(){vfunc_called(this, "_ZN10S1503C3_nt3v92Ev");}
void  S1503C3_nt ::v93(){vfunc_called(this, "_ZN10S1503C3_nt3v93Ev");}
void  S1503C3_nt ::v94(){vfunc_called(this, "_ZN10S1503C3_nt3v94Ev");}
void  S1503C3_nt ::v95(){vfunc_called(this, "_ZN10S1503C3_nt3v95Ev");}
void  S1503C3_nt ::v96(){vfunc_called(this, "_ZN10S1503C3_nt3v96Ev");}
void  S1503C3_nt ::v97(){vfunc_called(this, "_ZN10S1503C3_nt3v97Ev");}
void  S1503C3_nt ::v98(){vfunc_called(this, "_ZN10S1503C3_nt3v98Ev");}
void  S1503C3_nt ::v99(){vfunc_called(this, "_ZN10S1503C3_nt3v99Ev");}
void  S1503C3_nt ::v100(){vfunc_called(this, "_ZN10S1503C3_nt4v100Ev");}
void  S1503C3_nt ::v101(){vfunc_called(this, "_ZN10S1503C3_nt4v101Ev");}
void  S1503C3_nt ::v102(){vfunc_called(this, "_ZN10S1503C3_nt4v102Ev");}
void  S1503C3_nt ::v103(){vfunc_called(this, "_ZN10S1503C3_nt4v103Ev");}
void  S1503C3_nt ::v104(){vfunc_called(this, "_ZN10S1503C3_nt4v104Ev");}
void  S1503C3_nt ::v105(){vfunc_called(this, "_ZN10S1503C3_nt4v105Ev");}
void  S1503C3_nt ::v106(){vfunc_called(this, "_ZN10S1503C3_nt4v106Ev");}
void  S1503C3_nt ::v107(){vfunc_called(this, "_ZN10S1503C3_nt4v107Ev");}
void  S1503C3_nt ::v108(){vfunc_called(this, "_ZN10S1503C3_nt4v108Ev");}
void  S1503C3_nt ::v109(){vfunc_called(this, "_ZN10S1503C3_nt4v109Ev");}
void  S1503C3_nt ::v110(){vfunc_called(this, "_ZN10S1503C3_nt4v110Ev");}
void  S1503C3_nt ::v111(){vfunc_called(this, "_ZN10S1503C3_nt4v111Ev");}
void  S1503C3_nt ::v112(){vfunc_called(this, "_ZN10S1503C3_nt4v112Ev");}
void  S1503C3_nt ::v113(){vfunc_called(this, "_ZN10S1503C3_nt4v113Ev");}
void  S1503C3_nt ::v114(){vfunc_called(this, "_ZN10S1503C3_nt4v114Ev");}
void  S1503C3_nt ::v115(){vfunc_called(this, "_ZN10S1503C3_nt4v115Ev");}
void  S1503C3_nt ::v116(){vfunc_called(this, "_ZN10S1503C3_nt4v116Ev");}
void  S1503C3_nt ::v117(){vfunc_called(this, "_ZN10S1503C3_nt4v117Ev");}
void  S1503C3_nt ::v118(){vfunc_called(this, "_ZN10S1503C3_nt4v118Ev");}
void  S1503C3_nt ::v119(){vfunc_called(this, "_ZN10S1503C3_nt4v119Ev");}
void  S1503C3_nt ::v120(){vfunc_called(this, "_ZN10S1503C3_nt4v120Ev");}
void  S1503C3_nt ::v121(){vfunc_called(this, "_ZN10S1503C3_nt4v121Ev");}
void  S1503C3_nt ::v122(){vfunc_called(this, "_ZN10S1503C3_nt4v122Ev");}
void  S1503C3_nt ::v123(){vfunc_called(this, "_ZN10S1503C3_nt4v123Ev");}
void  S1503C3_nt ::v124(){vfunc_called(this, "_ZN10S1503C3_nt4v124Ev");}
void  S1503C3_nt ::v125(){vfunc_called(this, "_ZN10S1503C3_nt4v125Ev");}
void  S1503C3_nt ::v126(){vfunc_called(this, "_ZN10S1503C3_nt4v126Ev");}
void  S1503C3_nt ::v127(){vfunc_called(this, "_ZN10S1503C3_nt4v127Ev");}
void  S1503C3_nt ::v128(){vfunc_called(this, "_ZN10S1503C3_nt4v128Ev");}
void  S1503C3_nt ::v129(){vfunc_called(this, "_ZN10S1503C3_nt4v129Ev");}
void  S1503C3_nt ::v130(){vfunc_called(this, "_ZN10S1503C3_nt4v130Ev");}
void  S1503C3_nt ::v131(){vfunc_called(this, "_ZN10S1503C3_nt4v131Ev");}
void  S1503C3_nt ::v132(){vfunc_called(this, "_ZN10S1503C3_nt4v132Ev");}
void  S1503C3_nt ::v133(){vfunc_called(this, "_ZN10S1503C3_nt4v133Ev");}
void  S1503C3_nt ::v134(){vfunc_called(this, "_ZN10S1503C3_nt4v134Ev");}
void  S1503C3_nt ::v135(){vfunc_called(this, "_ZN10S1503C3_nt4v135Ev");}
void  S1503C3_nt ::v136(){vfunc_called(this, "_ZN10S1503C3_nt4v136Ev");}
void  S1503C3_nt ::v137(){vfunc_called(this, "_ZN10S1503C3_nt4v137Ev");}
void  S1503C3_nt ::v138(){vfunc_called(this, "_ZN10S1503C3_nt4v138Ev");}
void  S1503C3_nt ::v139(){vfunc_called(this, "_ZN10S1503C3_nt4v139Ev");}
void  S1503C3_nt ::v140(){vfunc_called(this, "_ZN10S1503C3_nt4v140Ev");}
void  S1503C3_nt ::v141(){vfunc_called(this, "_ZN10S1503C3_nt4v141Ev");}
void  S1503C3_nt ::v142(){vfunc_called(this, "_ZN10S1503C3_nt4v142Ev");}
void  S1503C3_nt ::v143(){vfunc_called(this, "_ZN10S1503C3_nt4v143Ev");}
void  S1503C3_nt ::v144(){vfunc_called(this, "_ZN10S1503C3_nt4v144Ev");}
void  S1503C3_nt ::v145(){vfunc_called(this, "_ZN10S1503C3_nt4v145Ev");}
void  S1503C3_nt ::v146(){vfunc_called(this, "_ZN10S1503C3_nt4v146Ev");}
void  S1503C3_nt ::v147(){vfunc_called(this, "_ZN10S1503C3_nt4v147Ev");}
void  S1503C3_nt ::v148(){vfunc_called(this, "_ZN10S1503C3_nt4v148Ev");}
void  S1503C3_nt ::v149(){vfunc_called(this, "_ZN10S1503C3_nt4v149Ev");}
void  S1503C3_nt ::v150(){vfunc_called(this, "_ZN10S1503C3_nt4v150Ev");}
void  S1503C3_nt ::v151(){vfunc_called(this, "_ZN10S1503C3_nt4v151Ev");}
void  S1503C3_nt ::v152(){vfunc_called(this, "_ZN10S1503C3_nt4v152Ev");}
void  S1503C3_nt ::v153(){vfunc_called(this, "_ZN10S1503C3_nt4v153Ev");}
void  S1503C3_nt ::v154(){vfunc_called(this, "_ZN10S1503C3_nt4v154Ev");}
void  S1503C3_nt ::v155(){vfunc_called(this, "_ZN10S1503C3_nt4v155Ev");}
void  S1503C3_nt ::v156(){vfunc_called(this, "_ZN10S1503C3_nt4v156Ev");}
void  S1503C3_nt ::v157(){vfunc_called(this, "_ZN10S1503C3_nt4v157Ev");}
void  S1503C3_nt ::v158(){vfunc_called(this, "_ZN10S1503C3_nt4v158Ev");}
void  S1503C3_nt ::v159(){vfunc_called(this, "_ZN10S1503C3_nt4v159Ev");}
void  S1503C3_nt ::v160(){vfunc_called(this, "_ZN10S1503C3_nt4v160Ev");}
void  S1503C3_nt ::v161(){vfunc_called(this, "_ZN10S1503C3_nt4v161Ev");}
void  S1503C3_nt ::v162(){vfunc_called(this, "_ZN10S1503C3_nt4v162Ev");}
void  S1503C3_nt ::v163(){vfunc_called(this, "_ZN10S1503C3_nt4v163Ev");}
void  S1503C3_nt ::v164(){vfunc_called(this, "_ZN10S1503C3_nt4v164Ev");}
void  S1503C3_nt ::v165(){vfunc_called(this, "_ZN10S1503C3_nt4v165Ev");}
void  S1503C3_nt ::v166(){vfunc_called(this, "_ZN10S1503C3_nt4v166Ev");}
void  S1503C3_nt ::v167(){vfunc_called(this, "_ZN10S1503C3_nt4v167Ev");}
void  S1503C3_nt ::v168(){vfunc_called(this, "_ZN10S1503C3_nt4v168Ev");}
void  S1503C3_nt ::v169(){vfunc_called(this, "_ZN10S1503C3_nt4v169Ev");}
void  S1503C3_nt ::v170(){vfunc_called(this, "_ZN10S1503C3_nt4v170Ev");}
void  S1503C3_nt ::v171(){vfunc_called(this, "_ZN10S1503C3_nt4v171Ev");}
void  S1503C3_nt ::v172(){vfunc_called(this, "_ZN10S1503C3_nt4v172Ev");}
void  S1503C3_nt ::v173(){vfunc_called(this, "_ZN10S1503C3_nt4v173Ev");}
void  S1503C3_nt ::v174(){vfunc_called(this, "_ZN10S1503C3_nt4v174Ev");}
void  S1503C3_nt ::v175(){vfunc_called(this, "_ZN10S1503C3_nt4v175Ev");}
void  S1503C3_nt ::v176(){vfunc_called(this, "_ZN10S1503C3_nt4v176Ev");}
void  S1503C3_nt ::v177(){vfunc_called(this, "_ZN10S1503C3_nt4v177Ev");}
void  S1503C3_nt ::v178(){vfunc_called(this, "_ZN10S1503C3_nt4v178Ev");}
void  S1503C3_nt ::v179(){vfunc_called(this, "_ZN10S1503C3_nt4v179Ev");}
void  S1503C3_nt ::v180(){vfunc_called(this, "_ZN10S1503C3_nt4v180Ev");}
void  S1503C3_nt ::v181(){vfunc_called(this, "_ZN10S1503C3_nt4v181Ev");}
void  S1503C3_nt ::v182(){vfunc_called(this, "_ZN10S1503C3_nt4v182Ev");}
void  S1503C3_nt ::v183(){vfunc_called(this, "_ZN10S1503C3_nt4v183Ev");}
void  S1503C3_nt ::v184(){vfunc_called(this, "_ZN10S1503C3_nt4v184Ev");}
void  S1503C3_nt ::v185(){vfunc_called(this, "_ZN10S1503C3_nt4v185Ev");}
void  S1503C3_nt ::v186(){vfunc_called(this, "_ZN10S1503C3_nt4v186Ev");}
void  S1503C3_nt ::v187(){vfunc_called(this, "_ZN10S1503C3_nt4v187Ev");}
void  S1503C3_nt ::v188(){vfunc_called(this, "_ZN10S1503C3_nt4v188Ev");}
void  S1503C3_nt ::v189(){vfunc_called(this, "_ZN10S1503C3_nt4v189Ev");}
void  S1503C3_nt ::v190(){vfunc_called(this, "_ZN10S1503C3_nt4v190Ev");}
void  S1503C3_nt ::v191(){vfunc_called(this, "_ZN10S1503C3_nt4v191Ev");}
void  S1503C3_nt ::v192(){vfunc_called(this, "_ZN10S1503C3_nt4v192Ev");}
void  S1503C3_nt ::v193(){vfunc_called(this, "_ZN10S1503C3_nt4v193Ev");}
void  S1503C3_nt ::v194(){vfunc_called(this, "_ZN10S1503C3_nt4v194Ev");}
void  S1503C3_nt ::v195(){vfunc_called(this, "_ZN10S1503C3_nt4v195Ev");}
void  S1503C3_nt ::v196(){vfunc_called(this, "_ZN10S1503C3_nt4v196Ev");}
void  S1503C3_nt ::v197(){vfunc_called(this, "_ZN10S1503C3_nt4v197Ev");}
void  S1503C3_nt ::v198(){vfunc_called(this, "_ZN10S1503C3_nt4v198Ev");}
void  S1503C3_nt ::v199(){vfunc_called(this, "_ZN10S1503C3_nt4v199Ev");}
void  S1503C3_nt ::v200(){vfunc_called(this, "_ZN10S1503C3_nt4v200Ev");}
void  S1503C3_nt ::v201(){vfunc_called(this, "_ZN10S1503C3_nt4v201Ev");}
void  S1503C3_nt ::v202(){vfunc_called(this, "_ZN10S1503C3_nt4v202Ev");}
void  S1503C3_nt ::v203(){vfunc_called(this, "_ZN10S1503C3_nt4v203Ev");}
void  S1503C3_nt ::v204(){vfunc_called(this, "_ZN10S1503C3_nt4v204Ev");}
void  S1503C3_nt ::v205(){vfunc_called(this, "_ZN10S1503C3_nt4v205Ev");}
void  S1503C3_nt ::v206(){vfunc_called(this, "_ZN10S1503C3_nt4v206Ev");}
void  S1503C3_nt ::v207(){vfunc_called(this, "_ZN10S1503C3_nt4v207Ev");}
void  S1503C3_nt ::v208(){vfunc_called(this, "_ZN10S1503C3_nt4v208Ev");}
void  S1503C3_nt ::v209(){vfunc_called(this, "_ZN10S1503C3_nt4v209Ev");}
void  S1503C3_nt ::v210(){vfunc_called(this, "_ZN10S1503C3_nt4v210Ev");}
void  S1503C3_nt ::v211(){vfunc_called(this, "_ZN10S1503C3_nt4v211Ev");}
void  S1503C3_nt ::v212(){vfunc_called(this, "_ZN10S1503C3_nt4v212Ev");}
S1503C3_nt ::S1503C3_nt(){ note_ctor("S1503C3_nt", this);} // tgen

//skip512 S1503C3_nt

#else // __cplusplus

extern void _ZN10S1503C3_ntC1Ev();
extern void _ZN10S1503C3_ntD1Ev();
Name_Map name_map_S1503C3_nt[] = {
  NSPAIR(_ZN10S1503C3_ntC1Ev),
  NSPAIR(_ZN10S1503C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1503C4_nt;
extern VTBL_ENTRY _ZTI10S1503C4_nt[];
extern  VTBL_ENTRY _ZTV10S1503C4_nt[];
static Base_Class bases_S1503C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C4_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 _ZTI10S1503C3_nt[];
extern void _ZN10S1503C3_ntD1Ev();
extern void _ZN10S1503C3_ntD0Ev();
extern void _ZN10S1503C4_nt2v6Ev();
extern void _ZN10S1503C4_nt2v7Ev();
extern void _ZN10S1503C4_nt2v8Ev();
extern void _ZN10S1503C4_nt2v9Ev();
extern void _ZN10S1503C4_nt3v10Ev();
extern void _ZN10S1503C4_nt3v11Ev();
extern void _ZN10S1503C4_nt3v12Ev();
extern void _ZN10S1503C4_nt3v13Ev();
extern void _ZN10S1503C4_nt3v14Ev();
extern void _ZN10S1503C4_nt3v15Ev();
extern void _ZN10S1503C4_nt3v16Ev();
extern void _ZN10S1503C4_nt3v17Ev();
extern void _ZN10S1503C4_nt3v18Ev();
extern void _ZN10S1503C4_nt3v19Ev();
extern void _ZN10S1503C4_nt3v20Ev();
extern void _ZN10S1503C4_nt3v21Ev();
extern void _ZN10S1503C4_nt3v22Ev();
extern void _ZN10S1503C4_nt3v23Ev();
extern void _ZN10S1503C4_nt3v24Ev();
extern void _ZN10S1503C4_nt3v25Ev();
extern void _ZN10S1503C4_nt3v26Ev();
extern void _ZN10S1503C4_nt3v27Ev();
extern void _ZN10S1503C4_nt3v28Ev();
extern void _ZN10S1503C4_nt3v29Ev();
extern void _ZN10S1503C4_nt3v30Ev();
extern void _ZN10S1503C4_nt3v31Ev();
extern void _ZN10S1503C4_nt3v32Ev();
extern void _ZN10S1503C4_nt3v33Ev();
extern void _ZN10S1503C4_nt3v34Ev();
extern void _ZN10S1503C4_nt3v35Ev();
extern void _ZN10S1503C4_nt3v36Ev();
extern void _ZN10S1503C4_nt3v37Ev();
extern void _ZN10S1503C4_nt3v38Ev();
extern void _ZN10S1503C4_nt3v39Ev();
extern void _ZN10S1503C4_nt3v40Ev();
extern void _ZN10S1503C4_nt3v41Ev();
extern void _ZN10S1503C4_nt3v42Ev();
extern void _ZN10S1503C4_nt3v43Ev();
extern void _ZN10S1503C4_nt3v44Ev();
extern void _ZN10S1503C4_nt3v45Ev();
extern void _ZN10S1503C4_nt3v46Ev();
extern void _ZN10S1503C4_nt3v47Ev();
extern void _ZN10S1503C4_nt3v48Ev();
extern void _ZN10S1503C4_nt3v49Ev();
extern void _ZN10S1503C4_nt3v50Ev();
extern void _ZN10S1503C4_nt3v51Ev();
extern void _ZN10S1503C4_nt3v52Ev();
extern void _ZN10S1503C4_nt3v53Ev();
extern void _ZN10S1503C4_nt3v54Ev();
extern void _ZN10S1503C4_nt3v55Ev();
extern void _ZN10S1503C4_nt3v56Ev();
extern void _ZN10S1503C4_nt3v57Ev();
extern void _ZN10S1503C4_nt3v58Ev();
extern void _ZN10S1503C4_nt3v59Ev();
extern void _ZN10S1503C4_nt3v60Ev();
extern void _ZN10S1503C4_nt3v61Ev();
extern void _ZN10S1503C4_nt3v62Ev();
extern void _ZN10S1503C4_nt3v63Ev();
extern void _ZN10S1503C4_nt3v64Ev();
extern void _ZN10S1503C4_nt3v65Ev();
extern void _ZN10S1503C4_nt3v66Ev();
extern void _ZN10S1503C4_nt3v67Ev();
extern void _ZN10S1503C4_nt3v68Ev();
extern void _ZN10S1503C4_nt3v69Ev();
extern void _ZN10S1503C3_nt3v70Ev();
extern void _ZN10S1503C3_nt3v71Ev();
extern void _ZN10S1503C3_nt3v72Ev();
extern void _ZN10S1503C3_nt3v73Ev();
extern void _ZN10S1503C3_nt3v74Ev();
extern void _ZN10S1503C3_nt3v75Ev();
extern void _ZN10S1503C3_nt3v76Ev();
extern void _ZN10S1503C3_nt3v77Ev();
extern void _ZN10S1503C3_nt3v78Ev();
extern void _ZN10S1503C3_nt3v79Ev();
extern void _ZN10S1503C3_nt3v80Ev();
extern void _ZN10S1503C3_nt3v81Ev();
extern void _ZN10S1503C3_nt3v82Ev();
extern void _ZN10S1503C3_nt3v83Ev();
extern void _ZN10S1503C3_nt3v84Ev();
extern void _ZN10S1503C3_nt3v85Ev();
extern void _ZN10S1503C3_nt3v86Ev();
extern void _ZN10S1503C3_nt3v87Ev();
extern void _ZN10S1503C3_nt3v88Ev();
extern void _ZN10S1503C3_nt3v89Ev();
extern void _ZN10S1503C3_nt3v90Ev();
extern void _ZN10S1503C3_nt3v91Ev();
extern void _ZN10S1503C3_nt3v92Ev();
extern void _ZN10S1503C3_nt3v93Ev();
extern void _ZN10S1503C3_nt3v94Ev();
extern void _ZN10S1503C3_nt3v95Ev();
extern void _ZN10S1503C3_nt3v96Ev();
extern void _ZN10S1503C3_nt3v97Ev();
extern void _ZN10S1503C3_nt3v98Ev();
extern void _ZN10S1503C3_nt3v99Ev();
extern void _ZN10S1503C3_nt4v100Ev();
extern void _ZN10S1503C3_nt4v101Ev();
extern void _ZN10S1503C3_nt4v102Ev();
extern void _ZN10S1503C3_nt4v103Ev();
extern void _ZN10S1503C3_nt4v104Ev();
extern void _ZN10S1503C3_nt4v105Ev();
extern void _ZN10S1503C3_nt4v106Ev();
extern void _ZN10S1503C3_nt4v107Ev();
extern void _ZN10S1503C3_nt4v108Ev();
extern void _ZN10S1503C3_nt4v109Ev();
extern void _ZN10S1503C3_nt4v110Ev();
extern void _ZN10S1503C3_nt4v111Ev();
extern void _ZN10S1503C3_nt4v112Ev();
extern void _ZN10S1503C3_nt4v113Ev();
extern void _ZN10S1503C3_nt4v114Ev();
extern void _ZN10S1503C3_nt4v115Ev();
extern void _ZN10S1503C3_nt4v116Ev();
extern void _ZN10S1503C3_nt4v117Ev();
extern void _ZN10S1503C3_nt4v118Ev();
extern void _ZN10S1503C3_nt4v119Ev();
extern void _ZN10S1503C3_nt4v120Ev();
extern void _ZN10S1503C3_nt4v121Ev();
extern void _ZN10S1503C3_nt4v122Ev();
extern void _ZN10S1503C3_nt4v123Ev();
extern void _ZN10S1503C3_nt4v124Ev();
extern void _ZN10S1503C3_nt4v125Ev();
extern void _ZN10S1503C3_nt4v126Ev();
extern void _ZN10S1503C3_nt4v127Ev();
extern void _ZN10S1503C3_nt4v128Ev();
extern void _ZN10S1503C3_nt4v129Ev();
extern void _ZN10S1503C3_nt4v130Ev();
extern void _ZN10S1503C3_nt4v131Ev();
extern void _ZN10S1503C3_nt4v132Ev();
extern void _ZN10S1503C3_nt4v133Ev();
extern void _ZN10S1503C3_nt4v134Ev();
extern void _ZN10S1503C3_nt4v135Ev();
extern void _ZN10S1503C3_nt4v136Ev();
extern void _ZN10S1503C3_nt4v137Ev();
extern void _ZN10S1503C3_nt4v138Ev();
extern void _ZN10S1503C3_nt4v139Ev();
extern void _ZN10S1503C3_nt4v140Ev();
extern void _ZN10S1503C3_nt4v141Ev();
extern void _ZN10S1503C3_nt4v142Ev();
extern void _ZN10S1503C3_nt4v143Ev();
extern void _ZN10S1503C3_nt4v144Ev();
extern void _ZN10S1503C3_nt4v145Ev();
extern void _ZN10S1503C3_nt4v146Ev();
extern void _ZN10S1503C3_nt4v147Ev();
extern void _ZN10S1503C3_nt4v148Ev();
extern void _ZN10S1503C3_nt4v149Ev();
extern void _ZN10S1503C3_nt4v150Ev();
extern void _ZN10S1503C3_nt4v151Ev();
extern void _ZN10S1503C3_nt4v152Ev();
extern void _ZN10S1503C3_nt4v153Ev();
extern void _ZN10S1503C3_nt4v154Ev();
extern void _ZN10S1503C3_nt4v155Ev();
extern void _ZN10S1503C3_nt4v156Ev();
extern void _ZN10S1503C3_nt4v157Ev();
extern void _ZN10S1503C3_nt4v158Ev();
extern void _ZN10S1503C3_nt4v159Ev();
extern void _ZN10S1503C3_nt4v160Ev();
extern void _ZN10S1503C3_nt4v161Ev();
extern void _ZN10S1503C3_nt4v162Ev();
extern void _ZN10S1503C3_nt4v163Ev();
extern void _ZN10S1503C3_nt4v164Ev();
extern void _ZN10S1503C3_nt4v165Ev();
extern void _ZN10S1503C3_nt4v166Ev();
extern void _ZN10S1503C3_nt4v167Ev();
extern void _ZN10S1503C3_nt4v168Ev();
extern void _ZN10S1503C3_nt4v169Ev();
extern void _ZN10S1503C3_nt4v170Ev();
extern void _ZN10S1503C3_nt4v171Ev();
extern void _ZN10S1503C3_nt4v172Ev();
extern void _ZN10S1503C3_nt4v173Ev();
extern void _ZN10S1503C3_nt4v174Ev();
extern void _ZN10S1503C3_nt4v175Ev();
extern void _ZN10S1503C3_nt4v176Ev();
extern void _ZN10S1503C3_nt4v177Ev();
extern void _ZN10S1503C3_nt4v178Ev();
extern void _ZN10S1503C3_nt4v179Ev();
extern void _ZN10S1503C3_nt4v180Ev();
extern void _ZN10S1503C3_nt4v181Ev();
extern void _ZN10S1503C3_nt4v182Ev();
extern void _ZN10S1503C3_nt4v183Ev();
extern void _ZN10S1503C3_nt4v184Ev();
extern void _ZN10S1503C3_nt4v185Ev();
extern void _ZN10S1503C3_nt4v186Ev();
extern void _ZN10S1503C3_nt4v187Ev();
extern void _ZN10S1503C3_nt4v188Ev();
extern void _ZN10S1503C3_nt4v189Ev();
extern void _ZN10S1503C3_nt4v190Ev();
extern void _ZN10S1503C3_nt4v191Ev();
extern void _ZN10S1503C3_nt4v192Ev();
extern void _ZN10S1503C3_nt4v193Ev();
extern void _ZN10S1503C3_nt4v194Ev();
extern void _ZN10S1503C3_nt4v195Ev();
extern void _ZN10S1503C3_nt4v196Ev();
extern void _ZN10S1503C3_nt4v197Ev();
extern void _ZN10S1503C3_nt4v198Ev();
extern void _ZN10S1503C3_nt4v199Ev();
extern void _ZN10S1503C3_nt4v200Ev();
extern void _ZN10S1503C3_nt4v201Ev();
extern void _ZN10S1503C3_nt4v202Ev();
extern void _ZN10S1503C3_nt4v203Ev();
extern void _ZN10S1503C3_nt4v204Ev();
extern void _ZN10S1503C3_nt4v205Ev();
extern void _ZN10S1503C3_nt4v206Ev();
extern void _ZN10S1503C3_nt4v207Ev();
extern void _ZN10S1503C3_nt4v208Ev();
extern void _ZN10S1503C3_nt4v209Ev();
extern void _ZN10S1503C3_nt4v210Ev();
extern void _ZN10S1503C3_nt4v211Ev();
extern void _ZN10S1503C3_nt4v212Ev();
static  VTBL_ENTRY vtc_S1503C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1503C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1503C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v212Ev,
};
extern VTBL_ENTRY _ZTI10S1503C3_nt[];
VTBL_ENTRY *P__ZTI10S1503C3_nt = _ZTI10S1503C3_nt; 
extern  VTBL_ENTRY _ZTV10S1503C3_nt[];
Class_Descriptor cd_S1503C3_nt = {  "S1503C3_nt", // class name
  bases_S1503C3_nt, 1,
  &(vtc_S1503C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI10S1503C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1503C3_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  S1503C23_nt  {
  ::S1503C14_nt s1503c23f0;
  ::S1503C14_nt s1503c23f1;
  char s1503c23f2;
  void  mf1503c23(); // _ZN11S1503C23_nt9mf1503c23Ev
};
//SIG(-1 S1503C23_nt) C1{ m FC2{ m Fi[3]} FC2 Fc}


void  S1503C23_nt ::mf1503c23(){}

//skip512 S1503C23_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1503C22_nt  {
  ::S1503C23_nt s1503c22f0;
  ::S1503C14_nt s1503c22f1;
  void *s1503c22f2[2];
  char s1503c22f3;
  void  mf1503c22(); // _ZN11S1503C22_nt9mf1503c22Ev
};
//SIG(-1 S1503C22_nt) C1{ m FC2{ m FC3{ m Fi[3]} FC3 Fc} FC3 Fp[2] Fc}


void  S1503C22_nt ::mf1503c22(){}

//skip512 S1503C22_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1503C25  : S1503C8_nt {
};
//SIG(-1 S1503C25) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1503C25()
{
  extern Class_Descriptor cd_S1503C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1503C25, buf);
    S1503C25 &lv = *(new (buf) S1503C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1503C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C25)");
    check_base_class_offset(lv, (S1503C8_nt*), 0, "S1503C25");
    test_class_info(&lv, &cd_S1503C25);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C25(Test_S1503C25, "S1503C25", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
static Base_Class bases_S1503C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_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_S1503C25 = {  "S1503C25", // class name
  bases_S1503C25, 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  S1503C24  : S1503C25 {
};
//SIG(-1 S1503C24) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1503C24()
{
  extern Class_Descriptor cd_S1503C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1503C24, buf);
    S1503C24 &lv = *(new (buf) S1503C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1503C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C24)");
    check_base_class_offset(lv, (S1503C8_nt*)(S1503C25*), 0, "S1503C24");
    check_base_class_offset(lv, (S1503C25*), 0, "S1503C24");
    test_class_info(&lv, &cd_S1503C24);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C24(Test_S1503C24, "S1503C24", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
extern Class_Descriptor cd_S1503C25;
static Base_Class bases_S1503C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_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_S1503C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S1503C24 = {  "S1503C24", // class name
  bases_S1503C24, 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  S1503C29  : S1503C8_nt {
};
//SIG(-1 S1503C29) C1{ BC2{ m Fp Fi[2]}}



static void Test_S1503C29()
{
  extern Class_Descriptor cd_S1503C29;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1503C29, buf);
    S1503C29 &lv = *(new (buf) S1503C29());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1503C29)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C29)");
    check_base_class_offset(lv, (S1503C8_nt*), 0, "S1503C29");
    test_class_info(&lv, &cd_S1503C29);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C29(Test_S1503C29, "S1503C29", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
static Base_Class bases_S1503C29[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_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_S1503C29 = {  "S1503C29", // class name
  bases_S1503C29, 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  S1503C28  : S1503C29 {
};
//SIG(-1 S1503C28) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S1503C28()
{
  extern Class_Descriptor cd_S1503C28;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S1503C28, buf);
    S1503C28 &lv = *(new (buf) S1503C28());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S1503C28)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C28)");
    check_base_class_offset(lv, (S1503C8_nt*)(S1503C29*), 0, "S1503C28");
    check_base_class_offset(lv, (S1503C29*), 0, "S1503C28");
    test_class_info(&lv, &cd_S1503C28);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C28(Test_S1503C28, "S1503C28", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
extern Class_Descriptor cd_S1503C29;
static Base_Class bases_S1503C28[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_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_S1503C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S1503C28 = {  "S1503C28", // class name
  bases_S1503C28, 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  S1503C31_nt  {
  int s1503c31f0[4];
  void  mf1503c31(); // _ZN11S1503C31_nt9mf1503c31Ev
};
//SIG(-1 S1503C31_nt) C1{ m Fi[4]}


void  S1503C31_nt ::mf1503c31(){}

//skip512 S1503C31_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1503C2_nt  : S1503C3_nt {
  unsigned int s1503c2f0:1;
  unsigned int s1503c2f1:1;
  unsigned int s1503c2f2:1;
  unsigned int s1503c2f3:1;
  unsigned int s1503c2f4:1;
  ::S1503C22_nt s1503c2f5;
  unsigned int s1503c2f6:1;
  unsigned int s1503c2f7:1;
  unsigned int s1503c2f8:1;
  unsigned int s1503c2f9:1;
  unsigned int s1503c2f10:1;
  unsigned int s1503c2f11:1;
  unsigned int s1503c2f12:1;
  unsigned int s1503c2f13:1;
  unsigned int s1503c2f14:1;
  unsigned int s1503c2f15:1;
  unsigned int s1503c2f16:1;
  unsigned int s1503c2f17:1;
  unsigned int s1503c2f18:1;
  unsigned int s1503c2f19:1;
  unsigned int s1503c2f20:1;
  unsigned int s1503c2f21:1;
  unsigned int s1503c2f22:1;
  unsigned int s1503c2f23:1;
  unsigned int s1503c2f24:1;
  unsigned int s1503c2f25:1;
  unsigned int s1503c2f26:1;
  unsigned int s1503c2f27:1;
  unsigned int s1503c2f28:1;
  unsigned int s1503c2f29:1;
  unsigned int s1503c2f30:1;
  ::S1503C24 s1503c2f31;
  ::S1503C24 s1503c2f32;
  ::S1503C24 s1503c2f33;
  ::S1503C28 s1503c2f34;
  int s1503c2f35[2];
  void *s1503c2f36[4];
  int s1503c2f37[5];
  void *s1503c2f38;
  int s1503c2f39[2];
  void *s1503c2f40[2];
  int s1503c2f41;
  ::S1503C5_nt s1503c2f42;
  ::S1503C31_nt s1503c2f43;
  void *s1503c2f44[2];
  int s1503c2f45;
  void *s1503c2f46;
  int s1503c2f47;
  virtual  ~S1503C2_nt(); // _ZN10S1503C2_ntD1Ev
  virtual void  v213(); // _ZN10S1503C2_nt4v213Ev
  virtual void  v214(); // _ZN10S1503C2_nt4v214Ev
  virtual void  v215(); // _ZN10S1503C2_nt4v215Ev
  virtual void  v216(); // _ZN10S1503C2_nt4v216Ev
  virtual void  v217(); // _ZN10S1503C2_nt4v217Ev
  virtual void  v218(); // _ZN10S1503C2_nt4v218Ev
  virtual void  v219(); // _ZN10S1503C2_nt4v219Ev
  virtual void  v220(); // _ZN10S1503C2_nt4v220Ev
  virtual void  v221(); // _ZN10S1503C2_nt4v221Ev
  virtual void  v222(); // _ZN10S1503C2_nt4v222Ev
  virtual void  v223(); // _ZN10S1503C2_nt4v223Ev
  virtual void  v224(); // _ZN10S1503C2_nt4v224Ev
  virtual void  v225(); // _ZN10S1503C2_nt4v225Ev
  virtual void  v226(); // _ZN10S1503C2_nt4v226Ev
  virtual void  v227(); // _ZN10S1503C2_nt4v227Ev
  virtual void  v228(); // _ZN10S1503C2_nt4v228Ev
  virtual void  v229(); // _ZN10S1503C2_nt4v229Ev
  virtual void  v230(); // _ZN10S1503C2_nt4v230Ev
  virtual void  v231(); // _ZN10S1503C2_nt4v231Ev
  virtual void  v232(); // _ZN10S1503C2_nt4v232Ev
  virtual void  v233(); // _ZN10S1503C2_nt4v233Ev
  virtual void  v234(); // _ZN10S1503C2_nt4v234Ev
  virtual void  v235(); // _ZN10S1503C2_nt4v235Ev
  virtual void  v236(); // _ZN10S1503C2_nt4v236Ev
  virtual void  v237(); // _ZN10S1503C2_nt4v237Ev
  virtual void  v238(); // _ZN10S1503C2_nt4v238Ev
  virtual void  v239(); // _ZN10S1503C2_nt4v239Ev
  virtual void  v240(); // _ZN10S1503C2_nt4v240Ev
  virtual void  v241(); // _ZN10S1503C2_nt4v241Ev
  virtual void  v242(); // _ZN10S1503C2_nt4v242Ev
  virtual void  v243(); // _ZN10S1503C2_nt4v243Ev
  virtual void  v244(); // _ZN10S1503C2_nt4v244Ev
  virtual void  v245(); // _ZN10S1503C2_nt4v245Ev
  virtual void  v246(); // _ZN10S1503C2_nt4v246Ev
  virtual void  v247(); // _ZN10S1503C2_nt4v247Ev
  virtual void  v248(); // _ZN10S1503C2_nt4v248Ev
  virtual void  v249(); // _ZN10S1503C2_nt4v249Ev
  S1503C2_nt(); // tgen
};
//SIG(-1 S1503C2_nt) C1{ BC2{ BC3{ vd 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 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd 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 v213 v214 v215 v216 v217 v218 v219 v220 v221 v222 v223 v224 v225 v226 v227 v228 v229 v230 v231 v232 v233 v234 v235 v236 v237 v238 v239 v240 v241 v242 v243 v244 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 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 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC14{ m FC15{ m FC11 FC11 Fc} FC11 Fp[2] Fc} 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 FC16{ BC17{ BC7}} FC16 FC16 FC18{ BC19{ BC7}} Fi[2] Fp[4] Fi[5] Fp Fi[2] Fp[2] Fi FC4 FC20{ m Fi[4]} Fp[2] Fi Fp Fi}


 S1503C2_nt ::~S1503C2_nt(){ note_dtor("S1503C2_nt", this);}
void  S1503C2_nt ::v213(){vfunc_called(this, "_ZN10S1503C2_nt4v213Ev");}
void  S1503C2_nt ::v214(){vfunc_called(this, "_ZN10S1503C2_nt4v214Ev");}
void  S1503C2_nt ::v215(){vfunc_called(this, "_ZN10S1503C2_nt4v215Ev");}
void  S1503C2_nt ::v216(){vfunc_called(this, "_ZN10S1503C2_nt4v216Ev");}
void  S1503C2_nt ::v217(){vfunc_called(this, "_ZN10S1503C2_nt4v217Ev");}
void  S1503C2_nt ::v218(){vfunc_called(this, "_ZN10S1503C2_nt4v218Ev");}
void  S1503C2_nt ::v219(){vfunc_called(this, "_ZN10S1503C2_nt4v219Ev");}
void  S1503C2_nt ::v220(){vfunc_called(this, "_ZN10S1503C2_nt4v220Ev");}
void  S1503C2_nt ::v221(){vfunc_called(this, "_ZN10S1503C2_nt4v221Ev");}
void  S1503C2_nt ::v222(){vfunc_called(this, "_ZN10S1503C2_nt4v222Ev");}
void  S1503C2_nt ::v223(){vfunc_called(this, "_ZN10S1503C2_nt4v223Ev");}
void  S1503C2_nt ::v224(){vfunc_called(this, "_ZN10S1503C2_nt4v224Ev");}
void  S1503C2_nt ::v225(){vfunc_called(this, "_ZN10S1503C2_nt4v225Ev");}
void  S1503C2_nt ::v226(){vfunc_called(this, "_ZN10S1503C2_nt4v226Ev");}
void  S1503C2_nt ::v227(){vfunc_called(this, "_ZN10S1503C2_nt4v227Ev");}
void  S1503C2_nt ::v228(){vfunc_called(this, "_ZN10S1503C2_nt4v228Ev");}
void  S1503C2_nt ::v229(){vfunc_called(this, "_ZN10S1503C2_nt4v229Ev");}
void  S1503C2_nt ::v230(){vfunc_called(this, "_ZN10S1503C2_nt4v230Ev");}
void  S1503C2_nt ::v231(){vfunc_called(this, "_ZN10S1503C2_nt4v231Ev");}
void  S1503C2_nt ::v232(){vfunc_called(this, "_ZN10S1503C2_nt4v232Ev");}
void  S1503C2_nt ::v233(){vfunc_called(this, "_ZN10S1503C2_nt4v233Ev");}
void  S1503C2_nt ::v234(){vfunc_called(this, "_ZN10S1503C2_nt4v234Ev");}
void  S1503C2_nt ::v235(){vfunc_called(this, "_ZN10S1503C2_nt4v235Ev");}
void  S1503C2_nt ::v236(){vfunc_called(this, "_ZN10S1503C2_nt4v236Ev");}
void  S1503C2_nt ::v237(){vfunc_called(this, "_ZN10S1503C2_nt4v237Ev");}
void  S1503C2_nt ::v238(){vfunc_called(this, "_ZN10S1503C2_nt4v238Ev");}
void  S1503C2_nt ::v239(){vfunc_called(this, "_ZN10S1503C2_nt4v239Ev");}
void  S1503C2_nt ::v240(){vfunc_called(this, "_ZN10S1503C2_nt4v240Ev");}
void  S1503C2_nt ::v241(){vfunc_called(this, "_ZN10S1503C2_nt4v241Ev");}
void  S1503C2_nt ::v242(){vfunc_called(this, "_ZN10S1503C2_nt4v242Ev");}
void  S1503C2_nt ::v243(){vfunc_called(this, "_ZN10S1503C2_nt4v243Ev");}
void  S1503C2_nt ::v244(){vfunc_called(this, "_ZN10S1503C2_nt4v244Ev");}
void  S1503C2_nt ::v245(){vfunc_called(this, "_ZN10S1503C2_nt4v245Ev");}
void  S1503C2_nt ::v246(){vfunc_called(this, "_ZN10S1503C2_nt4v246Ev");}
void  S1503C2_nt ::v247(){vfunc_called(this, "_ZN10S1503C2_nt4v247Ev");}
void  S1503C2_nt ::v248(){vfunc_called(this, "_ZN10S1503C2_nt4v248Ev");}
void  S1503C2_nt ::v249(){vfunc_called(this, "_ZN10S1503C2_nt4v249Ev");}
S1503C2_nt ::S1503C2_nt(){ note_ctor("S1503C2_nt", this);} // tgen

//skip512 S1503C2_nt

#else // __cplusplus

extern void _ZN10S1503C2_ntC1Ev();
extern void _ZN10S1503C2_ntD1Ev();
Name_Map name_map_S1503C2_nt[] = {
  NSPAIR(_ZN10S1503C2_ntC1Ev),
  NSPAIR(_ZN10S1503C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1503C4_nt;
extern VTBL_ENTRY _ZTI10S1503C4_nt[];
extern  VTBL_ENTRY _ZTV10S1503C4_nt[];
extern Class_Descriptor cd_S1503C3_nt;
extern VTBL_ENTRY _ZTI10S1503C3_nt[];
extern  VTBL_ENTRY _ZTV10S1503C3_nt[];
static Base_Class bases_S1503C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C4_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_S1503C3_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 _ZTI10S1503C2_nt[];
extern void _ZN10S1503C2_ntD1Ev();
extern void _ZN10S1503C2_ntD0Ev();
extern void _ZN10S1503C4_nt2v6Ev();
extern void _ZN10S1503C4_nt2v7Ev();
extern void _ZN10S1503C4_nt2v8Ev();
extern void _ZN10S1503C4_nt2v9Ev();
extern void _ZN10S1503C4_nt3v10Ev();
extern void _ZN10S1503C4_nt3v11Ev();
extern void _ZN10S1503C4_nt3v12Ev();
extern void _ZN10S1503C4_nt3v13Ev();
extern void _ZN10S1503C4_nt3v14Ev();
extern void _ZN10S1503C4_nt3v15Ev();
extern void _ZN10S1503C4_nt3v16Ev();
extern void _ZN10S1503C4_nt3v17Ev();
extern void _ZN10S1503C4_nt3v18Ev();
extern void _ZN10S1503C4_nt3v19Ev();
extern void _ZN10S1503C4_nt3v20Ev();
extern void _ZN10S1503C4_nt3v21Ev();
extern void _ZN10S1503C4_nt3v22Ev();
extern void _ZN10S1503C4_nt3v23Ev();
extern void _ZN10S1503C4_nt3v24Ev();
extern void _ZN10S1503C4_nt3v25Ev();
extern void _ZN10S1503C4_nt3v26Ev();
extern void _ZN10S1503C4_nt3v27Ev();
extern void _ZN10S1503C4_nt3v28Ev();
extern void _ZN10S1503C4_nt3v29Ev();
extern void _ZN10S1503C4_nt3v30Ev();
extern void _ZN10S1503C4_nt3v31Ev();
extern void _ZN10S1503C4_nt3v32Ev();
extern void _ZN10S1503C4_nt3v33Ev();
extern void _ZN10S1503C4_nt3v34Ev();
extern void _ZN10S1503C4_nt3v35Ev();
extern void _ZN10S1503C4_nt3v36Ev();
extern void _ZN10S1503C4_nt3v37Ev();
extern void _ZN10S1503C4_nt3v38Ev();
extern void _ZN10S1503C4_nt3v39Ev();
extern void _ZN10S1503C4_nt3v40Ev();
extern void _ZN10S1503C4_nt3v41Ev();
extern void _ZN10S1503C4_nt3v42Ev();
extern void _ZN10S1503C4_nt3v43Ev();
extern void _ZN10S1503C4_nt3v44Ev();
extern void _ZN10S1503C4_nt3v45Ev();
extern void _ZN10S1503C4_nt3v46Ev();
extern void _ZN10S1503C4_nt3v47Ev();
extern void _ZN10S1503C4_nt3v48Ev();
extern void _ZN10S1503C4_nt3v49Ev();
extern void _ZN10S1503C4_nt3v50Ev();
extern void _ZN10S1503C4_nt3v51Ev();
extern void _ZN10S1503C4_nt3v52Ev();
extern void _ZN10S1503C4_nt3v53Ev();
extern void _ZN10S1503C4_nt3v54Ev();
extern void _ZN10S1503C4_nt3v55Ev();
extern void _ZN10S1503C4_nt3v56Ev();
extern void _ZN10S1503C4_nt3v57Ev();
extern void _ZN10S1503C4_nt3v58Ev();
extern void _ZN10S1503C4_nt3v59Ev();
extern void _ZN10S1503C4_nt3v60Ev();
extern void _ZN10S1503C4_nt3v61Ev();
extern void _ZN10S1503C4_nt3v62Ev();
extern void _ZN10S1503C4_nt3v63Ev();
extern void _ZN10S1503C4_nt3v64Ev();
extern void _ZN10S1503C4_nt3v65Ev();
extern void _ZN10S1503C4_nt3v66Ev();
extern void _ZN10S1503C4_nt3v67Ev();
extern void _ZN10S1503C4_nt3v68Ev();
extern void _ZN10S1503C4_nt3v69Ev();
extern void _ZN10S1503C3_nt3v70Ev();
extern void _ZN10S1503C3_nt3v71Ev();
extern void _ZN10S1503C3_nt3v72Ev();
extern void _ZN10S1503C3_nt3v73Ev();
extern void _ZN10S1503C3_nt3v74Ev();
extern void _ZN10S1503C3_nt3v75Ev();
extern void _ZN10S1503C3_nt3v76Ev();
extern void _ZN10S1503C3_nt3v77Ev();
extern void _ZN10S1503C3_nt3v78Ev();
extern void _ZN10S1503C3_nt3v79Ev();
extern void _ZN10S1503C3_nt3v80Ev();
extern void _ZN10S1503C3_nt3v81Ev();
extern void _ZN10S1503C3_nt3v82Ev();
extern void _ZN10S1503C3_nt3v83Ev();
extern void _ZN10S1503C3_nt3v84Ev();
extern void _ZN10S1503C3_nt3v85Ev();
extern void _ZN10S1503C3_nt3v86Ev();
extern void _ZN10S1503C3_nt3v87Ev();
extern void _ZN10S1503C3_nt3v88Ev();
extern void _ZN10S1503C3_nt3v89Ev();
extern void _ZN10S1503C3_nt3v90Ev();
extern void _ZN10S1503C3_nt3v91Ev();
extern void _ZN10S1503C3_nt3v92Ev();
extern void _ZN10S1503C3_nt3v93Ev();
extern void _ZN10S1503C3_nt3v94Ev();
extern void _ZN10S1503C3_nt3v95Ev();
extern void _ZN10S1503C3_nt3v96Ev();
extern void _ZN10S1503C3_nt3v97Ev();
extern void _ZN10S1503C3_nt3v98Ev();
extern void _ZN10S1503C3_nt3v99Ev();
extern void _ZN10S1503C3_nt4v100Ev();
extern void _ZN10S1503C3_nt4v101Ev();
extern void _ZN10S1503C3_nt4v102Ev();
extern void _ZN10S1503C3_nt4v103Ev();
extern void _ZN10S1503C3_nt4v104Ev();
extern void _ZN10S1503C3_nt4v105Ev();
extern void _ZN10S1503C3_nt4v106Ev();
extern void _ZN10S1503C3_nt4v107Ev();
extern void _ZN10S1503C3_nt4v108Ev();
extern void _ZN10S1503C3_nt4v109Ev();
extern void _ZN10S1503C3_nt4v110Ev();
extern void _ZN10S1503C3_nt4v111Ev();
extern void _ZN10S1503C3_nt4v112Ev();
extern void _ZN10S1503C3_nt4v113Ev();
extern void _ZN10S1503C3_nt4v114Ev();
extern void _ZN10S1503C3_nt4v115Ev();
extern void _ZN10S1503C3_nt4v116Ev();
extern void _ZN10S1503C3_nt4v117Ev();
extern void _ZN10S1503C3_nt4v118Ev();
extern void _ZN10S1503C3_nt4v119Ev();
extern void _ZN10S1503C3_nt4v120Ev();
extern void _ZN10S1503C3_nt4v121Ev();
extern void _ZN10S1503C3_nt4v122Ev();
extern void _ZN10S1503C3_nt4v123Ev();
extern void _ZN10S1503C3_nt4v124Ev();
extern void _ZN10S1503C3_nt4v125Ev();
extern void _ZN10S1503C3_nt4v126Ev();
extern void _ZN10S1503C3_nt4v127Ev();
extern void _ZN10S1503C3_nt4v128Ev();
extern void _ZN10S1503C3_nt4v129Ev();
extern void _ZN10S1503C3_nt4v130Ev();
extern void _ZN10S1503C3_nt4v131Ev();
extern void _ZN10S1503C3_nt4v132Ev();
extern void _ZN10S1503C3_nt4v133Ev();
extern void _ZN10S1503C3_nt4v134Ev();
extern void _ZN10S1503C3_nt4v135Ev();
extern void _ZN10S1503C3_nt4v136Ev();
extern void _ZN10S1503C3_nt4v137Ev();
extern void _ZN10S1503C3_nt4v138Ev();
extern void _ZN10S1503C3_nt4v139Ev();
extern void _ZN10S1503C3_nt4v140Ev();
extern void _ZN10S1503C3_nt4v141Ev();
extern void _ZN10S1503C3_nt4v142Ev();
extern void _ZN10S1503C3_nt4v143Ev();
extern void _ZN10S1503C3_nt4v144Ev();
extern void _ZN10S1503C3_nt4v145Ev();
extern void _ZN10S1503C3_nt4v146Ev();
extern void _ZN10S1503C3_nt4v147Ev();
extern void _ZN10S1503C3_nt4v148Ev();
extern void _ZN10S1503C3_nt4v149Ev();
extern void _ZN10S1503C3_nt4v150Ev();
extern void _ZN10S1503C3_nt4v151Ev();
extern void _ZN10S1503C3_nt4v152Ev();
extern void _ZN10S1503C3_nt4v153Ev();
extern void _ZN10S1503C3_nt4v154Ev();
extern void _ZN10S1503C3_nt4v155Ev();
extern void _ZN10S1503C3_nt4v156Ev();
extern void _ZN10S1503C3_nt4v157Ev();
extern void _ZN10S1503C3_nt4v158Ev();
extern void _ZN10S1503C3_nt4v159Ev();
extern void _ZN10S1503C3_nt4v160Ev();
extern void _ZN10S1503C3_nt4v161Ev();
extern void _ZN10S1503C3_nt4v162Ev();
extern void _ZN10S1503C3_nt4v163Ev();
extern void _ZN10S1503C3_nt4v164Ev();
extern void _ZN10S1503C3_nt4v165Ev();
extern void _ZN10S1503C3_nt4v166Ev();
extern void _ZN10S1503C3_nt4v167Ev();
extern void _ZN10S1503C3_nt4v168Ev();
extern void _ZN10S1503C3_nt4v169Ev();
extern void _ZN10S1503C3_nt4v170Ev();
extern void _ZN10S1503C3_nt4v171Ev();
extern void _ZN10S1503C3_nt4v172Ev();
extern void _ZN10S1503C3_nt4v173Ev();
extern void _ZN10S1503C3_nt4v174Ev();
extern void _ZN10S1503C3_nt4v175Ev();
extern void _ZN10S1503C3_nt4v176Ev();
extern void _ZN10S1503C3_nt4v177Ev();
extern void _ZN10S1503C3_nt4v178Ev();
extern void _ZN10S1503C3_nt4v179Ev();
extern void _ZN10S1503C3_nt4v180Ev();
extern void _ZN10S1503C3_nt4v181Ev();
extern void _ZN10S1503C3_nt4v182Ev();
extern void _ZN10S1503C3_nt4v183Ev();
extern void _ZN10S1503C3_nt4v184Ev();
extern void _ZN10S1503C3_nt4v185Ev();
extern void _ZN10S1503C3_nt4v186Ev();
extern void _ZN10S1503C3_nt4v187Ev();
extern void _ZN10S1503C3_nt4v188Ev();
extern void _ZN10S1503C3_nt4v189Ev();
extern void _ZN10S1503C3_nt4v190Ev();
extern void _ZN10S1503C3_nt4v191Ev();
extern void _ZN10S1503C3_nt4v192Ev();
extern void _ZN10S1503C3_nt4v193Ev();
extern void _ZN10S1503C3_nt4v194Ev();
extern void _ZN10S1503C3_nt4v195Ev();
extern void _ZN10S1503C3_nt4v196Ev();
extern void _ZN10S1503C3_nt4v197Ev();
extern void _ZN10S1503C3_nt4v198Ev();
extern void _ZN10S1503C3_nt4v199Ev();
extern void _ZN10S1503C3_nt4v200Ev();
extern void _ZN10S1503C3_nt4v201Ev();
extern void _ZN10S1503C3_nt4v202Ev();
extern void _ZN10S1503C3_nt4v203Ev();
extern void _ZN10S1503C3_nt4v204Ev();
extern void _ZN10S1503C3_nt4v205Ev();
extern void _ZN10S1503C3_nt4v206Ev();
extern void _ZN10S1503C3_nt4v207Ev();
extern void _ZN10S1503C3_nt4v208Ev();
extern void _ZN10S1503C3_nt4v209Ev();
extern void _ZN10S1503C3_nt4v210Ev();
extern void _ZN10S1503C3_nt4v211Ev();
extern void _ZN10S1503C3_nt4v212Ev();
extern void _ZN10S1503C2_nt4v213Ev();
extern void _ZN10S1503C2_nt4v214Ev();
extern void _ZN10S1503C2_nt4v215Ev();
extern void _ZN10S1503C2_nt4v216Ev();
extern void _ZN10S1503C2_nt4v217Ev();
extern void _ZN10S1503C2_nt4v218Ev();
extern void _ZN10S1503C2_nt4v219Ev();
extern void _ZN10S1503C2_nt4v220Ev();
extern void _ZN10S1503C2_nt4v221Ev();
extern void _ZN10S1503C2_nt4v222Ev();
extern void _ZN10S1503C2_nt4v223Ev();
extern void _ZN10S1503C2_nt4v224Ev();
extern void _ZN10S1503C2_nt4v225Ev();
extern void _ZN10S1503C2_nt4v226Ev();
extern void _ZN10S1503C2_nt4v227Ev();
extern void _ZN10S1503C2_nt4v228Ev();
extern void _ZN10S1503C2_nt4v229Ev();
extern void _ZN10S1503C2_nt4v230Ev();
extern void _ZN10S1503C2_nt4v231Ev();
extern void _ZN10S1503C2_nt4v232Ev();
extern void _ZN10S1503C2_nt4v233Ev();
extern void _ZN10S1503C2_nt4v234Ev();
extern void _ZN10S1503C2_nt4v235Ev();
extern void _ZN10S1503C2_nt4v236Ev();
extern void _ZN10S1503C2_nt4v237Ev();
extern void _ZN10S1503C2_nt4v238Ev();
extern void _ZN10S1503C2_nt4v239Ev();
extern void _ZN10S1503C2_nt4v240Ev();
extern void _ZN10S1503C2_nt4v241Ev();
extern void _ZN10S1503C2_nt4v242Ev();
extern void _ZN10S1503C2_nt4v243Ev();
extern void _ZN10S1503C2_nt4v244Ev();
extern void _ZN10S1503C2_nt4v245Ev();
extern void _ZN10S1503C2_nt4v246Ev();
extern void _ZN10S1503C2_nt4v247Ev();
extern void _ZN10S1503C2_nt4v248Ev();
extern void _ZN10S1503C2_nt4v249Ev();
static  VTBL_ENTRY vtc_S1503C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1503C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1503C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v212Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v213Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v214Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v215Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v216Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v217Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v218Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v219Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v220Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v221Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v222Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v223Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v224Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v225Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v226Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v227Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v228Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v229Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v230Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v231Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v232Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v233Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v234Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v235Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v236Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v237Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v238Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v239Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v240Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v241Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v242Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v243Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v244Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v245Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v246Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v247Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v248Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v249Ev,
};
extern VTBL_ENTRY _ZTI10S1503C2_nt[];
VTBL_ENTRY *P__ZTI10S1503C2_nt = _ZTI10S1503C2_nt; 
extern  VTBL_ENTRY _ZTV10S1503C2_nt[];
Class_Descriptor cd_S1503C2_nt = {  "S1503C2_nt", // class name
  bases_S1503C2_nt, 2,
  &(vtc_S1503C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(880,656), // object size
  NSPAIRA(_ZTI10S1503C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1503C2_nt),248, //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  S1503C1  : S1503C2_nt {
  ::S1503C14_nt s1503c1f0;
  void *s1503c1f1[2];
  int s1503c1f2[2];
  void *s1503c1f3;
  virtual  ~S1503C1(); // _ZN7S1503C1D1Ev
  virtual void  v1(); // _ZN7S1503C12v1Ev
  virtual void  v2(); // _ZN7S1503C12v2Ev
  virtual void  v3(); // _ZN7S1503C12v3Ev
  virtual void  v4(); // _ZN7S1503C12v4Ev
  virtual void  v5(); // _ZN7S1503C12v5Ev
  S1503C1(); // tgen
};
//SIG(1 S1503C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ 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 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC6 FC9{ m Fi} Fi Fc[4] Fp[2] FC6 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] FC5 FC5 FC5 FC10{ BC11{ BC8}} FC10 Fi Fp[2] FC12{ m Fi[3]} FC12 FC12 FC12 Fp FC5 FC10 FC12 FC12 Fi FC12 FC12 Fp Fi Fc FC12 FC12 Fp Fi Fp FC10 FC13{ BC14{ BC8}} FC13} vd v213 v214 v215 v216 v217 v218 v219 v220 v221 v222 v223 v224 v225 v226 v227 v228 v229 v230 v231 v232 v233 v234 v235 v236 v237 v238 v239 v240 v241 v242 v243 v244 v245 v246 v247 v248 v249 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC15{ m FC16{ m FC12 FC12 Fc} FC12 Fp[2] Fc} 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 FC17{ BC18{ BC8}} FC17 FC17 FC19{ BC20{ BC8}} Fi[2] Fp[4] Fi[5] Fp Fi[2] Fp[2] Fi FC5 FC21{ m Fi[4]} Fp[2] Fi Fp Fi} vd v1 v2 v3 v4 v5 FC12 Fp[2] Fi[2] Fp}


 S1503C1 ::~S1503C1(){ note_dtor("S1503C1", this);}
void  S1503C1 ::v1(){vfunc_called(this, "_ZN7S1503C12v1Ev");}
void  S1503C1 ::v2(){vfunc_called(this, "_ZN7S1503C12v2Ev");}
void  S1503C1 ::v3(){vfunc_called(this, "_ZN7S1503C12v3Ev");}
void  S1503C1 ::v4(){vfunc_called(this, "_ZN7S1503C12v4Ev");}
void  S1503C1 ::v5(){vfunc_called(this, "_ZN7S1503C12v5Ev");}
S1503C1 ::S1503C1(){ note_ctor("S1503C1", this);} // tgen

static void Test_S1503C1()
{
  extern Class_Descriptor cd_S1503C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(116,173)];
    init_test(&cd_S1503C1, buf);
    S1503C1 *dp, &lv = *(dp=new (buf) S1503C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(920,688), "sizeof(S1503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1503C1)");
    check_base_class_offset(lv, (S1503C4_nt*)(S1503C3_nt*)(S1503C2_nt*), 0, "S1503C1");
    check_base_class_offset(lv, (S1503C3_nt*)(S1503C2_nt*), 0, "S1503C1");
    check_base_class_offset(lv, (S1503C2_nt*), 0, "S1503C1");
    check_field_offset(lv, s1503c1f0, ABISELECT(876,656), "S1503C1.s1503c1f0");
    check_field_offset(lv, s1503c1f1, ABISELECT(888,668), "S1503C1.s1503c1f1");
    check_field_offset(lv, s1503c1f2, ABISELECT(904,676), "S1503C1.s1503c1f2");
    check_field_offset(lv, s1503c1f3, ABISELECT(912,684), "S1503C1.s1503c1f3");
    test_class_info(&lv, &cd_S1503C1);
    dp->~S1503C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1503C1(Test_S1503C1, "S1503C1", ABISELECT(920,688));

#else // __cplusplus

extern void _ZN7S1503C1C1Ev();
extern void _ZN7S1503C1D1Ev();
Name_Map name_map_S1503C1[] = {
  NSPAIR(_ZN7S1503C1C1Ev),
  NSPAIR(_ZN7S1503C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1503C4_nt;
extern VTBL_ENTRY _ZTI10S1503C4_nt[];
extern  VTBL_ENTRY _ZTV10S1503C4_nt[];
extern Class_Descriptor cd_S1503C3_nt;
extern VTBL_ENTRY _ZTI10S1503C3_nt[];
extern  VTBL_ENTRY _ZTV10S1503C3_nt[];
extern Class_Descriptor cd_S1503C2_nt;
extern VTBL_ENTRY _ZTI10S1503C2_nt[];
extern  VTBL_ENTRY _ZTV10S1503C2_nt[];
static Base_Class bases_S1503C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C4_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_S1503C3_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_S1503C2_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 _ZTI7S1503C1[];
extern void _ZN7S1503C1D1Ev();
extern void _ZN7S1503C1D0Ev();
extern void _ZN10S1503C4_nt2v6Ev();
extern void _ZN10S1503C4_nt2v7Ev();
extern void _ZN10S1503C4_nt2v8Ev();
extern void _ZN10S1503C4_nt2v9Ev();
extern void _ZN10S1503C4_nt3v10Ev();
extern void _ZN10S1503C4_nt3v11Ev();
extern void _ZN10S1503C4_nt3v12Ev();
extern void _ZN10S1503C4_nt3v13Ev();
extern void _ZN10S1503C4_nt3v14Ev();
extern void _ZN10S1503C4_nt3v15Ev();
extern void _ZN10S1503C4_nt3v16Ev();
extern void _ZN10S1503C4_nt3v17Ev();
extern void _ZN10S1503C4_nt3v18Ev();
extern void _ZN10S1503C4_nt3v19Ev();
extern void _ZN10S1503C4_nt3v20Ev();
extern void _ZN10S1503C4_nt3v21Ev();
extern void _ZN10S1503C4_nt3v22Ev();
extern void _ZN10S1503C4_nt3v23Ev();
extern void _ZN10S1503C4_nt3v24Ev();
extern void _ZN10S1503C4_nt3v25Ev();
extern void _ZN10S1503C4_nt3v26Ev();
extern void _ZN10S1503C4_nt3v27Ev();
extern void _ZN10S1503C4_nt3v28Ev();
extern void _ZN10S1503C4_nt3v29Ev();
extern void _ZN10S1503C4_nt3v30Ev();
extern void _ZN10S1503C4_nt3v31Ev();
extern void _ZN10S1503C4_nt3v32Ev();
extern void _ZN10S1503C4_nt3v33Ev();
extern void _ZN10S1503C4_nt3v34Ev();
extern void _ZN10S1503C4_nt3v35Ev();
extern void _ZN10S1503C4_nt3v36Ev();
extern void _ZN10S1503C4_nt3v37Ev();
extern void _ZN10S1503C4_nt3v38Ev();
extern void _ZN10S1503C4_nt3v39Ev();
extern void _ZN10S1503C4_nt3v40Ev();
extern void _ZN10S1503C4_nt3v41Ev();
extern void _ZN10S1503C4_nt3v42Ev();
extern void _ZN10S1503C4_nt3v43Ev();
extern void _ZN10S1503C4_nt3v44Ev();
extern void _ZN10S1503C4_nt3v45Ev();
extern void _ZN10S1503C4_nt3v46Ev();
extern void _ZN10S1503C4_nt3v47Ev();
extern void _ZN10S1503C4_nt3v48Ev();
extern void _ZN10S1503C4_nt3v49Ev();
extern void _ZN10S1503C4_nt3v50Ev();
extern void _ZN10S1503C4_nt3v51Ev();
extern void _ZN10S1503C4_nt3v52Ev();
extern void _ZN10S1503C4_nt3v53Ev();
extern void _ZN10S1503C4_nt3v54Ev();
extern void _ZN10S1503C4_nt3v55Ev();
extern void _ZN10S1503C4_nt3v56Ev();
extern void _ZN10S1503C4_nt3v57Ev();
extern void _ZN10S1503C4_nt3v58Ev();
extern void _ZN10S1503C4_nt3v59Ev();
extern void _ZN10S1503C4_nt3v60Ev();
extern void _ZN10S1503C4_nt3v61Ev();
extern void _ZN10S1503C4_nt3v62Ev();
extern void _ZN10S1503C4_nt3v63Ev();
extern void _ZN10S1503C4_nt3v64Ev();
extern void _ZN10S1503C4_nt3v65Ev();
extern void _ZN10S1503C4_nt3v66Ev();
extern void _ZN10S1503C4_nt3v67Ev();
extern void _ZN10S1503C4_nt3v68Ev();
extern void _ZN10S1503C4_nt3v69Ev();
extern void _ZN10S1503C3_nt3v70Ev();
extern void _ZN10S1503C3_nt3v71Ev();
extern void _ZN10S1503C3_nt3v72Ev();
extern void _ZN10S1503C3_nt3v73Ev();
extern void _ZN10S1503C3_nt3v74Ev();
extern void _ZN10S1503C3_nt3v75Ev();
extern void _ZN10S1503C3_nt3v76Ev();
extern void _ZN10S1503C3_nt3v77Ev();
extern void _ZN10S1503C3_nt3v78Ev();
extern void _ZN10S1503C3_nt3v79Ev();
extern void _ZN10S1503C3_nt3v80Ev();
extern void _ZN10S1503C3_nt3v81Ev();
extern void _ZN10S1503C3_nt3v82Ev();
extern void _ZN10S1503C3_nt3v83Ev();
extern void _ZN10S1503C3_nt3v84Ev();
extern void _ZN10S1503C3_nt3v85Ev();
extern void _ZN10S1503C3_nt3v86Ev();
extern void _ZN10S1503C3_nt3v87Ev();
extern void _ZN10S1503C3_nt3v88Ev();
extern void _ZN10S1503C3_nt3v89Ev();
extern void _ZN10S1503C3_nt3v90Ev();
extern void _ZN10S1503C3_nt3v91Ev();
extern void _ZN10S1503C3_nt3v92Ev();
extern void _ZN10S1503C3_nt3v93Ev();
extern void _ZN10S1503C3_nt3v94Ev();
extern void _ZN10S1503C3_nt3v95Ev();
extern void _ZN10S1503C3_nt3v96Ev();
extern void _ZN10S1503C3_nt3v97Ev();
extern void _ZN10S1503C3_nt3v98Ev();
extern void _ZN10S1503C3_nt3v99Ev();
extern void _ZN10S1503C3_nt4v100Ev();
extern void _ZN10S1503C3_nt4v101Ev();
extern void _ZN10S1503C3_nt4v102Ev();
extern void _ZN10S1503C3_nt4v103Ev();
extern void _ZN10S1503C3_nt4v104Ev();
extern void _ZN10S1503C3_nt4v105Ev();
extern void _ZN10S1503C3_nt4v106Ev();
extern void _ZN10S1503C3_nt4v107Ev();
extern void _ZN10S1503C3_nt4v108Ev();
extern void _ZN10S1503C3_nt4v109Ev();
extern void _ZN10S1503C3_nt4v110Ev();
extern void _ZN10S1503C3_nt4v111Ev();
extern void _ZN10S1503C3_nt4v112Ev();
extern void _ZN10S1503C3_nt4v113Ev();
extern void _ZN10S1503C3_nt4v114Ev();
extern void _ZN10S1503C3_nt4v115Ev();
extern void _ZN10S1503C3_nt4v116Ev();
extern void _ZN10S1503C3_nt4v117Ev();
extern void _ZN10S1503C3_nt4v118Ev();
extern void _ZN10S1503C3_nt4v119Ev();
extern void _ZN10S1503C3_nt4v120Ev();
extern void _ZN10S1503C3_nt4v121Ev();
extern void _ZN10S1503C3_nt4v122Ev();
extern void _ZN10S1503C3_nt4v123Ev();
extern void _ZN10S1503C3_nt4v124Ev();
extern void _ZN10S1503C3_nt4v125Ev();
extern void _ZN10S1503C3_nt4v126Ev();
extern void _ZN10S1503C3_nt4v127Ev();
extern void _ZN10S1503C3_nt4v128Ev();
extern void _ZN10S1503C3_nt4v129Ev();
extern void _ZN10S1503C3_nt4v130Ev();
extern void _ZN10S1503C3_nt4v131Ev();
extern void _ZN10S1503C3_nt4v132Ev();
extern void _ZN10S1503C3_nt4v133Ev();
extern void _ZN10S1503C3_nt4v134Ev();
extern void _ZN10S1503C3_nt4v135Ev();
extern void _ZN10S1503C3_nt4v136Ev();
extern void _ZN10S1503C3_nt4v137Ev();
extern void _ZN10S1503C3_nt4v138Ev();
extern void _ZN10S1503C3_nt4v139Ev();
extern void _ZN10S1503C3_nt4v140Ev();
extern void _ZN10S1503C3_nt4v141Ev();
extern void _ZN10S1503C3_nt4v142Ev();
extern void _ZN10S1503C3_nt4v143Ev();
extern void _ZN10S1503C3_nt4v144Ev();
extern void _ZN10S1503C3_nt4v145Ev();
extern void _ZN10S1503C3_nt4v146Ev();
extern void _ZN10S1503C3_nt4v147Ev();
extern void _ZN10S1503C3_nt4v148Ev();
extern void _ZN10S1503C3_nt4v149Ev();
extern void _ZN10S1503C3_nt4v150Ev();
extern void _ZN10S1503C3_nt4v151Ev();
extern void _ZN10S1503C3_nt4v152Ev();
extern void _ZN10S1503C3_nt4v153Ev();
extern void _ZN10S1503C3_nt4v154Ev();
extern void _ZN10S1503C3_nt4v155Ev();
extern void _ZN10S1503C3_nt4v156Ev();
extern void _ZN10S1503C3_nt4v157Ev();
extern void _ZN10S1503C3_nt4v158Ev();
extern void _ZN10S1503C3_nt4v159Ev();
extern void _ZN10S1503C3_nt4v160Ev();
extern void _ZN10S1503C3_nt4v161Ev();
extern void _ZN10S1503C3_nt4v162Ev();
extern void _ZN10S1503C3_nt4v163Ev();
extern void _ZN10S1503C3_nt4v164Ev();
extern void _ZN10S1503C3_nt4v165Ev();
extern void _ZN10S1503C3_nt4v166Ev();
extern void _ZN10S1503C3_nt4v167Ev();
extern void _ZN10S1503C3_nt4v168Ev();
extern void _ZN10S1503C3_nt4v169Ev();
extern void _ZN10S1503C3_nt4v170Ev();
extern void _ZN10S1503C3_nt4v171Ev();
extern void _ZN10S1503C3_nt4v172Ev();
extern void _ZN10S1503C3_nt4v173Ev();
extern void _ZN10S1503C3_nt4v174Ev();
extern void _ZN10S1503C3_nt4v175Ev();
extern void _ZN10S1503C3_nt4v176Ev();
extern void _ZN10S1503C3_nt4v177Ev();
extern void _ZN10S1503C3_nt4v178Ev();
extern void _ZN10S1503C3_nt4v179Ev();
extern void _ZN10S1503C3_nt4v180Ev();
extern void _ZN10S1503C3_nt4v181Ev();
extern void _ZN10S1503C3_nt4v182Ev();
extern void _ZN10S1503C3_nt4v183Ev();
extern void _ZN10S1503C3_nt4v184Ev();
extern void _ZN10S1503C3_nt4v185Ev();
extern void _ZN10S1503C3_nt4v186Ev();
extern void _ZN10S1503C3_nt4v187Ev();
extern void _ZN10S1503C3_nt4v188Ev();
extern void _ZN10S1503C3_nt4v189Ev();
extern void _ZN10S1503C3_nt4v190Ev();
extern void _ZN10S1503C3_nt4v191Ev();
extern void _ZN10S1503C3_nt4v192Ev();
extern void _ZN10S1503C3_nt4v193Ev();
extern void _ZN10S1503C3_nt4v194Ev();
extern void _ZN10S1503C3_nt4v195Ev();
extern void _ZN10S1503C3_nt4v196Ev();
extern void _ZN10S1503C3_nt4v197Ev();
extern void _ZN10S1503C3_nt4v198Ev();
extern void _ZN10S1503C3_nt4v199Ev();
extern void _ZN10S1503C3_nt4v200Ev();
extern void _ZN10S1503C3_nt4v201Ev();
extern void _ZN10S1503C3_nt4v202Ev();
extern void _ZN10S1503C3_nt4v203Ev();
extern void _ZN10S1503C3_nt4v204Ev();
extern void _ZN10S1503C3_nt4v205Ev();
extern void _ZN10S1503C3_nt4v206Ev();
extern void _ZN10S1503C3_nt4v207Ev();
extern void _ZN10S1503C3_nt4v208Ev();
extern void _ZN10S1503C3_nt4v209Ev();
extern void _ZN10S1503C3_nt4v210Ev();
extern void _ZN10S1503C3_nt4v211Ev();
extern void _ZN10S1503C3_nt4v212Ev();
extern void _ZN10S1503C2_nt4v213Ev();
extern void _ZN10S1503C2_nt4v214Ev();
extern void _ZN10S1503C2_nt4v215Ev();
extern void _ZN10S1503C2_nt4v216Ev();
extern void _ZN10S1503C2_nt4v217Ev();
extern void _ZN10S1503C2_nt4v218Ev();
extern void _ZN10S1503C2_nt4v219Ev();
extern void _ZN10S1503C2_nt4v220Ev();
extern void _ZN10S1503C2_nt4v221Ev();
extern void _ZN10S1503C2_nt4v222Ev();
extern void _ZN10S1503C2_nt4v223Ev();
extern void _ZN10S1503C2_nt4v224Ev();
extern void _ZN10S1503C2_nt4v225Ev();
extern void _ZN10S1503C2_nt4v226Ev();
extern void _ZN10S1503C2_nt4v227Ev();
extern void _ZN10S1503C2_nt4v228Ev();
extern void _ZN10S1503C2_nt4v229Ev();
extern void _ZN10S1503C2_nt4v230Ev();
extern void _ZN10S1503C2_nt4v231Ev();
extern void _ZN10S1503C2_nt4v232Ev();
extern void _ZN10S1503C2_nt4v233Ev();
extern void _ZN10S1503C2_nt4v234Ev();
extern void _ZN10S1503C2_nt4v235Ev();
extern void _ZN10S1503C2_nt4v236Ev();
extern void _ZN10S1503C2_nt4v237Ev();
extern void _ZN10S1503C2_nt4v238Ev();
extern void _ZN10S1503C2_nt4v239Ev();
extern void _ZN10S1503C2_nt4v240Ev();
extern void _ZN10S1503C2_nt4v241Ev();
extern void _ZN10S1503C2_nt4v242Ev();
extern void _ZN10S1503C2_nt4v243Ev();
extern void _ZN10S1503C2_nt4v244Ev();
extern void _ZN10S1503C2_nt4v245Ev();
extern void _ZN10S1503C2_nt4v246Ev();
extern void _ZN10S1503C2_nt4v247Ev();
extern void _ZN10S1503C2_nt4v248Ev();
extern void _ZN10S1503C2_nt4v249Ev();
extern void _ZN7S1503C12v1Ev();
extern void _ZN7S1503C12v2Ev();
extern void _ZN7S1503C12v3Ev();
extern void _ZN7S1503C12v4Ev();
extern void _ZN7S1503C12v5Ev();
static  VTBL_ENTRY vtc_S1503C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1503C1[0]),
  (VTBL_ENTRY)&_ZN7S1503C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1503C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S1503C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S1503C3_nt4v212Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v213Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v214Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v215Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v216Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v217Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v218Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v219Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v220Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v221Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v222Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v223Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v224Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v225Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v226Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v227Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v228Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v229Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v230Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v231Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v232Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v233Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v234Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v235Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v236Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v237Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v238Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v239Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v240Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v241Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v242Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v243Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v244Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v245Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v246Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v247Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v248Ev,
  (VTBL_ENTRY)&_ZN10S1503C2_nt4v249Ev,
  (VTBL_ENTRY)&_ZN7S1503C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1503C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1503C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1503C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1503C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1503C1[];
extern  VTBL_ENTRY _ZTV7S1503C1[];
Class_Descriptor cd_S1503C1 = {  "S1503C1", // class name
  bases_S1503C1, 3,
  &(vtc_S1503C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(920,688), // object size
  NSPAIRA(_ZTI7S1503C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1503C1),253, //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  S629C5  {
  int s629c5f0;
  __tsi64 s629c5f1;
  void *s629c5f2[4];
  int s629c5f3[2];
  void *s629c5f4;
  ::S1503C5_nt s629c5f5;
  void *s629c5f6[2];
  virtual  ~S629C5(); // _ZN6S629C5D1Ev
  virtual void  v5(); // _ZN6S629C52v5Ev
  virtual void  v6(); // _ZN6S629C52v6Ev
  virtual void  v7(); // _ZN6S629C52v7Ev
  virtual void  v8(); // _ZN6S629C52v8Ev
  virtual void  v9(); // _ZN6S629C52v9Ev
  virtual void  v10(); // _ZN6S629C53v10Ev
  virtual void  v11(); // _ZN6S629C53v11Ev
  virtual void  v12(); // _ZN6S629C53v12Ev
  virtual void  v13(); // _ZN6S629C53v13Ev
  virtual void  v14(); // _ZN6S629C53v14Ev
  virtual void  v15(); // _ZN6S629C53v15Ev
  virtual void  v16(); // _ZN6S629C53v16Ev
  virtual void  v17(); // _ZN6S629C53v17Ev
  virtual void  v18(); // _ZN6S629C53v18Ev
  virtual void  v19(); // _ZN6S629C53v19Ev
  virtual void  v20(); // _ZN6S629C53v20Ev
  virtual void  v21(); // _ZN6S629C53v21Ev
  virtual void  v22(); // _ZN6S629C53v22Ev
  virtual void  v23(); // _ZN6S629C53v23Ev
  virtual void  v24(); // _ZN6S629C53v24Ev
  virtual void  v25(); // _ZN6S629C53v25Ev
  virtual void  v26(); // _ZN6S629C53v26Ev
  virtual void  v27(); // _ZN6S629C53v27Ev
  virtual void  v28(); // _ZN6S629C53v28Ev
  virtual void  v29(); // _ZN6S629C53v29Ev
  virtual void  v30(); // _ZN6S629C53v30Ev
  virtual void  v31(); // _ZN6S629C53v31Ev
  virtual void  v32(); // _ZN6S629C53v32Ev
  virtual void  v33(); // _ZN6S629C53v33Ev
  virtual void  v34(); // _ZN6S629C53v34Ev
  virtual void  v35(); // _ZN6S629C53v35Ev
  virtual void  v36(); // _ZN6S629C53v36Ev
  virtual void  v37(); // _ZN6S629C53v37Ev
  virtual void  v38(); // _ZN6S629C53v38Ev
  virtual void  v39(); // _ZN6S629C53v39Ev
  virtual void  v40(); // _ZN6S629C53v40Ev
  virtual void  v41(); // _ZN6S629C53v41Ev
  virtual void  v42(); // _ZN6S629C53v42Ev
  virtual void  v43(); // _ZN6S629C53v43Ev
  virtual void  v44(); // _ZN6S629C53v44Ev
  virtual void  v45(); // _ZN6S629C53v45Ev
  virtual void  v46(); // _ZN6S629C53v46Ev
  virtual void  v47(); // _ZN6S629C53v47Ev
  virtual void  v48(); // _ZN6S629C53v48Ev
  virtual void  v49(); // _ZN6S629C53v49Ev
  virtual void  v50(); // _ZN6S629C53v50Ev
  virtual void  v51(); // _ZN6S629C53v51Ev
  virtual void  v52(); // _ZN6S629C53v52Ev
  virtual void  v53(); // _ZN6S629C53v53Ev
  virtual void  v54(); // _ZN6S629C53v54Ev
  virtual void  v55(); // _ZN6S629C53v55Ev
  virtual void  v56(); // _ZN6S629C53v56Ev
  virtual void  v57(); // _ZN6S629C53v57Ev
  virtual void  v58(); // _ZN6S629C53v58Ev
  virtual void  v59(); // _ZN6S629C53v59Ev
  virtual void  v60(); // _ZN6S629C53v60Ev
  virtual void  v61(); // _ZN6S629C53v61Ev
  virtual void  v62(); // _ZN6S629C53v62Ev
  virtual void  v63(); // _ZN6S629C53v63Ev
  virtual void  v64(); // _ZN6S629C53v64Ev
  virtual void  v65(); // _ZN6S629C53v65Ev
  virtual void  v66(); // _ZN6S629C53v66Ev
  virtual void  v67(); // _ZN6S629C53v67Ev
  virtual void  v68(); // _ZN6S629C53v68Ev
  S629C5(); // tgen
};
//SIG(-1 S629C5) 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]}


 S629C5 ::~S629C5(){ note_dtor("S629C5", this);}
void  S629C5 ::v5(){vfunc_called(this, "_ZN6S629C52v5Ev");}
void  S629C5 ::v6(){vfunc_called(this, "_ZN6S629C52v6Ev");}
void  S629C5 ::v7(){vfunc_called(this, "_ZN6S629C52v7Ev");}
void  S629C5 ::v8(){vfunc_called(this, "_ZN6S629C52v8Ev");}
void  S629C5 ::v9(){vfunc_called(this, "_ZN6S629C52v9Ev");}
void  S629C5 ::v10(){vfunc_called(this, "_ZN6S629C53v10Ev");}
void  S629C5 ::v11(){vfunc_called(this, "_ZN6S629C53v11Ev");}
void  S629C5 ::v12(){vfunc_called(this, "_ZN6S629C53v12Ev");}
void  S629C5 ::v13(){vfunc_called(this, "_ZN6S629C53v13Ev");}
void  S629C5 ::v14(){vfunc_called(this, "_ZN6S629C53v14Ev");}
void  S629C5 ::v15(){vfunc_called(this, "_ZN6S629C53v15Ev");}
void  S629C5 ::v16(){vfunc_called(this, "_ZN6S629C53v16Ev");}
void  S629C5 ::v17(){vfunc_called(this, "_ZN6S629C53v17Ev");}
void  S629C5 ::v18(){vfunc_called(this, "_ZN6S629C53v18Ev");}
void  S629C5 ::v19(){vfunc_called(this, "_ZN6S629C53v19Ev");}
void  S629C5 ::v20(){vfunc_called(this, "_ZN6S629C53v20Ev");}
void  S629C5 ::v21(){vfunc_called(this, "_ZN6S629C53v21Ev");}
void  S629C5 ::v22(){vfunc_called(this, "_ZN6S629C53v22Ev");}
void  S629C5 ::v23(){vfunc_called(this, "_ZN6S629C53v23Ev");}
void  S629C5 ::v24(){vfunc_called(this, "_ZN6S629C53v24Ev");}
void  S629C5 ::v25(){vfunc_called(this, "_ZN6S629C53v25Ev");}
void  S629C5 ::v26(){vfunc_called(this, "_ZN6S629C53v26Ev");}
void  S629C5 ::v27(){vfunc_called(this, "_ZN6S629C53v27Ev");}
void  S629C5 ::v28(){vfunc_called(this, "_ZN6S629C53v28Ev");}
void  S629C5 ::v29(){vfunc_called(this, "_ZN6S629C53v29Ev");}
void  S629C5 ::v30(){vfunc_called(this, "_ZN6S629C53v30Ev");}
void  S629C5 ::v31(){vfunc_called(this, "_ZN6S629C53v31Ev");}
void  S629C5 ::v32(){vfunc_called(this, "_ZN6S629C53v32Ev");}
void  S629C5 ::v33(){vfunc_called(this, "_ZN6S629C53v33Ev");}
void  S629C5 ::v34(){vfunc_called(this, "_ZN6S629C53v34Ev");}
void  S629C5 ::v35(){vfunc_called(this, "_ZN6S629C53v35Ev");}
void  S629C5 ::v36(){vfunc_called(this, "_ZN6S629C53v36Ev");}
void  S629C5 ::v37(){vfunc_called(this, "_ZN6S629C53v37Ev");}
void  S629C5 ::v38(){vfunc_called(this, "_ZN6S629C53v38Ev");}
void  S629C5 ::v39(){vfunc_called(this, "_ZN6S629C53v39Ev");}
void  S629C5 ::v40(){vfunc_called(this, "_ZN6S629C53v40Ev");}
void  S629C5 ::v41(){vfunc_called(this, "_ZN6S629C53v41Ev");}
void  S629C5 ::v42(){vfunc_called(this, "_ZN6S629C53v42Ev");}
void  S629C5 ::v43(){vfunc_called(this, "_ZN6S629C53v43Ev");}
void  S629C5 ::v44(){vfunc_called(this, "_ZN6S629C53v44Ev");}
void  S629C5 ::v45(){vfunc_called(this, "_ZN6S629C53v45Ev");}
void  S629C5 ::v46(){vfunc_called(this, "_ZN6S629C53v46Ev");}
void  S629C5 ::v47(){vfunc_called(this, "_ZN6S629C53v47Ev");}
void  S629C5 ::v48(){vfunc_called(this, "_ZN6S629C53v48Ev");}
void  S629C5 ::v49(){vfunc_called(this, "_ZN6S629C53v49Ev");}
void  S629C5 ::v50(){vfunc_called(this, "_ZN6S629C53v50Ev");}
void  S629C5 ::v51(){vfunc_called(this, "_ZN6S629C53v51Ev");}
void  S629C5 ::v52(){vfunc_called(this, "_ZN6S629C53v52Ev");}
void  S629C5 ::v53(){vfunc_called(this, "_ZN6S629C53v53Ev");}
void  S629C5 ::v54(){vfunc_called(this, "_ZN6S629C53v54Ev");}
void  S629C5 ::v55(){vfunc_called(this, "_ZN6S629C53v55Ev");}
void  S629C5 ::v56(){vfunc_called(this, "_ZN6S629C53v56Ev");}
void  S629C5 ::v57(){vfunc_called(this, "_ZN6S629C53v57Ev");}
void  S629C5 ::v58(){vfunc_called(this, "_ZN6S629C53v58Ev");}
void  S629C5 ::v59(){vfunc_called(this, "_ZN6S629C53v59Ev");}
void  S629C5 ::v60(){vfunc_called(this, "_ZN6S629C53v60Ev");}
void  S629C5 ::v61(){vfunc_called(this, "_ZN6S629C53v61Ev");}
void  S629C5 ::v62(){vfunc_called(this, "_ZN6S629C53v62Ev");}
void  S629C5 ::v63(){vfunc_called(this, "_ZN6S629C53v63Ev");}
void  S629C5 ::v64(){vfunc_called(this, "_ZN6S629C53v64Ev");}
void  S629C5 ::v65(){vfunc_called(this, "_ZN6S629C53v65Ev");}
void  S629C5 ::v66(){vfunc_called(this, "_ZN6S629C53v66Ev");}
void  S629C5 ::v67(){vfunc_called(this, "_ZN6S629C53v67Ev");}
void  S629C5 ::v68(){vfunc_called(this, "_ZN6S629C53v68Ev");}
S629C5 ::S629C5(){ note_ctor("S629C5", this);} // tgen

static void Test_S629C5()
{
  extern Class_Descriptor cd_S629C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S629C5, buf);
    S629C5 *dp, &lv = *(dp=new (buf) S629C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S629C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S629C5)");
    check_field_offset(lv, s629c5f0, ABISELECT(8,4), "S629C5.s629c5f0");
    check_field_offset(lv, s629c5f1, ABISELECT(16,8), "S629C5.s629c5f1");
    check_field_offset(lv, s629c5f2, ABISELECT(24,16), "S629C5.s629c5f2");
    check_field_offset(lv, s629c5f3, ABISELECT(56,32), "S629C5.s629c5f3");
    check_field_offset(lv, s629c5f4, ABISELECT(64,40), "S629C5.s629c5f4");
    check_field_offset(lv, s629c5f5, ABISELECT(72,44), "S629C5.s629c5f5");
    check_field_offset(lv, s629c5f6, ABISELECT(80,52), "S629C5.s629c5f6");
    test_class_info(&lv, &cd_S629C5);
    dp->~S629C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS629C5(Test_S629C5, "S629C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S629C5C1Ev();
extern void _ZN6S629C5D1Ev();
Name_Map name_map_S629C5[] = {
  NSPAIR(_ZN6S629C5C1Ev),
  NSPAIR(_ZN6S629C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S629C5[];
extern void _ZN6S629C5D1Ev();
extern void _ZN6S629C5D0Ev();
extern void _ZN6S629C52v5Ev();
extern void _ZN6S629C52v6Ev();
extern void _ZN6S629C52v7Ev();
extern void _ZN6S629C52v8Ev();
extern void _ZN6S629C52v9Ev();
extern void _ZN6S629C53v10Ev();
extern void _ZN6S629C53v11Ev();
extern void _ZN6S629C53v12Ev();
extern void _ZN6S629C53v13Ev();
extern void _ZN6S629C53v14Ev();
extern void _ZN6S629C53v15Ev();
extern void _ZN6S629C53v16Ev();
extern void _ZN6S629C53v17Ev();
extern void _ZN6S629C53v18Ev();
extern void _ZN6S629C53v19Ev();
extern void _ZN6S629C53v20Ev();
extern void _ZN6S629C53v21Ev();
extern void _ZN6S629C53v22Ev();
extern void _ZN6S629C53v23Ev();
extern void _ZN6S629C53v24Ev();
extern void _ZN6S629C53v25Ev();
extern void _ZN6S629C53v26Ev();
extern void _ZN6S629C53v27Ev();
extern void _ZN6S629C53v28Ev();
extern void _ZN6S629C53v29Ev();
extern void _ZN6S629C53v30Ev();
extern void _ZN6S629C53v31Ev();
extern void _ZN6S629C53v32Ev();
extern void _ZN6S629C53v33Ev();
extern void _ZN6S629C53v34Ev();
extern void _ZN6S629C53v35Ev();
extern void _ZN6S629C53v36Ev();
extern void _ZN6S629C53v37Ev();
extern void _ZN6S629C53v38Ev();
extern void _ZN6S629C53v39Ev();
extern void _ZN6S629C53v40Ev();
extern void _ZN6S629C53v41Ev();
extern void _ZN6S629C53v42Ev();
extern void _ZN6S629C53v43Ev();
extern void _ZN6S629C53v44Ev();
extern void _ZN6S629C53v45Ev();
extern void _ZN6S629C53v46Ev();
extern void _ZN6S629C53v47Ev();
extern void _ZN6S629C53v48Ev();
extern void _ZN6S629C53v49Ev();
extern void _ZN6S629C53v50Ev();
extern void _ZN6S629C53v51Ev();
extern void _ZN6S629C53v52Ev();
extern void _ZN6S629C53v53Ev();
extern void _ZN6S629C53v54Ev();
extern void _ZN6S629C53v55Ev();
extern void _ZN6S629C53v56Ev();
extern void _ZN6S629C53v57Ev();
extern void _ZN6S629C53v58Ev();
extern void _ZN6S629C53v59Ev();
extern void _ZN6S629C53v60Ev();
extern void _ZN6S629C53v61Ev();
extern void _ZN6S629C53v62Ev();
extern void _ZN6S629C53v63Ev();
extern void _ZN6S629C53v64Ev();
extern void _ZN6S629C53v65Ev();
extern void _ZN6S629C53v66Ev();
extern void _ZN6S629C53v67Ev();
extern void _ZN6S629C53v68Ev();
static  VTBL_ENTRY vtc_S629C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S629C5[0]),
  (VTBL_ENTRY)&_ZN6S629C5D1Ev,
  (VTBL_ENTRY)&_ZN6S629C5D0Ev,
  (VTBL_ENTRY)&_ZN6S629C52v5Ev,
  (VTBL_ENTRY)&_ZN6S629C52v6Ev,
  (VTBL_ENTRY)&_ZN6S629C52v7Ev,
  (VTBL_ENTRY)&_ZN6S629C52v8Ev,
  (VTBL_ENTRY)&_ZN6S629C52v9Ev,
  (VTBL_ENTRY)&_ZN6S629C53v10Ev,
  (VTBL_ENTRY)&_ZN6S629C53v11Ev,
  (VTBL_ENTRY)&_ZN6S629C53v12Ev,
  (VTBL_ENTRY)&_ZN6S629C53v13Ev,
  (VTBL_ENTRY)&_ZN6S629C53v14Ev,
  (VTBL_ENTRY)&_ZN6S629C53v15Ev,
  (VTBL_ENTRY)&_ZN6S629C53v16Ev,
  (VTBL_ENTRY)&_ZN6S629C53v17Ev,
  (VTBL_ENTRY)&_ZN6S629C53v18Ev,
  (VTBL_ENTRY)&_ZN6S629C53v19Ev,
  (VTBL_ENTRY)&_ZN6S629C53v20Ev,
  (VTBL_ENTRY)&_ZN6S629C53v21Ev,
  (VTBL_ENTRY)&_ZN6S629C53v22Ev,
  (VTBL_ENTRY)&_ZN6S629C53v23Ev,
  (VTBL_ENTRY)&_ZN6S629C53v24Ev,
  (VTBL_ENTRY)&_ZN6S629C53v25Ev,
  (VTBL_ENTRY)&_ZN6S629C53v26Ev,
  (VTBL_ENTRY)&_ZN6S629C53v27Ev,
  (VTBL_ENTRY)&_ZN6S629C53v28Ev,
  (VTBL_ENTRY)&_ZN6S629C53v29Ev,
  (VTBL_ENTRY)&_ZN6S629C53v30Ev,
  (VTBL_ENTRY)&_ZN6S629C53v31Ev,
  (VTBL_ENTRY)&_ZN6S629C53v32Ev,
  (VTBL_ENTRY)&_ZN6S629C53v33Ev,
  (VTBL_ENTRY)&_ZN6S629C53v34Ev,
  (VTBL_ENTRY)&_ZN6S629C53v35Ev,
  (VTBL_ENTRY)&_ZN6S629C53v36Ev,
  (VTBL_ENTRY)&_ZN6S629C53v37Ev,
  (VTBL_ENTRY)&_ZN6S629C53v38Ev,
  (VTBL_ENTRY)&_ZN6S629C53v39Ev,
  (VTBL_ENTRY)&_ZN6S629C53v40Ev,
  (VTBL_ENTRY)&_ZN6S629C53v41Ev,
  (VTBL_ENTRY)&_ZN6S629C53v42Ev,
  (VTBL_ENTRY)&_ZN6S629C53v43Ev,
  (VTBL_ENTRY)&_ZN6S629C53v44Ev,
  (VTBL_ENTRY)&_ZN6S629C53v45Ev,
  (VTBL_ENTRY)&_ZN6S629C53v46Ev,
  (VTBL_ENTRY)&_ZN6S629C53v47Ev,
  (VTBL_ENTRY)&_ZN6S629C53v48Ev,
  (VTBL_ENTRY)&_ZN6S629C53v49Ev,
  (VTBL_ENTRY)&_ZN6S629C53v50Ev,
  (VTBL_ENTRY)&_ZN6S629C53v51Ev,
  (VTBL_ENTRY)&_ZN6S629C53v52Ev,
  (VTBL_ENTRY)&_ZN6S629C53v53Ev,
  (VTBL_ENTRY)&_ZN6S629C53v54Ev,
  (VTBL_ENTRY)&_ZN6S629C53v55Ev,
  (VTBL_ENTRY)&_ZN6S629C53v56Ev,
  (VTBL_ENTRY)&_ZN6S629C53v57Ev,
  (VTBL_ENTRY)&_ZN6S629C53v58Ev,
  (VTBL_ENTRY)&_ZN6S629C53v59Ev,
  (VTBL_ENTRY)&_ZN6S629C53v60Ev,
  (VTBL_ENTRY)&_ZN6S629C53v61Ev,
  (VTBL_ENTRY)&_ZN6S629C53v62Ev,
  (VTBL_ENTRY)&_ZN6S629C53v63Ev,
  (VTBL_ENTRY)&_ZN6S629C53v64Ev,
  (VTBL_ENTRY)&_ZN6S629C53v65Ev,
  (VTBL_ENTRY)&_ZN6S629C53v66Ev,
  (VTBL_ENTRY)&_ZN6S629C53v67Ev,
  (VTBL_ENTRY)&_ZN6S629C53v68Ev,
};
extern VTBL_ENTRY _ZTI6S629C5[];
extern  VTBL_ENTRY _ZTV6S629C5[];
Class_Descriptor cd_S629C5 = {  "S629C5", // class name
  0,0,//no base classes
  &(vtc_S629C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S629C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S629C5),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  S629C4_nt  : S629C5 {
  void *s629c4f0;
  ::S1503C5_nt s629c4f1;
  virtual  ~S629C4_nt(); // _ZN9S629C4_ntD1Ev
  virtual void  v69(); // _ZN9S629C4_nt3v69Ev
  virtual void  v70(); // _ZN9S629C4_nt3v70Ev
  virtual void  v71(); // _ZN9S629C4_nt3v71Ev
  virtual void  v72(); // _ZN9S629C4_nt3v72Ev
  virtual void  v73(); // _ZN9S629C4_nt3v73Ev
  S629C4_nt(); // tgen
};
//SIG(-1 S629C4_nt) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 Fp FC3}


 S629C4_nt ::~S629C4_nt(){ note_dtor("S629C4_nt", this);}
void  S629C4_nt ::v69(){vfunc_called(this, "_ZN9S629C4_nt3v69Ev");}
void  S629C4_nt ::v70(){vfunc_called(this, "_ZN9S629C4_nt3v70Ev");}
void  S629C4_nt ::v71(){vfunc_called(this, "_ZN9S629C4_nt3v71Ev");}
void  S629C4_nt ::v72(){vfunc_called(this, "_ZN9S629C4_nt3v72Ev");}
void  S629C4_nt ::v73(){vfunc_called(this, "_ZN9S629C4_nt3v73Ev");}
S629C4_nt ::S629C4_nt(){ note_ctor("S629C4_nt", this);} // tgen

//skip512 S629C4_nt

#else // __cplusplus

extern void _ZN9S629C4_ntC1Ev();
extern void _ZN9S629C4_ntD1Ev();
Name_Map name_map_S629C4_nt[] = {
  NSPAIR(_ZN9S629C4_ntC1Ev),
  NSPAIR(_ZN9S629C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S629C5;
extern VTBL_ENTRY _ZTI6S629C5[];
extern  VTBL_ENTRY _ZTV6S629C5[];
static Base_Class bases_S629C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S629C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S629C4_nt[];
extern void _ZN9S629C4_ntD1Ev();
extern void _ZN9S629C4_ntD0Ev();
extern void _ZN6S629C52v5Ev();
extern void _ZN6S629C52v6Ev();
extern void _ZN6S629C52v7Ev();
extern void _ZN6S629C52v8Ev();
extern void _ZN6S629C52v9Ev();
extern void _ZN6S629C53v10Ev();
extern void _ZN6S629C53v11Ev();
extern void _ZN6S629C53v12Ev();
extern void _ZN6S629C53v13Ev();
extern void _ZN6S629C53v14Ev();
extern void _ZN6S629C53v15Ev();
extern void _ZN6S629C53v16Ev();
extern void _ZN6S629C53v17Ev();
extern void _ZN6S629C53v18Ev();
extern void _ZN6S629C53v19Ev();
extern void _ZN6S629C53v20Ev();
extern void _ZN6S629C53v21Ev();
extern void _ZN6S629C53v22Ev();
extern void _ZN6S629C53v23Ev();
extern void _ZN6S629C53v24Ev();
extern void _ZN6S629C53v25Ev();
extern void _ZN6S629C53v26Ev();
extern void _ZN6S629C53v27Ev();
extern void _ZN6S629C53v28Ev();
extern void _ZN6S629C53v29Ev();
extern void _ZN6S629C53v30Ev();
extern void _ZN6S629C53v31Ev();
extern void _ZN6S629C53v32Ev();
extern void _ZN6S629C53v33Ev();
extern void _ZN6S629C53v34Ev();
extern void _ZN6S629C53v35Ev();
extern void _ZN6S629C53v36Ev();
extern void _ZN6S629C53v37Ev();
extern void _ZN6S629C53v38Ev();
extern void _ZN6S629C53v39Ev();
extern void _ZN6S629C53v40Ev();
extern void _ZN6S629C53v41Ev();
extern void _ZN6S629C53v42Ev();
extern void _ZN6S629C53v43Ev();
extern void _ZN6S629C53v44Ev();
extern void _ZN6S629C53v45Ev();
extern void _ZN6S629C53v46Ev();
extern void _ZN6S629C53v47Ev();
extern void _ZN6S629C53v48Ev();
extern void _ZN6S629C53v49Ev();
extern void _ZN6S629C53v50Ev();
extern void _ZN6S629C53v51Ev();
extern void _ZN6S629C53v52Ev();
extern void _ZN6S629C53v53Ev();
extern void _ZN6S629C53v54Ev();
extern void _ZN6S629C53v55Ev();
extern void _ZN6S629C53v56Ev();
extern void _ZN6S629C53v57Ev();
extern void _ZN6S629C53v58Ev();
extern void _ZN6S629C53v59Ev();
extern void _ZN6S629C53v60Ev();
extern void _ZN6S629C53v61Ev();
extern void _ZN6S629C53v62Ev();
extern void _ZN6S629C53v63Ev();
extern void _ZN6S629C53v64Ev();
extern void _ZN6S629C53v65Ev();
extern void _ZN6S629C53v66Ev();
extern void _ZN6S629C53v67Ev();
extern void _ZN6S629C53v68Ev();
extern void _ZN9S629C4_nt3v69Ev();
extern void _ZN9S629C4_nt3v70Ev();
extern void _ZN9S629C4_nt3v71Ev();
extern void _ZN9S629C4_nt3v72Ev();
extern void _ZN9S629C4_nt3v73Ev();
static  VTBL_ENTRY vtc_S629C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S629C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S629C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S629C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S629C52v5Ev,
  (VTBL_ENTRY)&_ZN6S629C52v6Ev,
  (VTBL_ENTRY)&_ZN6S629C52v7Ev,
  (VTBL_ENTRY)&_ZN6S629C52v8Ev,
  (VTBL_ENTRY)&_ZN6S629C52v9Ev,
  (VTBL_ENTRY)&_ZN6S629C53v10Ev,
  (VTBL_ENTRY)&_ZN6S629C53v11Ev,
  (VTBL_ENTRY)&_ZN6S629C53v12Ev,
  (VTBL_ENTRY)&_ZN6S629C53v13Ev,
  (VTBL_ENTRY)&_ZN6S629C53v14Ev,
  (VTBL_ENTRY)&_ZN6S629C53v15Ev,
  (VTBL_ENTRY)&_ZN6S629C53v16Ev,
  (VTBL_ENTRY)&_ZN6S629C53v17Ev,
  (VTBL_ENTRY)&_ZN6S629C53v18Ev,
  (VTBL_ENTRY)&_ZN6S629C53v19Ev,
  (VTBL_ENTRY)&_ZN6S629C53v20Ev,
  (VTBL_ENTRY)&_ZN6S629C53v21Ev,
  (VTBL_ENTRY)&_ZN6S629C53v22Ev,
  (VTBL_ENTRY)&_ZN6S629C53v23Ev,
  (VTBL_ENTRY)&_ZN6S629C53v24Ev,
  (VTBL_ENTRY)&_ZN6S629C53v25Ev,
  (VTBL_ENTRY)&_ZN6S629C53v26Ev,
  (VTBL_ENTRY)&_ZN6S629C53v27Ev,
  (VTBL_ENTRY)&_ZN6S629C53v28Ev,
  (VTBL_ENTRY)&_ZN6S629C53v29Ev,
  (VTBL_ENTRY)&_ZN6S629C53v30Ev,
  (VTBL_ENTRY)&_ZN6S629C53v31Ev,
  (VTBL_ENTRY)&_ZN6S629C53v32Ev,
  (VTBL_ENTRY)&_ZN6S629C53v33Ev,
  (VTBL_ENTRY)&_ZN6S629C53v34Ev,
  (VTBL_ENTRY)&_ZN6S629C53v35Ev,
  (VTBL_ENTRY)&_ZN6S629C53v36Ev,
  (VTBL_ENTRY)&_ZN6S629C53v37Ev,
  (VTBL_ENTRY)&_ZN6S629C53v38Ev,
  (VTBL_ENTRY)&_ZN6S629C53v39Ev,
  (VTBL_ENTRY)&_ZN6S629C53v40Ev,
  (VTBL_ENTRY)&_ZN6S629C53v41Ev,
  (VTBL_ENTRY)&_ZN6S629C53v42Ev,
  (VTBL_ENTRY)&_ZN6S629C53v43Ev,
  (VTBL_ENTRY)&_ZN6S629C53v44Ev,
  (VTBL_ENTRY)&_ZN6S629C53v45Ev,
  (VTBL_ENTRY)&_ZN6S629C53v46Ev,
  (VTBL_ENTRY)&_ZN6S629C53v47Ev,
  (VTBL_ENTRY)&_ZN6S629C53v48Ev,
  (VTBL_ENTRY)&_ZN6S629C53v49Ev,
  (VTBL_ENTRY)&_ZN6S629C53v50Ev,
  (VTBL_ENTRY)&_ZN6S629C53v51Ev,
  (VTBL_ENTRY)&_ZN6S629C53v52Ev,
  (VTBL_ENTRY)&_ZN6S629C53v53Ev,
  (VTBL_ENTRY)&_ZN6S629C53v54Ev,
  (VTBL_ENTRY)&_ZN6S629C53v55Ev,
  (VTBL_ENTRY)&_ZN6S629C53v56Ev,
  (VTBL_ENTRY)&_ZN6S629C53v57Ev,
  (VTBL_ENTRY)&_ZN6S629C53v58Ev,
  (VTBL_ENTRY)&_ZN6S629C53v59Ev,
  (VTBL_ENTRY)&_ZN6S629C53v60Ev,
  (VTBL_ENTRY)&_ZN6S629C53v61Ev,
  (VTBL_ENTRY)&_ZN6S629C53v62Ev,
  (VTBL_ENTRY)&_ZN6S629C53v63Ev,
  (VTBL_ENTRY)&_ZN6S629C53v64Ev,
  (VTBL_ENTRY)&_ZN6S629C53v65Ev,
  (VTBL_ENTRY)&_ZN6S629C53v66Ev,
  (VTBL_ENTRY)&_ZN6S629C53v67Ev,
  (VTBL_ENTRY)&_ZN6S629C53v68Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v73Ev,
};
extern VTBL_ENTRY _ZTI9S629C4_nt[];
VTBL_ENTRY *P__ZTI9S629C4_nt = _ZTI9S629C4_nt; 
extern  VTBL_ENTRY _ZTV9S629C4_nt[];
Class_Descriptor cd_S629C4_nt = {  "S629C4_nt", // class name
  bases_S629C4_nt, 1,
  &(vtc_S629C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI9S629C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S629C4_nt),73, //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  S629C3_nt  : S629C4_nt {
  void *s629c3f0[2];
  unsigned int s629c3f1:1;
  unsigned int s629c3f2:1;
  unsigned int s629c3f3:1;
  unsigned int s629c3f4:1;
  char s629c3f5;
  virtual  ~S629C3_nt(); // _ZN9S629C3_ntD1Ev
  virtual void  v74(); // _ZN9S629C3_nt3v74Ev
  virtual void  v75(); // _ZN9S629C3_nt3v75Ev
  virtual void  v76(); // _ZN9S629C3_nt3v76Ev
  virtual void  v77(); // _ZN9S629C3_nt3v77Ev
  virtual void  v78(); // _ZN9S629C3_nt3v78Ev
  virtual void  v79(); // _ZN9S629C3_nt3v79Ev
  virtual void  v80(); // _ZN9S629C3_nt3v80Ev
  virtual void  v81(); // _ZN9S629C3_nt3v81Ev
  virtual void  v82(); // _ZN9S629C3_nt3v82Ev
  virtual void  v83(); // _ZN9S629C3_nt3v83Ev
  virtual void  v84(); // _ZN9S629C3_nt3v84Ev
  virtual void  v85(); // _ZN9S629C3_nt3v85Ev
  virtual void  v86(); // _ZN9S629C3_nt3v86Ev
  virtual void  v87(); // _ZN9S629C3_nt3v87Ev
  virtual void  v88(); // _ZN9S629C3_nt3v88Ev
  virtual void  v89(); // _ZN9S629C3_nt3v89Ev
  virtual void  v90(); // _ZN9S629C3_nt3v90Ev
  virtual void  v91(); // _ZN9S629C3_nt3v91Ev
  virtual void  v92(); // _ZN9S629C3_nt3v92Ev
  virtual void  v93(); // _ZN9S629C3_nt3v93Ev
  virtual void  v94(); // _ZN9S629C3_nt3v94Ev
  virtual void  v95(); // _ZN9S629C3_nt3v95Ev
  S629C3_nt(); // tgen
};
//SIG(-1 S629C3_nt) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v87 v88 v89 v90 v91 Fp FC4} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc}


 S629C3_nt ::~S629C3_nt(){ note_dtor("S629C3_nt", this);}
void  S629C3_nt ::v74(){vfunc_called(this, "_ZN9S629C3_nt3v74Ev");}
void  S629C3_nt ::v75(){vfunc_called(this, "_ZN9S629C3_nt3v75Ev");}
void  S629C3_nt ::v76(){vfunc_called(this, "_ZN9S629C3_nt3v76Ev");}
void  S629C3_nt ::v77(){vfunc_called(this, "_ZN9S629C3_nt3v77Ev");}
void  S629C3_nt ::v78(){vfunc_called(this, "_ZN9S629C3_nt3v78Ev");}
void  S629C3_nt ::v79(){vfunc_called(this, "_ZN9S629C3_nt3v79Ev");}
void  S629C3_nt ::v80(){vfunc_called(this, "_ZN9S629C3_nt3v80Ev");}
void  S629C3_nt ::v81(){vfunc_called(this, "_ZN9S629C3_nt3v81Ev");}
void  S629C3_nt ::v82(){vfunc_called(this, "_ZN9S629C3_nt3v82Ev");}
void  S629C3_nt ::v83(){vfunc_called(this, "_ZN9S629C3_nt3v83Ev");}
void  S629C3_nt ::v84(){vfunc_called(this, "_ZN9S629C3_nt3v84Ev");}
void  S629C3_nt ::v85(){vfunc_called(this, "_ZN9S629C3_nt3v85Ev");}
void  S629C3_nt ::v86(){vfunc_called(this, "_ZN9S629C3_nt3v86Ev");}
void  S629C3_nt ::v87(){vfunc_called(this, "_ZN9S629C3_nt3v87Ev");}
void  S629C3_nt ::v88(){vfunc_called(this, "_ZN9S629C3_nt3v88Ev");}
void  S629C3_nt ::v89(){vfunc_called(this, "_ZN9S629C3_nt3v89Ev");}
void  S629C3_nt ::v90(){vfunc_called(this, "_ZN9S629C3_nt3v90Ev");}
void  S629C3_nt ::v91(){vfunc_called(this, "_ZN9S629C3_nt3v91Ev");}
void  S629C3_nt ::v92(){vfunc_called(this, "_ZN9S629C3_nt3v92Ev");}
void  S629C3_nt ::v93(){vfunc_called(this, "_ZN9S629C3_nt3v93Ev");}
void  S629C3_nt ::v94(){vfunc_called(this, "_ZN9S629C3_nt3v94Ev");}
void  S629C3_nt ::v95(){vfunc_called(this, "_ZN9S629C3_nt3v95Ev");}
S629C3_nt ::S629C3_nt(){ note_ctor("S629C3_nt", this);} // tgen

//skip512 S629C3_nt

#else // __cplusplus

extern void _ZN9S629C3_ntC1Ev();
extern void _ZN9S629C3_ntD1Ev();
Name_Map name_map_S629C3_nt[] = {
  NSPAIR(_ZN9S629C3_ntC1Ev),
  NSPAIR(_ZN9S629C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S629C5;
extern VTBL_ENTRY _ZTI6S629C5[];
extern  VTBL_ENTRY _ZTV6S629C5[];
extern Class_Descriptor cd_S629C4_nt;
extern VTBL_ENTRY _ZTI9S629C4_nt[];
extern  VTBL_ENTRY _ZTV9S629C4_nt[];
static Base_Class bases_S629C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S629C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S629C4_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 _ZTI9S629C3_nt[];
extern void _ZN9S629C3_ntD1Ev();
extern void _ZN9S629C3_ntD0Ev();
extern void _ZN6S629C52v5Ev();
extern void _ZN6S629C52v6Ev();
extern void _ZN6S629C52v7Ev();
extern void _ZN6S629C52v8Ev();
extern void _ZN6S629C52v9Ev();
extern void _ZN6S629C53v10Ev();
extern void _ZN6S629C53v11Ev();
extern void _ZN6S629C53v12Ev();
extern void _ZN6S629C53v13Ev();
extern void _ZN6S629C53v14Ev();
extern void _ZN6S629C53v15Ev();
extern void _ZN6S629C53v16Ev();
extern void _ZN6S629C53v17Ev();
extern void _ZN6S629C53v18Ev();
extern void _ZN6S629C53v19Ev();
extern void _ZN6S629C53v20Ev();
extern void _ZN6S629C53v21Ev();
extern void _ZN6S629C53v22Ev();
extern void _ZN6S629C53v23Ev();
extern void _ZN6S629C53v24Ev();
extern void _ZN6S629C53v25Ev();
extern void _ZN6S629C53v26Ev();
extern void _ZN6S629C53v27Ev();
extern void _ZN6S629C53v28Ev();
extern void _ZN6S629C53v29Ev();
extern void _ZN6S629C53v30Ev();
extern void _ZN6S629C53v31Ev();
extern void _ZN6S629C53v32Ev();
extern void _ZN6S629C53v33Ev();
extern void _ZN6S629C53v34Ev();
extern void _ZN6S629C53v35Ev();
extern void _ZN6S629C53v36Ev();
extern void _ZN6S629C53v37Ev();
extern void _ZN6S629C53v38Ev();
extern void _ZN6S629C53v39Ev();
extern void _ZN6S629C53v40Ev();
extern void _ZN6S629C53v41Ev();
extern void _ZN6S629C53v42Ev();
extern void _ZN6S629C53v43Ev();
extern void _ZN6S629C53v44Ev();
extern void _ZN6S629C53v45Ev();
extern void _ZN6S629C53v46Ev();
extern void _ZN6S629C53v47Ev();
extern void _ZN6S629C53v48Ev();
extern void _ZN6S629C53v49Ev();
extern void _ZN6S629C53v50Ev();
extern void _ZN6S629C53v51Ev();
extern void _ZN6S629C53v52Ev();
extern void _ZN6S629C53v53Ev();
extern void _ZN6S629C53v54Ev();
extern void _ZN6S629C53v55Ev();
extern void _ZN6S629C53v56Ev();
extern void _ZN6S629C53v57Ev();
extern void _ZN6S629C53v58Ev();
extern void _ZN6S629C53v59Ev();
extern void _ZN6S629C53v60Ev();
extern void _ZN6S629C53v61Ev();
extern void _ZN6S629C53v62Ev();
extern void _ZN6S629C53v63Ev();
extern void _ZN6S629C53v64Ev();
extern void _ZN6S629C53v65Ev();
extern void _ZN6S629C53v66Ev();
extern void _ZN6S629C53v67Ev();
extern void _ZN6S629C53v68Ev();
extern void _ZN9S629C4_nt3v69Ev();
extern void _ZN9S629C4_nt3v70Ev();
extern void _ZN9S629C4_nt3v71Ev();
extern void _ZN9S629C4_nt3v72Ev();
extern void _ZN9S629C4_nt3v73Ev();
extern void _ZN9S629C3_nt3v74Ev();
extern void _ZN9S629C3_nt3v75Ev();
extern void _ZN9S629C3_nt3v76Ev();
extern void _ZN9S629C3_nt3v77Ev();
extern void _ZN9S629C3_nt3v78Ev();
extern void _ZN9S629C3_nt3v79Ev();
extern void _ZN9S629C3_nt3v80Ev();
extern void _ZN9S629C3_nt3v81Ev();
extern void _ZN9S629C3_nt3v82Ev();
extern void _ZN9S629C3_nt3v83Ev();
extern void _ZN9S629C3_nt3v84Ev();
extern void _ZN9S629C3_nt3v85Ev();
extern void _ZN9S629C3_nt3v86Ev();
extern void _ZN9S629C3_nt3v87Ev();
extern void _ZN9S629C3_nt3v88Ev();
extern void _ZN9S629C3_nt3v89Ev();
extern void _ZN9S629C3_nt3v90Ev();
extern void _ZN9S629C3_nt3v91Ev();
extern void _ZN9S629C3_nt3v92Ev();
extern void _ZN9S629C3_nt3v93Ev();
extern void _ZN9S629C3_nt3v94Ev();
extern void _ZN9S629C3_nt3v95Ev();
static  VTBL_ENTRY vtc_S629C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S629C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S629C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S629C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S629C52v5Ev,
  (VTBL_ENTRY)&_ZN6S629C52v6Ev,
  (VTBL_ENTRY)&_ZN6S629C52v7Ev,
  (VTBL_ENTRY)&_ZN6S629C52v8Ev,
  (VTBL_ENTRY)&_ZN6S629C52v9Ev,
  (VTBL_ENTRY)&_ZN6S629C53v10Ev,
  (VTBL_ENTRY)&_ZN6S629C53v11Ev,
  (VTBL_ENTRY)&_ZN6S629C53v12Ev,
  (VTBL_ENTRY)&_ZN6S629C53v13Ev,
  (VTBL_ENTRY)&_ZN6S629C53v14Ev,
  (VTBL_ENTRY)&_ZN6S629C53v15Ev,
  (VTBL_ENTRY)&_ZN6S629C53v16Ev,
  (VTBL_ENTRY)&_ZN6S629C53v17Ev,
  (VTBL_ENTRY)&_ZN6S629C53v18Ev,
  (VTBL_ENTRY)&_ZN6S629C53v19Ev,
  (VTBL_ENTRY)&_ZN6S629C53v20Ev,
  (VTBL_ENTRY)&_ZN6S629C53v21Ev,
  (VTBL_ENTRY)&_ZN6S629C53v22Ev,
  (VTBL_ENTRY)&_ZN6S629C53v23Ev,
  (VTBL_ENTRY)&_ZN6S629C53v24Ev,
  (VTBL_ENTRY)&_ZN6S629C53v25Ev,
  (VTBL_ENTRY)&_ZN6S629C53v26Ev,
  (VTBL_ENTRY)&_ZN6S629C53v27Ev,
  (VTBL_ENTRY)&_ZN6S629C53v28Ev,
  (VTBL_ENTRY)&_ZN6S629C53v29Ev,
  (VTBL_ENTRY)&_ZN6S629C53v30Ev,
  (VTBL_ENTRY)&_ZN6S629C53v31Ev,
  (VTBL_ENTRY)&_ZN6S629C53v32Ev,
  (VTBL_ENTRY)&_ZN6S629C53v33Ev,
  (VTBL_ENTRY)&_ZN6S629C53v34Ev,
  (VTBL_ENTRY)&_ZN6S629C53v35Ev,
  (VTBL_ENTRY)&_ZN6S629C53v36Ev,
  (VTBL_ENTRY)&_ZN6S629C53v37Ev,
  (VTBL_ENTRY)&_ZN6S629C53v38Ev,
  (VTBL_ENTRY)&_ZN6S629C53v39Ev,
  (VTBL_ENTRY)&_ZN6S629C53v40Ev,
  (VTBL_ENTRY)&_ZN6S629C53v41Ev,
  (VTBL_ENTRY)&_ZN6S629C53v42Ev,
  (VTBL_ENTRY)&_ZN6S629C53v43Ev,
  (VTBL_ENTRY)&_ZN6S629C53v44Ev,
  (VTBL_ENTRY)&_ZN6S629C53v45Ev,
  (VTBL_ENTRY)&_ZN6S629C53v46Ev,
  (VTBL_ENTRY)&_ZN6S629C53v47Ev,
  (VTBL_ENTRY)&_ZN6S629C53v48Ev,
  (VTBL_ENTRY)&_ZN6S629C53v49Ev,
  (VTBL_ENTRY)&_ZN6S629C53v50Ev,
  (VTBL_ENTRY)&_ZN6S629C53v51Ev,
  (VTBL_ENTRY)&_ZN6S629C53v52Ev,
  (VTBL_ENTRY)&_ZN6S629C53v53Ev,
  (VTBL_ENTRY)&_ZN6S629C53v54Ev,
  (VTBL_ENTRY)&_ZN6S629C53v55Ev,
  (VTBL_ENTRY)&_ZN6S629C53v56Ev,
  (VTBL_ENTRY)&_ZN6S629C53v57Ev,
  (VTBL_ENTRY)&_ZN6S629C53v58Ev,
  (VTBL_ENTRY)&_ZN6S629C53v59Ev,
  (VTBL_ENTRY)&_ZN6S629C53v60Ev,
  (VTBL_ENTRY)&_ZN6S629C53v61Ev,
  (VTBL_ENTRY)&_ZN6S629C53v62Ev,
  (VTBL_ENTRY)&_ZN6S629C53v63Ev,
  (VTBL_ENTRY)&_ZN6S629C53v64Ev,
  (VTBL_ENTRY)&_ZN6S629C53v65Ev,
  (VTBL_ENTRY)&_ZN6S629C53v66Ev,
  (VTBL_ENTRY)&_ZN6S629C53v67Ev,
  (VTBL_ENTRY)&_ZN6S629C53v68Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v95Ev,
};
extern VTBL_ENTRY _ZTI9S629C3_nt[];
VTBL_ENTRY *P__ZTI9S629C3_nt = _ZTI9S629C3_nt; 
extern  VTBL_ENTRY _ZTV9S629C3_nt[];
Class_Descriptor cd_S629C3_nt = {  "S629C3_nt", // class name
  bases_S629C3_nt, 2,
  &(vtc_S629C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI9S629C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S629C3_nt),95, //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  S629C8_nt  {
  void  mf629c8(); // _ZN9S629C8_nt7mf629c8Ev
};
//SIG(-1 S629C8_nt) C1{ m}


void  S629C8_nt ::mf629c8(){}

//skip512 S629C8_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S629C8_nt[];
VTBL_ENTRY *P__ZTI9S629C8_nt = _ZTI9S629C8_nt; 
Class_Descriptor cd_S629C8_nt = {  "S629C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI9S629C8_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  S629C11_nt  {
  ::S1503C14_nt s629c11f0;
  ::S1503C14_nt s629c11f1;
  int s629c11f2;
  void  mf629c11(); // _ZN10S629C11_nt8mf629c11Ev
};
//SIG(-1 S629C11_nt) C1{ m FC2{ m Fi[3]} FC2 Fi}


void  S629C11_nt ::mf629c11(){}

//skip512 S629C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S629C14  {
  void  mf629c14(); // _ZN7S629C148mf629c14Ev
};
//SIG(-1 S629C14) C1{ m}


void  S629C14 ::mf629c14(){}

static void Test_S629C14()
{
  {
    init_simple_test("S629C14");
    S629C14 lv;
    check2(sizeof(lv), 1, "sizeof(S629C14)");
    check2(__alignof__(lv), 1, "__alignof__(S629C14)");
  }
}
static Arrange_To_Call_Me vS629C14(Test_S629C14, "S629C14", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S629C14[];
VTBL_ENTRY *P__ZTI7S629C14 = _ZTI7S629C14; 
Class_Descriptor cd_S629C14 = {  "S629C14", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI7S629C14),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  S629C17_nt  {
  int s629c17f0[3];
  void  mf629c17(); // _ZN10S629C17_nt8mf629c17Ev
};
//SIG(-1 S629C17_nt) C1{ m Fi[3]}


void  S629C17_nt ::mf629c17(){}

//skip512 S629C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S629C2_nt  : S629C3_nt {
  void *s629c2f0;
  ::S1503C9_nt s629c2f1;
  int s629c2f2;
  ::S629C8_nt s629c2f3;
  int s629c2f4;
  ::S1503C29 s629c2f5;
  int s629c2f6;
  void *s629c2f7[2];
  ::S629C11_nt s629c2f8;
  void *s629c2f9;
  int s629c2f10[2];
  char s629c2f11[3];
  int s629c2f12;
  unsigned int s629c2f13:1;
  unsigned int s629c2f14:1;
  unsigned int s629c2f15:1;
  unsigned int s629c2f16:1;
  unsigned int s629c2f17:1;
  unsigned int s629c2f18:1;
  unsigned int s629c2f19:1;
  unsigned int s629c2f20:1;
  unsigned int s629c2f21:1;
  unsigned int s629c2f22:1;
  unsigned int s629c2f23:1;
  unsigned int s629c2f24:1;
  unsigned int s629c2f25:1;
  unsigned int s629c2f26:1;
  int s629c2f27;
  unsigned int s629c2f28:1;
  unsigned int s629c2f29:1;
  unsigned int s629c2f30:1;
  unsigned int s629c2f31:1;
  unsigned int s629c2f32:1;
  unsigned int s629c2f33:1;
  ::S629C8_nt s629c2f34;
  unsigned int s629c2f35:1;
  unsigned int s629c2f36:1;
  unsigned int s629c2f37:1;
  unsigned int s629c2f38:1;
  unsigned int s629c2f39:1;
  unsigned int s629c2f40:1;
  unsigned int s629c2f41:1;
  char s629c2f42;
  ::S629C14 s629c2f43;
  unsigned int s629c2f44:1;
  unsigned int s629c2f45:1;
  unsigned int s629c2f46:1;
  unsigned int s629c2f47:1;
  unsigned int s629c2f48:1;
  unsigned int s629c2f49:1;
  unsigned int s629c2f50:1;
  unsigned int s629c2f51:1;
  unsigned int s629c2f52:1;
  unsigned int s629c2f53:1;
  unsigned int s629c2f54:1;
  unsigned int s629c2f55:1;
  ::S1503C28 s629c2f56;
  void *s629c2f57[2];
  char s629c2f58;
  ::S629C8_nt s629c2f59;
  ::S1503C14_nt s629c2f60;
  ::S629C17_nt s629c2f61;
  int s629c2f62;
  ::S1503C14_nt s629c2f63;
  unsigned int s629c2f64:1;
  unsigned int s629c2f65:1;
  unsigned int s629c2f66:1;
  int s629c2f67[3];
  virtual  ~S629C2_nt(); // _ZN9S629C2_ntD1Ev
  virtual void  v96(); // _ZN9S629C2_nt3v96Ev
  virtual void  v97(); // _ZN9S629C2_nt3v97Ev
  virtual void  v98(); // _ZN9S629C2_nt3v98Ev
  virtual void  v99(); // _ZN9S629C2_nt3v99Ev
  virtual void  v100(); // _ZN9S629C2_nt4v100Ev
  virtual void  v101(); // _ZN9S629C2_nt4v101Ev
  virtual void  v102(); // _ZN9S629C2_nt4v102Ev
  virtual void  v103(); // _ZN9S629C2_nt4v103Ev
  virtual void  v104(); // _ZN9S629C2_nt4v104Ev
  virtual void  v105(); // _ZN9S629C2_nt4v105Ev
  virtual void  v106(); // _ZN9S629C2_nt4v106Ev
  virtual void  v107(); // _ZN9S629C2_nt4v107Ev
  virtual void  v108(); // _ZN9S629C2_nt4v108Ev
  virtual void  v109(); // _ZN9S629C2_nt4v109Ev
  virtual void  v110(); // _ZN9S629C2_nt4v110Ev
  virtual void  v111(); // _ZN9S629C2_nt4v111Ev
  virtual void  v112(); // _ZN9S629C2_nt4v112Ev
  virtual void  v113(); // _ZN9S629C2_nt4v113Ev
  virtual void  v114(); // _ZN9S629C2_nt4v114Ev
  virtual void  v115(); // _ZN9S629C2_nt4v115Ev
  virtual void  v116(); // _ZN9S629C2_nt4v116Ev
  virtual void  v117(); // _ZN9S629C2_nt4v117Ev
  virtual void  v118(); // _ZN9S629C2_nt4v118Ev
  virtual void  v119(); // _ZN9S629C2_nt4v119Ev
  virtual void  v120(); // _ZN9S629C2_nt4v120Ev
  virtual void  v121(); // _ZN9S629C2_nt4v121Ev
  virtual void  v122(); // _ZN9S629C2_nt4v122Ev
  virtual void  v123(); // _ZN9S629C2_nt4v123Ev
  virtual void  v124(); // _ZN9S629C2_nt4v124Ev
  virtual void  v125(); // _ZN9S629C2_nt4v125Ev
  virtual void  v126(); // _ZN9S629C2_nt4v126Ev
  virtual void  v127(); // _ZN9S629C2_nt4v127Ev
  virtual void  v128(); // _ZN9S629C2_nt4v128Ev
  virtual void  v129(); // _ZN9S629C2_nt4v129Ev
  virtual void  v130(); // _ZN9S629C2_nt4v130Ev
  virtual void  v131(); // _ZN9S629C2_nt4v131Ev
  virtual void  v132(); // _ZN9S629C2_nt4v132Ev
  virtual void  v133(); // _ZN9S629C2_nt4v133Ev
  virtual void  v134(); // _ZN9S629C2_nt4v134Ev
  virtual void  v135(); // _ZN9S629C2_nt4v135Ev
  virtual void  v136(); // _ZN9S629C2_nt4v136Ev
  virtual void  v137(); // _ZN9S629C2_nt4v137Ev
  virtual void  v138(); // _ZN9S629C2_nt4v138Ev
  virtual void  v139(); // _ZN9S629C2_nt4v139Ev
  virtual void  v140(); // _ZN9S629C2_nt4v140Ev
  virtual void  v141(); // _ZN9S629C2_nt4v141Ev
  virtual void  v142(); // _ZN9S629C2_nt4v142Ev
  virtual void  v143(); // _ZN9S629C2_nt4v143Ev
  virtual void  v144(); // _ZN9S629C2_nt4v144Ev
  virtual void  v145(); // _ZN9S629C2_nt4v145Ev
  virtual void  v146(); // _ZN9S629C2_nt4v146Ev
  virtual void  v147(); // _ZN9S629C2_nt4v147Ev
  virtual void  v148(); // _ZN9S629C2_nt4v148Ev
  virtual void  v149(); // _ZN9S629C2_nt4v149Ev
  virtual void  v150(); // _ZN9S629C2_nt4v150Ev
  virtual void  v151(); // _ZN9S629C2_nt4v151Ev
  virtual void  v152(); // _ZN9S629C2_nt4v152Ev
  virtual void  v153(); // _ZN9S629C2_nt4v153Ev
  virtual void  v154(); // _ZN9S629C2_nt4v154Ev
  virtual void  v155(); // _ZN9S629C2_nt4v155Ev
  virtual void  v156(); // _ZN9S629C2_nt4v156Ev
  S629C2_nt(); // tgen
};
//SIG(-1 S629C2_nt) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v126 v127 v128 v129 v130 Fp FC5} vd v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc} 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 Fp FC6{ m Fi} Fi FC7{ m} Fi FC8{ BC9{ m Fp Fi[2]}} Fi Fp[2] FC10{ m FC11{ m Fi[3]} FC11 Fi} Fp Fi[2] Fc[3] Fi 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 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fc FC12{ m} Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC13{ BC8} Fp[2] Fc FC7 FC11 FC14{ m Fi[3]} Fi FC11 Fi:1 Fi:1 Fi:1 Fi[3]}


 S629C2_nt ::~S629C2_nt(){ note_dtor("S629C2_nt", this);}
void  S629C2_nt ::v96(){vfunc_called(this, "_ZN9S629C2_nt3v96Ev");}
void  S629C2_nt ::v97(){vfunc_called(this, "_ZN9S629C2_nt3v97Ev");}
void  S629C2_nt ::v98(){vfunc_called(this, "_ZN9S629C2_nt3v98Ev");}
void  S629C2_nt ::v99(){vfunc_called(this, "_ZN9S629C2_nt3v99Ev");}
void  S629C2_nt ::v100(){vfunc_called(this, "_ZN9S629C2_nt4v100Ev");}
void  S629C2_nt ::v101(){vfunc_called(this, "_ZN9S629C2_nt4v101Ev");}
void  S629C2_nt ::v102(){vfunc_called(this, "_ZN9S629C2_nt4v102Ev");}
void  S629C2_nt ::v103(){vfunc_called(this, "_ZN9S629C2_nt4v103Ev");}
void  S629C2_nt ::v104(){vfunc_called(this, "_ZN9S629C2_nt4v104Ev");}
void  S629C2_nt ::v105(){vfunc_called(this, "_ZN9S629C2_nt4v105Ev");}
void  S629C2_nt ::v106(){vfunc_called(this, "_ZN9S629C2_nt4v106Ev");}
void  S629C2_nt ::v107(){vfunc_called(this, "_ZN9S629C2_nt4v107Ev");}
void  S629C2_nt ::v108(){vfunc_called(this, "_ZN9S629C2_nt4v108Ev");}
void  S629C2_nt ::v109(){vfunc_called(this, "_ZN9S629C2_nt4v109Ev");}
void  S629C2_nt ::v110(){vfunc_called(this, "_ZN9S629C2_nt4v110Ev");}
void  S629C2_nt ::v111(){vfunc_called(this, "_ZN9S629C2_nt4v111Ev");}
void  S629C2_nt ::v112(){vfunc_called(this, "_ZN9S629C2_nt4v112Ev");}
void  S629C2_nt ::v113(){vfunc_called(this, "_ZN9S629C2_nt4v113Ev");}
void  S629C2_nt ::v114(){vfunc_called(this, "_ZN9S629C2_nt4v114Ev");}
void  S629C2_nt ::v115(){vfunc_called(this, "_ZN9S629C2_nt4v115Ev");}
void  S629C2_nt ::v116(){vfunc_called(this, "_ZN9S629C2_nt4v116Ev");}
void  S629C2_nt ::v117(){vfunc_called(this, "_ZN9S629C2_nt4v117Ev");}
void  S629C2_nt ::v118(){vfunc_called(this, "_ZN9S629C2_nt4v118Ev");}
void  S629C2_nt ::v119(){vfunc_called(this, "_ZN9S629C2_nt4v119Ev");}
void  S629C2_nt ::v120(){vfunc_called(this, "_ZN9S629C2_nt4v120Ev");}
void  S629C2_nt ::v121(){vfunc_called(this, "_ZN9S629C2_nt4v121Ev");}
void  S629C2_nt ::v122(){vfunc_called(this, "_ZN9S629C2_nt4v122Ev");}
void  S629C2_nt ::v123(){vfunc_called(this, "_ZN9S629C2_nt4v123Ev");}
void  S629C2_nt ::v124(){vfunc_called(this, "_ZN9S629C2_nt4v124Ev");}
void  S629C2_nt ::v125(){vfunc_called(this, "_ZN9S629C2_nt4v125Ev");}
void  S629C2_nt ::v126(){vfunc_called(this, "_ZN9S629C2_nt4v126Ev");}
void  S629C2_nt ::v127(){vfunc_called(this, "_ZN9S629C2_nt4v127Ev");}
void  S629C2_nt ::v128(){vfunc_called(this, "_ZN9S629C2_nt4v128Ev");}
void  S629C2_nt ::v129(){vfunc_called(this, "_ZN9S629C2_nt4v129Ev");}
void  S629C2_nt ::v130(){vfunc_called(this, "_ZN9S629C2_nt4v130Ev");}
void  S629C2_nt ::v131(){vfunc_called(this, "_ZN9S629C2_nt4v131Ev");}
void  S629C2_nt ::v132(){vfunc_called(this, "_ZN9S629C2_nt4v132Ev");}
void  S629C2_nt ::v133(){vfunc_called(this, "_ZN9S629C2_nt4v133Ev");}
void  S629C2_nt ::v134(){vfunc_called(this, "_ZN9S629C2_nt4v134Ev");}
void  S629C2_nt ::v135(){vfunc_called(this, "_ZN9S629C2_nt4v135Ev");}
void  S629C2_nt ::v136(){vfunc_called(this, "_ZN9S629C2_nt4v136Ev");}
void  S629C2_nt ::v137(){vfunc_called(this, "_ZN9S629C2_nt4v137Ev");}
void  S629C2_nt ::v138(){vfunc_called(this, "_ZN9S629C2_nt4v138Ev");}
void  S629C2_nt ::v139(){vfunc_called(this, "_ZN9S629C2_nt4v139Ev");}
void  S629C2_nt ::v140(){vfunc_called(this, "_ZN9S629C2_nt4v140Ev");}
void  S629C2_nt ::v141(){vfunc_called(this, "_ZN9S629C2_nt4v141Ev");}
void  S629C2_nt ::v142(){vfunc_called(this, "_ZN9S629C2_nt4v142Ev");}
void  S629C2_nt ::v143(){vfunc_called(this, "_ZN9S629C2_nt4v143Ev");}
void  S629C2_nt ::v144(){vfunc_called(this, "_ZN9S629C2_nt4v144Ev");}
void  S629C2_nt ::v145(){vfunc_called(this, "_ZN9S629C2_nt4v145Ev");}
void  S629C2_nt ::v146(){vfunc_called(this, "_ZN9S629C2_nt4v146Ev");}
void  S629C2_nt ::v147(){vfunc_called(this, "_ZN9S629C2_nt4v147Ev");}
void  S629C2_nt ::v148(){vfunc_called(this, "_ZN9S629C2_nt4v148Ev");}
void  S629C2_nt ::v149(){vfunc_called(this, "_ZN9S629C2_nt4v149Ev");}
void  S629C2_nt ::v150(){vfunc_called(this, "_ZN9S629C2_nt4v150Ev");}
void  S629C2_nt ::v151(){vfunc_called(this, "_ZN9S629C2_nt4v151Ev");}
void  S629C2_nt ::v152(){vfunc_called(this, "_ZN9S629C2_nt4v152Ev");}
void  S629C2_nt ::v153(){vfunc_called(this, "_ZN9S629C2_nt4v153Ev");}
void  S629C2_nt ::v154(){vfunc_called(this, "_ZN9S629C2_nt4v154Ev");}
void  S629C2_nt ::v155(){vfunc_called(this, "_ZN9S629C2_nt4v155Ev");}
void  S629C2_nt ::v156(){vfunc_called(this, "_ZN9S629C2_nt4v156Ev");}
S629C2_nt ::S629C2_nt(){ note_ctor("S629C2_nt", this);} // tgen

//skip512 S629C2_nt

#else // __cplusplus

extern void _ZN9S629C2_ntC1Ev();
extern void _ZN9S629C2_ntD1Ev();
Name_Map name_map_S629C2_nt[] = {
  NSPAIR(_ZN9S629C2_ntC1Ev),
  NSPAIR(_ZN9S629C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S629C5;
extern VTBL_ENTRY _ZTI6S629C5[];
extern  VTBL_ENTRY _ZTV6S629C5[];
extern Class_Descriptor cd_S629C4_nt;
extern VTBL_ENTRY _ZTI9S629C4_nt[];
extern  VTBL_ENTRY _ZTV9S629C4_nt[];
extern Class_Descriptor cd_S629C3_nt;
extern VTBL_ENTRY _ZTI9S629C3_nt[];
extern  VTBL_ENTRY _ZTV9S629C3_nt[];
static Base_Class bases_S629C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S629C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S629C4_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_S629C3_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 _ZTI9S629C2_nt[];
extern void _ZN9S629C2_ntD1Ev();
extern void _ZN9S629C2_ntD0Ev();
extern void _ZN6S629C52v5Ev();
extern void _ZN6S629C52v6Ev();
extern void _ZN6S629C52v7Ev();
extern void _ZN6S629C52v8Ev();
extern void _ZN6S629C52v9Ev();
extern void _ZN6S629C53v10Ev();
extern void _ZN6S629C53v11Ev();
extern void _ZN6S629C53v12Ev();
extern void _ZN6S629C53v13Ev();
extern void _ZN6S629C53v14Ev();
extern void _ZN6S629C53v15Ev();
extern void _ZN6S629C53v16Ev();
extern void _ZN6S629C53v17Ev();
extern void _ZN6S629C53v18Ev();
extern void _ZN6S629C53v19Ev();
extern void _ZN6S629C53v20Ev();
extern void _ZN6S629C53v21Ev();
extern void _ZN6S629C53v22Ev();
extern void _ZN6S629C53v23Ev();
extern void _ZN6S629C53v24Ev();
extern void _ZN6S629C53v25Ev();
extern void _ZN6S629C53v26Ev();
extern void _ZN6S629C53v27Ev();
extern void _ZN6S629C53v28Ev();
extern void _ZN6S629C53v29Ev();
extern void _ZN6S629C53v30Ev();
extern void _ZN6S629C53v31Ev();
extern void _ZN6S629C53v32Ev();
extern void _ZN6S629C53v33Ev();
extern void _ZN6S629C53v34Ev();
extern void _ZN6S629C53v35Ev();
extern void _ZN6S629C53v36Ev();
extern void _ZN6S629C53v37Ev();
extern void _ZN6S629C53v38Ev();
extern void _ZN6S629C53v39Ev();
extern void _ZN6S629C53v40Ev();
extern void _ZN6S629C53v41Ev();
extern void _ZN6S629C53v42Ev();
extern void _ZN6S629C53v43Ev();
extern void _ZN6S629C53v44Ev();
extern void _ZN6S629C53v45Ev();
extern void _ZN6S629C53v46Ev();
extern void _ZN6S629C53v47Ev();
extern void _ZN6S629C53v48Ev();
extern void _ZN6S629C53v49Ev();
extern void _ZN6S629C53v50Ev();
extern void _ZN6S629C53v51Ev();
extern void _ZN6S629C53v52Ev();
extern void _ZN6S629C53v53Ev();
extern void _ZN6S629C53v54Ev();
extern void _ZN6S629C53v55Ev();
extern void _ZN6S629C53v56Ev();
extern void _ZN6S629C53v57Ev();
extern void _ZN6S629C53v58Ev();
extern void _ZN6S629C53v59Ev();
extern void _ZN6S629C53v60Ev();
extern void _ZN6S629C53v61Ev();
extern void _ZN6S629C53v62Ev();
extern void _ZN6S629C53v63Ev();
extern void _ZN6S629C53v64Ev();
extern void _ZN6S629C53v65Ev();
extern void _ZN6S629C53v66Ev();
extern void _ZN6S629C53v67Ev();
extern void _ZN6S629C53v68Ev();
extern void _ZN9S629C4_nt3v69Ev();
extern void _ZN9S629C4_nt3v70Ev();
extern void _ZN9S629C4_nt3v71Ev();
extern void _ZN9S629C4_nt3v72Ev();
extern void _ZN9S629C4_nt3v73Ev();
extern void _ZN9S629C3_nt3v74Ev();
extern void _ZN9S629C3_nt3v75Ev();
extern void _ZN9S629C3_nt3v76Ev();
extern void _ZN9S629C3_nt3v77Ev();
extern void _ZN9S629C3_nt3v78Ev();
extern void _ZN9S629C3_nt3v79Ev();
extern void _ZN9S629C3_nt3v80Ev();
extern void _ZN9S629C3_nt3v81Ev();
extern void _ZN9S629C3_nt3v82Ev();
extern void _ZN9S629C3_nt3v83Ev();
extern void _ZN9S629C3_nt3v84Ev();
extern void _ZN9S629C3_nt3v85Ev();
extern void _ZN9S629C3_nt3v86Ev();
extern void _ZN9S629C3_nt3v87Ev();
extern void _ZN9S629C3_nt3v88Ev();
extern void _ZN9S629C3_nt3v89Ev();
extern void _ZN9S629C3_nt3v90Ev();
extern void _ZN9S629C3_nt3v91Ev();
extern void _ZN9S629C3_nt3v92Ev();
extern void _ZN9S629C3_nt3v93Ev();
extern void _ZN9S629C3_nt3v94Ev();
extern void _ZN9S629C3_nt3v95Ev();
extern void _ZN9S629C2_nt3v96Ev();
extern void _ZN9S629C2_nt3v97Ev();
extern void _ZN9S629C2_nt3v98Ev();
extern void _ZN9S629C2_nt3v99Ev();
extern void _ZN9S629C2_nt4v100Ev();
extern void _ZN9S629C2_nt4v101Ev();
extern void _ZN9S629C2_nt4v102Ev();
extern void _ZN9S629C2_nt4v103Ev();
extern void _ZN9S629C2_nt4v104Ev();
extern void _ZN9S629C2_nt4v105Ev();
extern void _ZN9S629C2_nt4v106Ev();
extern void _ZN9S629C2_nt4v107Ev();
extern void _ZN9S629C2_nt4v108Ev();
extern void _ZN9S629C2_nt4v109Ev();
extern void _ZN9S629C2_nt4v110Ev();
extern void _ZN9S629C2_nt4v111Ev();
extern void _ZN9S629C2_nt4v112Ev();
extern void _ZN9S629C2_nt4v113Ev();
extern void _ZN9S629C2_nt4v114Ev();
extern void _ZN9S629C2_nt4v115Ev();
extern void _ZN9S629C2_nt4v116Ev();
extern void _ZN9S629C2_nt4v117Ev();
extern void _ZN9S629C2_nt4v118Ev();
extern void _ZN9S629C2_nt4v119Ev();
extern void _ZN9S629C2_nt4v120Ev();
extern void _ZN9S629C2_nt4v121Ev();
extern void _ZN9S629C2_nt4v122Ev();
extern void _ZN9S629C2_nt4v123Ev();
extern void _ZN9S629C2_nt4v124Ev();
extern void _ZN9S629C2_nt4v125Ev();
extern void _ZN9S629C2_nt4v126Ev();
extern void _ZN9S629C2_nt4v127Ev();
extern void _ZN9S629C2_nt4v128Ev();
extern void _ZN9S629C2_nt4v129Ev();
extern void _ZN9S629C2_nt4v130Ev();
extern void _ZN9S629C2_nt4v131Ev();
extern void _ZN9S629C2_nt4v132Ev();
extern void _ZN9S629C2_nt4v133Ev();
extern void _ZN9S629C2_nt4v134Ev();
extern void _ZN9S629C2_nt4v135Ev();
extern void _ZN9S629C2_nt4v136Ev();
extern void _ZN9S629C2_nt4v137Ev();
extern void _ZN9S629C2_nt4v138Ev();
extern void _ZN9S629C2_nt4v139Ev();
extern void _ZN9S629C2_nt4v140Ev();
extern void _ZN9S629C2_nt4v141Ev();
extern void _ZN9S629C2_nt4v142Ev();
extern void _ZN9S629C2_nt4v143Ev();
extern void _ZN9S629C2_nt4v144Ev();
extern void _ZN9S629C2_nt4v145Ev();
extern void _ZN9S629C2_nt4v146Ev();
extern void _ZN9S629C2_nt4v147Ev();
extern void _ZN9S629C2_nt4v148Ev();
extern void _ZN9S629C2_nt4v149Ev();
extern void _ZN9S629C2_nt4v150Ev();
extern void _ZN9S629C2_nt4v151Ev();
extern void _ZN9S629C2_nt4v152Ev();
extern void _ZN9S629C2_nt4v153Ev();
extern void _ZN9S629C2_nt4v154Ev();
extern void _ZN9S629C2_nt4v155Ev();
extern void _ZN9S629C2_nt4v156Ev();
static  VTBL_ENTRY vtc_S629C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S629C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S629C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S629C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S629C52v5Ev,
  (VTBL_ENTRY)&_ZN6S629C52v6Ev,
  (VTBL_ENTRY)&_ZN6S629C52v7Ev,
  (VTBL_ENTRY)&_ZN6S629C52v8Ev,
  (VTBL_ENTRY)&_ZN6S629C52v9Ev,
  (VTBL_ENTRY)&_ZN6S629C53v10Ev,
  (VTBL_ENTRY)&_ZN6S629C53v11Ev,
  (VTBL_ENTRY)&_ZN6S629C53v12Ev,
  (VTBL_ENTRY)&_ZN6S629C53v13Ev,
  (VTBL_ENTRY)&_ZN6S629C53v14Ev,
  (VTBL_ENTRY)&_ZN6S629C53v15Ev,
  (VTBL_ENTRY)&_ZN6S629C53v16Ev,
  (VTBL_ENTRY)&_ZN6S629C53v17Ev,
  (VTBL_ENTRY)&_ZN6S629C53v18Ev,
  (VTBL_ENTRY)&_ZN6S629C53v19Ev,
  (VTBL_ENTRY)&_ZN6S629C53v20Ev,
  (VTBL_ENTRY)&_ZN6S629C53v21Ev,
  (VTBL_ENTRY)&_ZN6S629C53v22Ev,
  (VTBL_ENTRY)&_ZN6S629C53v23Ev,
  (VTBL_ENTRY)&_ZN6S629C53v24Ev,
  (VTBL_ENTRY)&_ZN6S629C53v25Ev,
  (VTBL_ENTRY)&_ZN6S629C53v26Ev,
  (VTBL_ENTRY)&_ZN6S629C53v27Ev,
  (VTBL_ENTRY)&_ZN6S629C53v28Ev,
  (VTBL_ENTRY)&_ZN6S629C53v29Ev,
  (VTBL_ENTRY)&_ZN6S629C53v30Ev,
  (VTBL_ENTRY)&_ZN6S629C53v31Ev,
  (VTBL_ENTRY)&_ZN6S629C53v32Ev,
  (VTBL_ENTRY)&_ZN6S629C53v33Ev,
  (VTBL_ENTRY)&_ZN6S629C53v34Ev,
  (VTBL_ENTRY)&_ZN6S629C53v35Ev,
  (VTBL_ENTRY)&_ZN6S629C53v36Ev,
  (VTBL_ENTRY)&_ZN6S629C53v37Ev,
  (VTBL_ENTRY)&_ZN6S629C53v38Ev,
  (VTBL_ENTRY)&_ZN6S629C53v39Ev,
  (VTBL_ENTRY)&_ZN6S629C53v40Ev,
  (VTBL_ENTRY)&_ZN6S629C53v41Ev,
  (VTBL_ENTRY)&_ZN6S629C53v42Ev,
  (VTBL_ENTRY)&_ZN6S629C53v43Ev,
  (VTBL_ENTRY)&_ZN6S629C53v44Ev,
  (VTBL_ENTRY)&_ZN6S629C53v45Ev,
  (VTBL_ENTRY)&_ZN6S629C53v46Ev,
  (VTBL_ENTRY)&_ZN6S629C53v47Ev,
  (VTBL_ENTRY)&_ZN6S629C53v48Ev,
  (VTBL_ENTRY)&_ZN6S629C53v49Ev,
  (VTBL_ENTRY)&_ZN6S629C53v50Ev,
  (VTBL_ENTRY)&_ZN6S629C53v51Ev,
  (VTBL_ENTRY)&_ZN6S629C53v52Ev,
  (VTBL_ENTRY)&_ZN6S629C53v53Ev,
  (VTBL_ENTRY)&_ZN6S629C53v54Ev,
  (VTBL_ENTRY)&_ZN6S629C53v55Ev,
  (VTBL_ENTRY)&_ZN6S629C53v56Ev,
  (VTBL_ENTRY)&_ZN6S629C53v57Ev,
  (VTBL_ENTRY)&_ZN6S629C53v58Ev,
  (VTBL_ENTRY)&_ZN6S629C53v59Ev,
  (VTBL_ENTRY)&_ZN6S629C53v60Ev,
  (VTBL_ENTRY)&_ZN6S629C53v61Ev,
  (VTBL_ENTRY)&_ZN6S629C53v62Ev,
  (VTBL_ENTRY)&_ZN6S629C53v63Ev,
  (VTBL_ENTRY)&_ZN6S629C53v64Ev,
  (VTBL_ENTRY)&_ZN6S629C53v65Ev,
  (VTBL_ENTRY)&_ZN6S629C53v66Ev,
  (VTBL_ENTRY)&_ZN6S629C53v67Ev,
  (VTBL_ENTRY)&_ZN6S629C53v68Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v156Ev,
};
extern VTBL_ENTRY _ZTI9S629C2_nt[];
VTBL_ENTRY *P__ZTI9S629C2_nt = _ZTI9S629C2_nt; 
extern  VTBL_ENTRY _ZTV9S629C2_nt[];
Class_Descriptor cd_S629C2_nt = {  "S629C2_nt", // class name
  bases_S629C2_nt, 3,
  &(vtc_S629C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,272), // object size
  NSPAIRA(_ZTI9S629C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S629C2_nt),156, //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  S629C1  : S629C2_nt {
  void *s629c1f0;
  int s629c1f1[2];
  virtual  ~S629C1(); // _ZN6S629C1D1Ev
  virtual void  v1(); // _ZN6S629C12v1Ev
  virtual void  v2(); // _ZN6S629C12v2Ev
  virtual void  v3(); // _ZN6S629C12v3Ev
  virtual void  v4(); // _ZN6S629C12v4Ev
  S629C1(); // tgen
};
//SIG(1 S629C1) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 Fp FC6} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 Fp[2] Fi:1 Fi:1 Fi:1 Fi:1 Fc} vd 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 Fp FC7{ m Fi} Fi FC8{ m} Fi FC9{ BC10{ m Fp Fi[2]}} Fi Fp[2] FC11{ m FC12{ m Fi[3]} FC12 Fi} Fp Fi[2] Fc[3] Fi 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 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fc FC13{ m} Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC14{ BC9} Fp[2] Fc FC8 FC12 FC15{ m Fi[3]} Fi FC12 Fi:1 Fi:1 Fi:1 Fi[3]} vd v1 v2 v3 v4 Fp Fi[2]}


 S629C1 ::~S629C1(){ note_dtor("S629C1", this);}
void  S629C1 ::v1(){vfunc_called(this, "_ZN6S629C12v1Ev");}
void  S629C1 ::v2(){vfunc_called(this, "_ZN6S629C12v2Ev");}
void  S629C1 ::v3(){vfunc_called(this, "_ZN6S629C12v3Ev");}
void  S629C1 ::v4(){vfunc_called(this, "_ZN6S629C12v4Ev");}
S629C1 ::S629C1(){ note_ctor("S629C1", this);} // tgen

static void Test_S629C1()
{
  extern Class_Descriptor cd_S629C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,72)];
    init_test(&cd_S629C1, buf);
    S629C1 *dp, &lv = *(dp=new (buf) S629C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,284), "sizeof(S629C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S629C1)");
    check_base_class_offset(lv, (S629C5*)(S629C4_nt*)(S629C3_nt*)(S629C2_nt*), 0, "S629C1");
    check_base_class_offset(lv, (S629C4_nt*)(S629C3_nt*)(S629C2_nt*), 0, "S629C1");
    check_base_class_offset(lv, (S629C3_nt*)(S629C2_nt*), 0, "S629C1");
    check_base_class_offset(lv, (S629C2_nt*), 0, "S629C1");
    check_field_offset(lv, s629c1f0, ABISELECT(368,272), "S629C1.s629c1f0");
    check_field_offset(lv, s629c1f1, ABISELECT(376,276), "S629C1.s629c1f1");
    test_class_info(&lv, &cd_S629C1);
    dp->~S629C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS629C1(Test_S629C1, "S629C1", ABISELECT(384,284));

#else // __cplusplus

extern void _ZN6S629C1C1Ev();
extern void _ZN6S629C1D1Ev();
Name_Map name_map_S629C1[] = {
  NSPAIR(_ZN6S629C1C1Ev),
  NSPAIR(_ZN6S629C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S629C5;
extern VTBL_ENTRY _ZTI6S629C5[];
extern  VTBL_ENTRY _ZTV6S629C5[];
extern Class_Descriptor cd_S629C4_nt;
extern VTBL_ENTRY _ZTI9S629C4_nt[];
extern  VTBL_ENTRY _ZTV9S629C4_nt[];
extern Class_Descriptor cd_S629C3_nt;
extern VTBL_ENTRY _ZTI9S629C3_nt[];
extern  VTBL_ENTRY _ZTV9S629C3_nt[];
extern Class_Descriptor cd_S629C2_nt;
extern VTBL_ENTRY _ZTI9S629C2_nt[];
extern  VTBL_ENTRY _ZTV9S629C2_nt[];
static Base_Class bases_S629C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S629C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S629C4_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_S629C3_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
    3, //immediately_derived
  0, 0},
  {&cd_S629C2_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 _ZTI6S629C1[];
extern void _ZN6S629C1D1Ev();
extern void _ZN6S629C1D0Ev();
extern void _ZN6S629C52v5Ev();
extern void _ZN6S629C52v6Ev();
extern void _ZN6S629C52v7Ev();
extern void _ZN6S629C52v8Ev();
extern void _ZN6S629C52v9Ev();
extern void _ZN6S629C53v10Ev();
extern void _ZN6S629C53v11Ev();
extern void _ZN6S629C53v12Ev();
extern void _ZN6S629C53v13Ev();
extern void _ZN6S629C53v14Ev();
extern void _ZN6S629C53v15Ev();
extern void _ZN6S629C53v16Ev();
extern void _ZN6S629C53v17Ev();
extern void _ZN6S629C53v18Ev();
extern void _ZN6S629C53v19Ev();
extern void _ZN6S629C53v20Ev();
extern void _ZN6S629C53v21Ev();
extern void _ZN6S629C53v22Ev();
extern void _ZN6S629C53v23Ev();
extern void _ZN6S629C53v24Ev();
extern void _ZN6S629C53v25Ev();
extern void _ZN6S629C53v26Ev();
extern void _ZN6S629C53v27Ev();
extern void _ZN6S629C53v28Ev();
extern void _ZN6S629C53v29Ev();
extern void _ZN6S629C53v30Ev();
extern void _ZN6S629C53v31Ev();
extern void _ZN6S629C53v32Ev();
extern void _ZN6S629C53v33Ev();
extern void _ZN6S629C53v34Ev();
extern void _ZN6S629C53v35Ev();
extern void _ZN6S629C53v36Ev();
extern void _ZN6S629C53v37Ev();
extern void _ZN6S629C53v38Ev();
extern void _ZN6S629C53v39Ev();
extern void _ZN6S629C53v40Ev();
extern void _ZN6S629C53v41Ev();
extern void _ZN6S629C53v42Ev();
extern void _ZN6S629C53v43Ev();
extern void _ZN6S629C53v44Ev();
extern void _ZN6S629C53v45Ev();
extern void _ZN6S629C53v46Ev();
extern void _ZN6S629C53v47Ev();
extern void _ZN6S629C53v48Ev();
extern void _ZN6S629C53v49Ev();
extern void _ZN6S629C53v50Ev();
extern void _ZN6S629C53v51Ev();
extern void _ZN6S629C53v52Ev();
extern void _ZN6S629C53v53Ev();
extern void _ZN6S629C53v54Ev();
extern void _ZN6S629C53v55Ev();
extern void _ZN6S629C53v56Ev();
extern void _ZN6S629C53v57Ev();
extern void _ZN6S629C53v58Ev();
extern void _ZN6S629C53v59Ev();
extern void _ZN6S629C53v60Ev();
extern void _ZN6S629C53v61Ev();
extern void _ZN6S629C53v62Ev();
extern void _ZN6S629C53v63Ev();
extern void _ZN6S629C53v64Ev();
extern void _ZN6S629C53v65Ev();
extern void _ZN6S629C53v66Ev();
extern void _ZN6S629C53v67Ev();
extern void _ZN6S629C53v68Ev();
extern void _ZN9S629C4_nt3v69Ev();
extern void _ZN9S629C4_nt3v70Ev();
extern void _ZN9S629C4_nt3v71Ev();
extern void _ZN9S629C4_nt3v72Ev();
extern void _ZN9S629C4_nt3v73Ev();
extern void _ZN9S629C3_nt3v74Ev();
extern void _ZN9S629C3_nt3v75Ev();
extern void _ZN9S629C3_nt3v76Ev();
extern void _ZN9S629C3_nt3v77Ev();
extern void _ZN9S629C3_nt3v78Ev();
extern void _ZN9S629C3_nt3v79Ev();
extern void _ZN9S629C3_nt3v80Ev();
extern void _ZN9S629C3_nt3v81Ev();
extern void _ZN9S629C3_nt3v82Ev();
extern void _ZN9S629C3_nt3v83Ev();
extern void _ZN9S629C3_nt3v84Ev();
extern void _ZN9S629C3_nt3v85Ev();
extern void _ZN9S629C3_nt3v86Ev();
extern void _ZN9S629C3_nt3v87Ev();
extern void _ZN9S629C3_nt3v88Ev();
extern void _ZN9S629C3_nt3v89Ev();
extern void _ZN9S629C3_nt3v90Ev();
extern void _ZN9S629C3_nt3v91Ev();
extern void _ZN9S629C3_nt3v92Ev();
extern void _ZN9S629C3_nt3v93Ev();
extern void _ZN9S629C3_nt3v94Ev();
extern void _ZN9S629C3_nt3v95Ev();
extern void _ZN9S629C2_nt3v96Ev();
extern void _ZN9S629C2_nt3v97Ev();
extern void _ZN9S629C2_nt3v98Ev();
extern void _ZN9S629C2_nt3v99Ev();
extern void _ZN9S629C2_nt4v100Ev();
extern void _ZN9S629C2_nt4v101Ev();
extern void _ZN9S629C2_nt4v102Ev();
extern void _ZN9S629C2_nt4v103Ev();
extern void _ZN9S629C2_nt4v104Ev();
extern void _ZN9S629C2_nt4v105Ev();
extern void _ZN9S629C2_nt4v106Ev();
extern void _ZN9S629C2_nt4v107Ev();
extern void _ZN9S629C2_nt4v108Ev();
extern void _ZN9S629C2_nt4v109Ev();
extern void _ZN9S629C2_nt4v110Ev();
extern void _ZN9S629C2_nt4v111Ev();
extern void _ZN9S629C2_nt4v112Ev();
extern void _ZN9S629C2_nt4v113Ev();
extern void _ZN9S629C2_nt4v114Ev();
extern void _ZN9S629C2_nt4v115Ev();
extern void _ZN9S629C2_nt4v116Ev();
extern void _ZN9S629C2_nt4v117Ev();
extern void _ZN9S629C2_nt4v118Ev();
extern void _ZN9S629C2_nt4v119Ev();
extern void _ZN9S629C2_nt4v120Ev();
extern void _ZN9S629C2_nt4v121Ev();
extern void _ZN9S629C2_nt4v122Ev();
extern void _ZN9S629C2_nt4v123Ev();
extern void _ZN9S629C2_nt4v124Ev();
extern void _ZN9S629C2_nt4v125Ev();
extern void _ZN9S629C2_nt4v126Ev();
extern void _ZN9S629C2_nt4v127Ev();
extern void _ZN9S629C2_nt4v128Ev();
extern void _ZN9S629C2_nt4v129Ev();
extern void _ZN9S629C2_nt4v130Ev();
extern void _ZN9S629C2_nt4v131Ev();
extern void _ZN9S629C2_nt4v132Ev();
extern void _ZN9S629C2_nt4v133Ev();
extern void _ZN9S629C2_nt4v134Ev();
extern void _ZN9S629C2_nt4v135Ev();
extern void _ZN9S629C2_nt4v136Ev();
extern void _ZN9S629C2_nt4v137Ev();
extern void _ZN9S629C2_nt4v138Ev();
extern void _ZN9S629C2_nt4v139Ev();
extern void _ZN9S629C2_nt4v140Ev();
extern void _ZN9S629C2_nt4v141Ev();
extern void _ZN9S629C2_nt4v142Ev();
extern void _ZN9S629C2_nt4v143Ev();
extern void _ZN9S629C2_nt4v144Ev();
extern void _ZN9S629C2_nt4v145Ev();
extern void _ZN9S629C2_nt4v146Ev();
extern void _ZN9S629C2_nt4v147Ev();
extern void _ZN9S629C2_nt4v148Ev();
extern void _ZN9S629C2_nt4v149Ev();
extern void _ZN9S629C2_nt4v150Ev();
extern void _ZN9S629C2_nt4v151Ev();
extern void _ZN9S629C2_nt4v152Ev();
extern void _ZN9S629C2_nt4v153Ev();
extern void _ZN9S629C2_nt4v154Ev();
extern void _ZN9S629C2_nt4v155Ev();
extern void _ZN9S629C2_nt4v156Ev();
extern void _ZN6S629C12v1Ev();
extern void _ZN6S629C12v2Ev();
extern void _ZN6S629C12v3Ev();
extern void _ZN6S629C12v4Ev();
static  VTBL_ENTRY vtc_S629C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S629C1[0]),
  (VTBL_ENTRY)&_ZN6S629C1D1Ev,
  (VTBL_ENTRY)&_ZN6S629C1D0Ev,
  (VTBL_ENTRY)&_ZN6S629C52v5Ev,
  (VTBL_ENTRY)&_ZN6S629C52v6Ev,
  (VTBL_ENTRY)&_ZN6S629C52v7Ev,
  (VTBL_ENTRY)&_ZN6S629C52v8Ev,
  (VTBL_ENTRY)&_ZN6S629C52v9Ev,
  (VTBL_ENTRY)&_ZN6S629C53v10Ev,
  (VTBL_ENTRY)&_ZN6S629C53v11Ev,
  (VTBL_ENTRY)&_ZN6S629C53v12Ev,
  (VTBL_ENTRY)&_ZN6S629C53v13Ev,
  (VTBL_ENTRY)&_ZN6S629C53v14Ev,
  (VTBL_ENTRY)&_ZN6S629C53v15Ev,
  (VTBL_ENTRY)&_ZN6S629C53v16Ev,
  (VTBL_ENTRY)&_ZN6S629C53v17Ev,
  (VTBL_ENTRY)&_ZN6S629C53v18Ev,
  (VTBL_ENTRY)&_ZN6S629C53v19Ev,
  (VTBL_ENTRY)&_ZN6S629C53v20Ev,
  (VTBL_ENTRY)&_ZN6S629C53v21Ev,
  (VTBL_ENTRY)&_ZN6S629C53v22Ev,
  (VTBL_ENTRY)&_ZN6S629C53v23Ev,
  (VTBL_ENTRY)&_ZN6S629C53v24Ev,
  (VTBL_ENTRY)&_ZN6S629C53v25Ev,
  (VTBL_ENTRY)&_ZN6S629C53v26Ev,
  (VTBL_ENTRY)&_ZN6S629C53v27Ev,
  (VTBL_ENTRY)&_ZN6S629C53v28Ev,
  (VTBL_ENTRY)&_ZN6S629C53v29Ev,
  (VTBL_ENTRY)&_ZN6S629C53v30Ev,
  (VTBL_ENTRY)&_ZN6S629C53v31Ev,
  (VTBL_ENTRY)&_ZN6S629C53v32Ev,
  (VTBL_ENTRY)&_ZN6S629C53v33Ev,
  (VTBL_ENTRY)&_ZN6S629C53v34Ev,
  (VTBL_ENTRY)&_ZN6S629C53v35Ev,
  (VTBL_ENTRY)&_ZN6S629C53v36Ev,
  (VTBL_ENTRY)&_ZN6S629C53v37Ev,
  (VTBL_ENTRY)&_ZN6S629C53v38Ev,
  (VTBL_ENTRY)&_ZN6S629C53v39Ev,
  (VTBL_ENTRY)&_ZN6S629C53v40Ev,
  (VTBL_ENTRY)&_ZN6S629C53v41Ev,
  (VTBL_ENTRY)&_ZN6S629C53v42Ev,
  (VTBL_ENTRY)&_ZN6S629C53v43Ev,
  (VTBL_ENTRY)&_ZN6S629C53v44Ev,
  (VTBL_ENTRY)&_ZN6S629C53v45Ev,
  (VTBL_ENTRY)&_ZN6S629C53v46Ev,
  (VTBL_ENTRY)&_ZN6S629C53v47Ev,
  (VTBL_ENTRY)&_ZN6S629C53v48Ev,
  (VTBL_ENTRY)&_ZN6S629C53v49Ev,
  (VTBL_ENTRY)&_ZN6S629C53v50Ev,
  (VTBL_ENTRY)&_ZN6S629C53v51Ev,
  (VTBL_ENTRY)&_ZN6S629C53v52Ev,
  (VTBL_ENTRY)&_ZN6S629C53v53Ev,
  (VTBL_ENTRY)&_ZN6S629C53v54Ev,
  (VTBL_ENTRY)&_ZN6S629C53v55Ev,
  (VTBL_ENTRY)&_ZN6S629C53v56Ev,
  (VTBL_ENTRY)&_ZN6S629C53v57Ev,
  (VTBL_ENTRY)&_ZN6S629C53v58Ev,
  (VTBL_ENTRY)&_ZN6S629C53v59Ev,
  (VTBL_ENTRY)&_ZN6S629C53v60Ev,
  (VTBL_ENTRY)&_ZN6S629C53v61Ev,
  (VTBL_ENTRY)&_ZN6S629C53v62Ev,
  (VTBL_ENTRY)&_ZN6S629C53v63Ev,
  (VTBL_ENTRY)&_ZN6S629C53v64Ev,
  (VTBL_ENTRY)&_ZN6S629C53v65Ev,
  (VTBL_ENTRY)&_ZN6S629C53v66Ev,
  (VTBL_ENTRY)&_ZN6S629C53v67Ev,
  (VTBL_ENTRY)&_ZN6S629C53v68Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S629C4_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S629C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN9S629C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN6S629C12v1Ev,
  (VTBL_ENTRY)&_ZN6S629C12v2Ev,
  (VTBL_ENTRY)&_ZN6S629C12v3Ev,
  (VTBL_ENTRY)&_ZN6S629C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S629C1[];
extern  VTBL_ENTRY _ZTV6S629C1[];
Class_Descriptor cd_S629C1 = {  "S629C1", // class name
  bases_S629C1, 4,
  &(vtc_S629C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,284), // object size
  NSPAIRA(_ZTI6S629C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S629C1),160, //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  S20677C3  {
  void *s20677c3f0;
  __tsi64 s20677c3f1[4];
  short s20677c3f2;
  void  mf20677c3(); // _ZN8S20677C39mf20677c3Ev
};
//SIG(-1 S20677C3) C1{ m Fp FL[4] Fs}


void  S20677C3 ::mf20677c3(){}

static void Test_S20677C3()
{
  {
    init_simple_test("S20677C3");
    S20677C3 lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S20677C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20677C3)");
    check_field_offset(lv, s20677c3f0, 0, "S20677C3.s20677c3f0");
    check_field_offset(lv, s20677c3f1, ABISELECT(8,4), "S20677C3.s20677c3f1");
    check_field_offset(lv, s20677c3f2, ABISELECT(40,36), "S20677C3.s20677c3f2");
  }
}
static Arrange_To_Call_Me vS20677C3(Test_S20677C3, "S20677C3", ABISELECT(48,40));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S20677C3[];
VTBL_ENTRY *P__ZTI8S20677C3 = _ZTI8S20677C3; 
Class_Descriptor cd_S20677C3 = {  "S20677C3", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI8S20677C3),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  S20677C5  : virtual S20677C3 {
  long double s20677c5f0;
  int s20677c5f1;
  ::S20677C3 s20677c5f2;
  ::S20677C3 s20677c5f3;
  ~S20677C5(); // tgen
  S20677C5(); // tgen
};
//SIG(-1 S20677C5) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S20677C5 ::~S20677C5(){ note_dtor("S20677C5", this);} // tgen
S20677C5 ::S20677C5(){ note_ctor("S20677C5", this);} // tgen

static void Test_S20677C5()
{
  extern Class_Descriptor cd_S20677C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S20677C5, buf);
    S20677C5 *dp, &lv = *(dp=new (buf) S20677C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S20677C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C5)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S20677C5");
    check_field_offset(lv, s20677c5f0, ABISELECT(16,4), "S20677C5.s20677c5f0");
    check_field_offset(lv, s20677c5f1, ABISELECT(32,16), "S20677C5.s20677c5f1");
    check_field_offset(lv, s20677c5f2, ABISELECT(40,20), "S20677C5.s20677c5f2");
    check_field_offset(lv, s20677c5f3, ABISELECT(88,60), "S20677C5.s20677c5f3");
    test_class_info(&lv, &cd_S20677C5);
    dp->~S20677C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C5(Test_S20677C5, "S20677C5", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S20677C5C1Ev();
extern void _ZN8S20677C5D1Ev();
Name_Map name_map_S20677C5[] = {
  NSPAIR(_ZN8S20677C5C1Ev),
  NSPAIR(_ZN8S20677C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20677C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20677C5[];
static  VTBL_ENTRY vtc_S20677C5[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern VTBL_ENTRY _ZTV8S20677C5[];
static  VTT_ENTRY vtt_S20677C5[] = {
  {&(_ZTV8S20677C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
Class_Descriptor cd_S20677C5 = {  "S20677C5", // class name
  bases_S20677C5, 1,
  &(vtc_S20677C5[0]), // expected_vtbl_contents
  &(vtt_S20677C5[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S20677C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20677C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20677C5),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20677C4  : virtual S20677C3 , S20677C5 {
  short s20677c4f0;
  __tsi64 s20677c4f1;
  char s20677c4f2;
  int s20677c4f3[2];
  ::S20677C5 s20677c4f4;
  void *s20677c4f5;
  __tsi64 s20677c4f6;
  int s20677c4f7;
  __tsi64 s20677c4f8;
  int s20677c4f9;
  virtual void  v2(); // _ZN8S20677C42v2Ev
  virtual void  v3(); // _ZN8S20677C42v3Ev
  virtual void  v4(); // _ZN8S20677C42v4Ev
  ~S20677C4(); // tgen
  S20677C4(); // tgen
};
//SIG(-1 S20677C4) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S20677C4 ::v2(){vfunc_called(this, "_ZN8S20677C42v2Ev");}
void  S20677C4 ::v3(){vfunc_called(this, "_ZN8S20677C42v3Ev");}
void  S20677C4 ::v4(){vfunc_called(this, "_ZN8S20677C42v4Ev");}
S20677C4 ::~S20677C4(){ note_dtor("S20677C4", this);} // tgen
S20677C4 ::S20677C4(){ note_ctor("S20677C4", this);} // tgen

static void Test_S20677C4()
{
  extern Class_Descriptor cd_S20677C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S20677C4, buf);
    S20677C4 *dp, &lv = *(dp=new (buf) S20677C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S20677C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S20677C4");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(408,292), "S20677C4");
    check_base_class_offset(lv, (S20677C5*), 0, "S20677C4");
    check_field_offset(lv, s20677c4f0, ABISELECT(136,100), "S20677C4.s20677c4f0");
    check_field_offset(lv, s20677c4f1, ABISELECT(144,104), "S20677C4.s20677c4f1");
    check_field_offset(lv, s20677c4f2, ABISELECT(152,112), "S20677C4.s20677c4f2");
    check_field_offset(lv, s20677c4f3, ABISELECT(156,116), "S20677C4.s20677c4f3");
    check_field_offset(lv, s20677c4f4, ABISELECT(176,124), "S20677C4.s20677c4f4");
    check_field_offset(lv, s20677c4f5, ABISELECT(368,264), "S20677C4.s20677c4f5");
    check_field_offset(lv, s20677c4f6, ABISELECT(376,268), "S20677C4.s20677c4f6");
    check_field_offset(lv, s20677c4f7, ABISELECT(384,276), "S20677C4.s20677c4f7");
    check_field_offset(lv, s20677c4f8, ABISELECT(392,280), "S20677C4.s20677c4f8");
    check_field_offset(lv, s20677c4f9, ABISELECT(400,288), "S20677C4.s20677c4f9");
    test_class_info(&lv, &cd_S20677C4);
    dp->~S20677C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C4(Test_S20677C4, "S20677C4", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S20677C4C1Ev();
extern void _ZN8S20677C4D1Ev();
Name_Map name_map_S20677C4[] = {
  NSPAIR(_ZN8S20677C4C1Ev),
  NSPAIR(_ZN8S20677C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
static Base_Class bases_S20677C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20677C5,    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 _ZTI8S20677C4[];
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY vtc_S20677C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20677C4[];
static  VTBL_ENTRY _tg__ZTV8S20677C5__8S20677C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C4[] = {
  {&(_ZTV8S20677C4[3]),  3,6},
  {&(_tg__ZTV8S20677C5__8S20677C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
Class_Descriptor cd_S20677C4 = {  "S20677C4", // class name
  bases_S20677C4, 2,
  &(vtc_S20677C4[0]), // expected_vtbl_contents
  &(vtt_S20677C4[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S20677C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20677C4),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20677C4),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  S20677C6_nt  {
};
//SIG(-1 S20677C6_nt) C1{}



//skip512 S20677C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20677C2  : virtual S20677C3 , virtual S20677C4 {
  __tsi64 s20677c2f0;
  ::S20677C6_nt s20677c2f1;
  void *s20677c2f2;
  char s20677c2f3[2];
  ::S20677C3 s20677c2f4;
  long s20677c2f5;
  ::S20677C6_nt s20677c2f6;
  virtual void  v5(); // _ZN8S20677C22v5Ev
  virtual void  v6(); // _ZN8S20677C22v6Ev
  virtual void  v7(); // _ZN8S20677C22v7Ev
  ~S20677C2(); // tgen
  S20677C2(); // tgen
};
//SIG(-1 S20677C2) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S20677C2 ::v5(){vfunc_called(this, "_ZN8S20677C22v5Ev");}
void  S20677C2 ::v6(){vfunc_called(this, "_ZN8S20677C22v6Ev");}
void  S20677C2 ::v7(){vfunc_called(this, "_ZN8S20677C22v7Ev");}
S20677C2 ::~S20677C2(){ note_dtor("S20677C2", this);} // tgen
S20677C2 ::S20677C2(){ note_ctor("S20677C2", this);} // tgen

static void Test_S20677C2()
{
  extern Class_Descriptor cd_S20677C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S20677C2, buf);
    S20677C2 *dp, &lv = *(dp=new (buf) S20677C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S20677C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C2)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S20677C2");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(104,72), "S20677C2");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(104,72), "S20677C2");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(160,112), "S20677C2");
    check_base_class_offset(lv, (S20677C4*), ABISELECT(160,112), "S20677C2");
    check_field_offset(lv, s20677c2f0, ABISELECT(8,4), "S20677C2.s20677c2f0");
    check_field_offset(lv, s20677c2f1, ABISELECT(16,12), "S20677C2.s20677c2f1");
    check_field_offset(lv, s20677c2f2, ABISELECT(24,16), "S20677C2.s20677c2f2");
    check_field_offset(lv, s20677c2f3, ABISELECT(32,20), "S20677C2.s20677c2f3");
    check_field_offset(lv, s20677c2f4, ABISELECT(40,24), "S20677C2.s20677c2f4");
    check_field_offset(lv, s20677c2f5, ABISELECT(88,64), "S20677C2.s20677c2f5");
    check_field_offset(lv, s20677c2f6, ABISELECT(96,68), "S20677C2.s20677c2f6");
    test_class_info(&lv, &cd_S20677C2);
    dp->~S20677C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C2(Test_S20677C2, "S20677C2", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN8S20677C2C1Ev();
extern void _ZN8S20677C2D1Ev();
Name_Map name_map_S20677C2[] = {
  NSPAIR(_ZN8S20677C2C1Ev),
  NSPAIR(_ZN8S20677C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
static Base_Class bases_S20677C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20677C5,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(160,112), //bcp->offset
    7, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20677C2[];
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY vtc_S20677C2[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20677C2[];
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__8S20677C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C2[] = {
  {&(_ZTV8S20677C2[4]),  4,16},
  {&(_ZTV8S20677C2[13]),  13,16},
  {&(_tg__ZTV8S20677C4__8S20677C2[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__8S20677C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
Class_Descriptor cd_S20677C2 = {  "S20677C2", // class name
  bases_S20677C2, 3,
  &(vtc_S20677C2[0]), // expected_vtbl_contents
  &(vtt_S20677C2[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI8S20677C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20677C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20677C2),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  S20677C8  {
  ::S20677C6_nt s20677c8f0;
  ::S20677C5 s20677c8f1;
  ::S20677C6_nt s20677c8f2;
  __tsi64 s20677c8f3;
  ::S20677C6_nt s20677c8f4;
  void *s20677c8f5;
  ::S20677C6_nt s20677c8f6;
  void *s20677c8f7[2];
  ::S20677C6_nt s20677c8f8;
  virtual void  v8(); // _ZN8S20677C82v8Ev
  ~S20677C8(); // tgen
  S20677C8(); // tgen
};
//SIG(-1 S20677C8) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S20677C8 ::v8(){vfunc_called(this, "_ZN8S20677C82v8Ev");}
S20677C8 ::~S20677C8(){ note_dtor("S20677C8", this);} // tgen
S20677C8 ::S20677C8(){ note_ctor("S20677C8", this);} // tgen

static void Test_S20677C8()
{
  extern Class_Descriptor cd_S20677C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S20677C8, buf);
    S20677C8 *dp, &lv = *(dp=new (buf) S20677C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S20677C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C8)");
    check_field_offset(lv, s20677c8f0, ABISELECT(8,4), "S20677C8.s20677c8f0");
    check_field_offset(lv, s20677c8f1, ABISELECT(16,8), "S20677C8.s20677c8f1");
    check_field_offset(lv, s20677c8f2, ABISELECT(208,148), "S20677C8.s20677c8f2");
    check_field_offset(lv, s20677c8f3, ABISELECT(216,152), "S20677C8.s20677c8f3");
    check_field_offset(lv, s20677c8f4, ABISELECT(224,160), "S20677C8.s20677c8f4");
    check_field_offset(lv, s20677c8f5, ABISELECT(232,164), "S20677C8.s20677c8f5");
    check_field_offset(lv, s20677c8f6, ABISELECT(240,168), "S20677C8.s20677c8f6");
    check_field_offset(lv, s20677c8f7, ABISELECT(248,172), "S20677C8.s20677c8f7");
    check_field_offset(lv, s20677c8f8, ABISELECT(264,180), "S20677C8.s20677c8f8");
    test_class_info(&lv, &cd_S20677C8);
    dp->~S20677C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C8(Test_S20677C8, "S20677C8", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN8S20677C8C1Ev();
extern void _ZN8S20677C8D1Ev();
Name_Map name_map_S20677C8[] = {
  NSPAIR(_ZN8S20677C8C1Ev),
  NSPAIR(_ZN8S20677C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20677C8[];
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY vtc_S20677C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C8[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern VTBL_ENTRY _ZTI8S20677C8[];
extern  VTBL_ENTRY _ZTV8S20677C8[];
Class_Descriptor cd_S20677C8 = {  "S20677C8", // class name
  0,0,//no base classes
  &(vtc_S20677C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI8S20677C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20677C8),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20677C9  : S20677C3 {
  ::S20677C3 s20677c9f0;
  int s20677c9f1;
  long double s20677c9f2;
  int s20677c9f3;
  __tsi64 s20677c9f4;
  long s20677c9f5;
};
//SIG(-1 S20677C9) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S20677C9()
{
  extern Class_Descriptor cd_S20677C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20677C9, buf);
    S20677C9 &lv = *(new (buf) S20677C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20677C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C9)");
    check_base_class_offset(lv, (S20677C3*), 0, "S20677C9");
    check_field_offset(lv, s20677c9f0, ABISELECT(48,40), "S20677C9.s20677c9f0");
    check_field_offset(lv, s20677c9f1, ABISELECT(96,80), "S20677C9.s20677c9f1");
    check_field_offset(lv, s20677c9f2, ABISELECT(112,84), "S20677C9.s20677c9f2");
    check_field_offset(lv, s20677c9f3, ABISELECT(128,96), "S20677C9.s20677c9f3");
    check_field_offset(lv, s20677c9f4, ABISELECT(136,100), "S20677C9.s20677c9f4");
    check_field_offset(lv, s20677c9f5, ABISELECT(144,108), "S20677C9.s20677c9f5");
    test_class_info(&lv, &cd_S20677C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C9(Test_S20677C9, "S20677C9", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20677C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20677C9[];
Class_Descriptor cd_S20677C9 = {  "S20677C9", // class name
  bases_S20677C9, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S20677C9),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20677C7  : virtual S20677C8 , S20677C5 , S20677C9 {
  void *s20677c7f0;
  ::S20677C9 s20677c7f1;
  void *s20677c7f2;
  int s20677c7f3[2];
  long double s20677c7f4;
  int s20677c7f5[2];
  virtual void  v9(); // _ZN8S20677C72v9Ev
  ~S20677C7(); // tgen
  S20677C7(); // tgen
};
//SIG(-1 S20677C7) C1{ VBC2{ v2 FC3{} FC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} FC3 FL FC3 Fp FC3 Fp[2] FC3} BC4 BC6{ BC5 FC5 Fi FD Fi FL Fl} v1 Fp FC6 Fp Fi[2] FD Fi[2]}


void  S20677C7 ::v9(){vfunc_called(this, "_ZN8S20677C72v9Ev");}
S20677C7 ::~S20677C7(){ note_dtor("S20677C7", this);} // tgen
S20677C7 ::S20677C7(){ note_ctor("S20677C7", this);} // tgen

static void Test_S20677C7()
{
  extern Class_Descriptor cd_S20677C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,147)];
    init_test(&cd_S20677C7, buf);
    S20677C7 *dp, &lv = *(dp=new (buf) S20677C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,584), "sizeof(S20677C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C7)");
    check_base_class_offset(lv, (S20677C8*), ABISELECT(512,360), "S20677C7");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(784,544), "S20677C7");
    check_base_class_offset(lv, (S20677C5*), 0, "S20677C7");
    check_base_class_offset(lv, (S20677C3*)(S20677C9*), ABISELECT(144,100), "S20677C7");
    check_base_class_offset(lv, (S20677C9*), ABISELECT(144,100), "S20677C7");
    check_field_offset(lv, s20677c7f0, ABISELECT(296,212), "S20677C7.s20677c7f0");
    check_field_offset(lv, s20677c7f1, ABISELECT(304,216), "S20677C7.s20677c7f1");
    check_field_offset(lv, s20677c7f2, ABISELECT(464,328), "S20677C7.s20677c7f2");
    check_field_offset(lv, s20677c7f3, ABISELECT(472,332), "S20677C7.s20677c7f3");
    check_field_offset(lv, s20677c7f4, ABISELECT(480,340), "S20677C7.s20677c7f4");
    check_field_offset(lv, s20677c7f5, ABISELECT(496,352), "S20677C7.s20677c7f5");
    test_class_info(&lv, &cd_S20677C7);
    dp->~S20677C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C7(Test_S20677C7, "S20677C7", ABISELECT(832,584));

#else // __cplusplus

extern void _ZN8S20677C7C1Ev();
extern void _ZN8S20677C7D1Ev();
Name_Map name_map_S20677C7[] = {
  NSPAIR(_ZN8S20677C7C1Ev),
  NSPAIR(_ZN8S20677C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C8;
extern VTBL_ENTRY _ZTI8S20677C8[];
extern  VTBL_ENTRY _ZTV8S20677C8[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C9;
extern VTBL_ENTRY _ZTI8S20677C9[];
static Base_Class bases_S20677C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C8,    ABISELECT(512,360), //bcp->offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(784,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20677C5,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C3,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20677C9,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20677C7[];
extern void _ZN8S20677C72v9Ev();
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY vtc_S20677C7[] = {
  ABISELECT(512,360),
  ABISELECT(784,544),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C7[0]),
  (VTBL_ENTRY)&_ZN8S20677C72v9Ev,
  0,
  ABISELECT(-512,-360),
  (VTBL_ENTRY)&(_ZTI8S20677C7[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern VTBL_ENTRY _ZTV8S20677C7[];
static  VTBL_ENTRY _tg__ZTV8S20677C5__8S20677C7[] = {
  ABISELECT(784,544),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C7[] = {
  {&(_ZTV8S20677C7[4]),  4,9},
  {&(_tg__ZTV8S20677C5__8S20677C7[3]),  3,3},
  {&(_ZTV8S20677C7[8]),  8,9},
};
extern VTBL_ENTRY _ZTI8S20677C7[];
extern  VTBL_ENTRY _ZTV8S20677C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C7[];
Class_Descriptor cd_S20677C7 = {  "S20677C7", // class name
  bases_S20677C7, 5,
  &(vtc_S20677C7[0]), // expected_vtbl_contents
  &(vtt_S20677C7[0]), // expected_vtt_contents
  ABISELECT(832,584), // object size
  NSPAIRA(_ZTI8S20677C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20677C7),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20677C7),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  S20677C12  : virtual S20677C3 , virtual S20677C5 {
  int s20677c12f0;
  ::S20677C5 s20677c12f1;
  __tsi64 s20677c12f2;
  int s20677c12f3;
  void *s20677c12f4;
  virtual void  v10(); // _ZN9S20677C123v10Ev
  virtual void  v11(); // _ZN9S20677C123v11Ev
  ~S20677C12(); // tgen
  S20677C12(); // tgen
};
//SIG(-1 S20677C12) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 FD Fi FC2 FC2} v1 v2 Fi FC3 FL Fi Fp}


void  S20677C12 ::v10(){vfunc_called(this, "_ZN9S20677C123v10Ev");}
void  S20677C12 ::v11(){vfunc_called(this, "_ZN9S20677C123v11Ev");}
S20677C12 ::~S20677C12(){ note_dtor("S20677C12", this);} // tgen
S20677C12 ::S20677C12(){ note_ctor("S20677C12", this);} // tgen

static void Test_S20677C12()
{
  extern Class_Descriptor cd_S20677C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,77)];
    init_test(&cd_S20677C12, buf);
    S20677C12 *dp, &lv = *(dp=new (buf) S20677C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,304), "sizeof(S20677C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C12)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(232,164), "S20677C12");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(232,164), "S20677C12");
    check_base_class_offset(lv, (S20677C5*), ABISELECT(288,204), "S20677C12");
    check_field_offset(lv, s20677c12f0, ABISELECT(8,4), "S20677C12.s20677c12f0");
    check_field_offset(lv, s20677c12f1, ABISELECT(16,8), "S20677C12.s20677c12f1");
    check_field_offset(lv, s20677c12f2, ABISELECT(208,148), "S20677C12.s20677c12f2");
    check_field_offset(lv, s20677c12f3, ABISELECT(216,156), "S20677C12.s20677c12f3");
    check_field_offset(lv, s20677c12f4, ABISELECT(224,160), "S20677C12.s20677c12f4");
    test_class_info(&lv, &cd_S20677C12);
    dp->~S20677C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C12(Test_S20677C12, "S20677C12", ABISELECT(432,304));

#else // __cplusplus

extern void _ZN9S20677C12C1Ev();
extern void _ZN9S20677C12D1Ev();
Name_Map name_map_S20677C12[] = {
  NSPAIR(_ZN9S20677C12C1Ev),
  NSPAIR(_ZN9S20677C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
static Base_Class bases_S20677C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(232,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C5,    ABISELECT(288,204), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C12[];
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY vtc_S20677C12[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
extern VTBL_ENTRY _ZTV9S20677C12[];
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C12[] = {
  {&(_ZTV9S20677C12[4]),  4,9},
  {&(_ZTV9S20677C12[9]),  9,9},
  {&(_tg__ZTV8S20677C5__9S20677C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
Class_Descriptor cd_S20677C12 = {  "S20677C12", // class name
  bases_S20677C12, 2,
  &(vtc_S20677C12[0]), // expected_vtbl_contents
  &(vtt_S20677C12[0]), // expected_vtt_contents
  ABISELECT(432,304), // object size
  NSPAIRA(_ZTI9S20677C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20677C12),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C12),3, //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  S20677C11  : virtual S20677C4 , virtual S20677C2 , virtual S20677C12 {
  ::S20677C6_nt s20677c11f0;
  ::S20677C6_nt s20677c11f1;
  int s20677c11f2;
  ::S20677C5 s20677c11f3;
  ::S20677C6_nt s20677c11f4;
  ::S20677C6_nt s20677c11f5;
  ::S20677C8 s20677c11f6;
  ::S20677C2 s20677c11f7;
  void *s20677c11f8;
  ::S20677C6_nt s20677c11f9;
  virtual void  v12(); // _ZN9S20677C113v12Ev
  virtual void  v13(); // _ZN9S20677C113v13Ev
  ~S20677C11(); // tgen
  S20677C11(); // tgen
};
//SIG(-1 S20677C11) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v3 v4 v5 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC2 v6 v7 v8 FL FC6{} Fp Fc[2] FC3 Fl FC6} VBC7{ VBC3 VBC4 v9 v10 Fi FC4 FL Fi Fp} v1 v2 FC6 FC6 Fi FC4 FC6 FC6 FC8{ v11 FC6 FC4 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC5 Fp FC6}


void  S20677C11 ::v12(){vfunc_called(this, "_ZN9S20677C113v12Ev");}
void  S20677C11 ::v13(){vfunc_called(this, "_ZN9S20677C113v13Ev");}
S20677C11 ::~S20677C11(){ note_dtor("S20677C11", this);} // tgen
S20677C11 ::S20677C11(){ note_ctor("S20677C11", this);} // tgen

static void Test_S20677C11()
{
  extern Class_Descriptor cd_S20677C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(128,356)];
    init_test(&cd_S20677C11, buf);
    S20677C11 *dp, &lv = *(dp=new (buf) S20677C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2032,1420), "sizeof(S20677C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C11)");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(1496,1044), "S20677C11");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(1496,1044), "S20677C11");
    check_base_class_offset(lv, (S20677C3*)(S20677C2*), ABISELECT(1496,1044), "S20677C11");
    check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(1496,1044), "S20677C11");
    /*is_ambiguous_... S20677C11::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(1496,1044), "S20677C11");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(1088,752), "S20677C11");
    check_base_class_offset(lv, (S20677C4*), ABISELECT(1088,752), "S20677C11");
    check_base_class_offset(lv, (S20677C4*)(S20677C2*), ABISELECT(1088,752), "S20677C11");
    check_base_class_offset(lv, (S20677C2*), ABISELECT(1544,1084), "S20677C11");
    check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(1888,1320), "S20677C11");
    check_base_class_offset(lv, (S20677C12*), ABISELECT(1648,1156), "S20677C11");
    check_field_offset(lv, s20677c11f0, ABISELECT(8,4), "S20677C11.s20677c11f0");
    check_field_offset(lv, s20677c11f1, ABISELECT(9,5), "S20677C11.s20677c11f1");
    check_field_offset(lv, s20677c11f2, ABISELECT(12,8), "S20677C11.s20677c11f2");
    check_field_offset(lv, s20677c11f3, ABISELECT(16,12), "S20677C11.s20677c11f3");
    check_field_offset(lv, s20677c11f4, ABISELECT(208,152), "S20677C11.s20677c11f4");
    check_field_offset(lv, s20677c11f5, ABISELECT(209,153), "S20677C11.s20677c11f5");
    check_field_offset(lv, s20677c11f6, ABISELECT(224,156), "S20677C11.s20677c11f6");
    check_field_offset(lv, s20677c11f7, ABISELECT(496,340), "S20677C11.s20677c11f7");
    check_field_offset(lv, s20677c11f8, ABISELECT(1072,744), "S20677C11.s20677c11f8");
    check_field_offset(lv, s20677c11f9, ABISELECT(1080,748), "S20677C11.s20677c11f9");
    test_class_info(&lv, &cd_S20677C11);
    dp->~S20677C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C11(Test_S20677C11, "S20677C11", ABISELECT(2032,1420));

#else // __cplusplus

extern void _ZN9S20677C11C1Ev();
extern void _ZN9S20677C11D1Ev();
Name_Map name_map_S20677C11[] = {
  NSPAIR(_ZN9S20677C11C1Ev),
  NSPAIR(_ZN9S20677C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C2;
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
static Base_Class bases_S20677C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1496,1044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20677C5,    ABISELECT(1088,752), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C2,    ABISELECT(1544,1084), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C5,    ABISELECT(1888,1320), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(1648,1156), //bcp->offset
    28, //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},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C11[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY vtc_S20677C11[] = {
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-1544,-1084),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-1648,-1156),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(-392,-276),
  ABISELECT(-1888,-1320),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern VTBL_ENTRY _ZTV9S20677C11[];
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C11[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__9S20677C11[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C11[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2__9S20677C11[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C11[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__9S20677C11[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C11[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C11[] = {
  {&(_ZTV9S20677C11[7]),  7,39},
  {&(_ZTV9S20677C11[15]),  15,39},
  {&(_ZTV9S20677C11[25]),  25,39},
  {&(_ZTV9S20677C11[34]),  34,39},
  {&(_ZTV9S20677C11[39]),  39,39},
  {&(_tg__ZTV8S20677C4__9S20677C11[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__9S20677C11[3]),  3,3},
  {&(_tg__ZTV8S20677C2__9S20677C11[4]),  4,7},
  {&(_tg__ZTV8S20677C4__8S20677C2__9S20677C11[6]),  6,9},
  {&(_tg__ZTV9S20677C12__9S20677C11[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__9S20677C11[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A1__9S20677C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
Class_Descriptor cd_S20677C11 = {  "S20677C11", // class name
  bases_S20677C11, 6,
  &(vtc_S20677C11[0]), // expected_vtbl_contents
  &(vtt_S20677C11[0]), // expected_vtt_contents
  ABISELECT(2032,1420), // object size
  NSPAIRA(_ZTI9S20677C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20677C11),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C11),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20677C13  : virtual S20677C5 , S20677C11 , S20677C12 {
  int s20677c13f0;
  char s20677c13f1:2;
  ::S20677C6_nt s20677c13f2;
  int s20677c13f3;
  ~S20677C13(); // tgen
  S20677C13(); // tgen
};
//SIG(-1 S20677C13) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} BC4{ VBC5{ VBC3 BC2 v1 v2 v3 Fs FL Fc Fi[2] FC2 Fp FL Fi FL Fi} VBC6{ VBC3 VBC5 v4 v5 v6 FL FC7{} Fp Fc[2] FC3 Fl FC7} VBC8{ VBC3 VBC2 v7 v8 Fi FC2 FL Fi Fp} v9 v10 FC7 FC7 Fi FC2 FC7 FC7 FC9{ v11 FC7 FC2 FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} BC8 Fi Fc:2 FC7 Fi}


S20677C13 ::~S20677C13(){ note_dtor("S20677C13", this);} // tgen
S20677C13 ::S20677C13(){ note_ctor("S20677C13", this);} // tgen

static void Test_S20677C13()
{
  extern Class_Descriptor cd_S20677C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(144,400)];
    init_test(&cd_S20677C13, buf);
    S20677C13 *dp, &lv = *(dp=new (buf) S20677C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2288,1596), "sizeof(S20677C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C13)");
    /*is_ambiguous_... S20677C13::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(1480,1028), "S20677C13");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(1480,1028), "S20677C13");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(1480,1028), "S20677C13");
    check_base_class_offset(lv, (S20677C3*)(S20677C2*), ABISELECT(1480,1028), "S20677C13");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(1480,1028), "S20677C13");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(1480,1028), "S20677C13");
    /*is_ambiguous_... S20677C13::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*), ABISELECT(1344,928), "S20677C13");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(1344,928), "S20677C13");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(1344,928), "S20677C13");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(1536,1068), "S20677C13");
    check_base_class_offset(lv, (S20677C4*)(S20677C11*), ABISELECT(1536,1068), "S20677C13");
    check_base_class_offset(lv, (S20677C4*)(S20677C2*), ABISELECT(1536,1068), "S20677C13");
    check_base_class_offset(lv, (S20677C2*)(S20677C11*), ABISELECT(1944,1360), "S20677C13");
    check_base_class_offset(lv, (S20677C12*)(S20677C11*), ABISELECT(2048,1432), "S20677C13");
    check_base_class_offset(lv, (S20677C11*), 0, "S20677C13");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C12*), ABISELECT(1088,752), "S20677C13");
    check_field_offset(lv, s20677c13f0, ABISELECT(1320,916), "S20677C13.s20677c13f0");
    set_bf_and_test(lv, s20677c13f1, ABISELECT(1324,920), 0, 2, 1, "S20677C13");
    set_bf_and_test(lv, s20677c13f1, ABISELECT(1324,920), 0, 2, hide_sll(1LL<<1), "S20677C13");
    check_field_offset(lv, s20677c13f2, ABISELECT(1325,921), "S20677C13.s20677c13f2");
    check_field_offset(lv, s20677c13f3, ABISELECT(1328,924), "S20677C13.s20677c13f3");
    test_class_info(&lv, &cd_S20677C13);
    dp->~S20677C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C13(Test_S20677C13, "S20677C13", ABISELECT(2288,1596));

#else // __cplusplus

extern void _ZN9S20677C13C1Ev();
extern void _ZN9S20677C13D1Ev();
Name_Map name_map_S20677C13[] = {
  NSPAIR(_ZN9S20677C13C1Ev),
  NSPAIR(_ZN9S20677C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C2;
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
static Base_Class bases_S20677C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1480,1028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20677C5,    ABISELECT(1344,928), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C5,    ABISELECT(1536,1068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    3, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(1536,1068), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20677C2,    ABISELECT(1944,1360), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(2048,1432), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C12,    ABISELECT(1088,752), //bcp->offset
    9, //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C13[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY vtc_S20677C13[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  ABISELECT(256,176),
  ABISELECT(392,276),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
extern VTBL_ENTRY _ZTV9S20677C13[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C11__9S20677C13[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C11__9S20677C13[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C11__9S20677C13[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C11__9S20677C13[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C11__9S20677C13[] = {
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__A__9S20677C13[] = {
  ABISELECT(256,176),
  ABISELECT(392,276),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__A__9S20677C13[] = {
  ABISELECT(136,100),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C13[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C13[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__A1__9S20677C13[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C13[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2__9S20677C13[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C13[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__9S20677C13[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTT_ENTRY vtt_S20677C13[] = {
  {&(_ZTV9S20677C13[7]),  7,45},
  {&(_tg__ZTV9S20677C11__9S20677C13[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C11__9S20677C13[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C11__9S20677C13[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C11__9S20677C13[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C11__9S20677C13[3]),  3,3},
  {&(_tg__ZTV9S20677C12__A__9S20677C13[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__A__9S20677C13[3]),  3,3},
  {&(_ZTV9S20677C13[18]),  18,45},
  {&(_ZTV9S20677C13[24]),  24,45},
  {&(_ZTV9S20677C13[34]),  34,45},
  {&(_ZTV9S20677C13[43]),  43,45},
  {&(_ZTV9S20677C13[13]),  13,45},
  {&(_tg__ZTV8S20677C5__9S20677C13[3]),  3,3},
  {&(_tg__ZTV8S20677C4__9S20677C13[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__A1__9S20677C13[3]),  3,3},
  {&(_tg__ZTV8S20677C2__9S20677C13[4]),  4,7},
  {&(_tg__ZTV8S20677C4__8S20677C2__9S20677C13[6]),  6,9},
  {&(_tg__ZTV9S20677C12__9S20677C13[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__9S20677C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C13[];
extern  VTBL_ENTRY _ZTV9S20677C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C13[];
Class_Descriptor cd_S20677C13 = {  "S20677C13", // class name
  bases_S20677C13, 8,
  &(vtc_S20677C13[0]), // expected_vtbl_contents
  &(vtt_S20677C13[0]), // expected_vtt_contents
  ABISELECT(2288,1596), // object size
  NSPAIRA(_ZTI9S20677C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20677C13),45, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C13),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20677C16  : S20677C5 {
  __tsi64 s20677c16f0;
  char s20677c16f1[7];
  void *s20677c16f2;
  int s20677c16f3;
  ::S20677C6_nt s20677c16f4;
  ::S20677C6_nt s20677c16f5;
  char s20677c16f6[10];
  virtual void  v15(); // _ZN9S20677C163v15Ev
  ~S20677C16(); // tgen
  S20677C16(); // tgen
};
//SIG(-1 S20677C16) C1{ BC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} v1 FL Fc[7] Fp Fi FC4{} FC4 Fc[10]}


void  S20677C16 ::v15(){vfunc_called(this, "_ZN9S20677C163v15Ev");}
S20677C16 ::~S20677C16(){ note_dtor("S20677C16", this);} // tgen
S20677C16 ::S20677C16(){ note_ctor("S20677C16", this);} // tgen

static void Test_S20677C16()
{
  extern Class_Descriptor cd_S20677C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,45)];
    init_test(&cd_S20677C16, buf);
    S20677C16 *dp, &lv = *(dp=new (buf) S20677C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,176), "sizeof(S20677C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C16)");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(176,136), "S20677C16");
    check_base_class_offset(lv, (S20677C5*), 0, "S20677C16");
    check_field_offset(lv, s20677c16f0, ABISELECT(136,100), "S20677C16.s20677c16f0");
    check_field_offset(lv, s20677c16f1, ABISELECT(144,108), "S20677C16.s20677c16f1");
    check_field_offset(lv, s20677c16f2, ABISELECT(152,116), "S20677C16.s20677c16f2");
    check_field_offset(lv, s20677c16f3, ABISELECT(160,120), "S20677C16.s20677c16f3");
    check_field_offset(lv, s20677c16f4, ABISELECT(164,124), "S20677C16.s20677c16f4");
    check_field_offset(lv, s20677c16f5, ABISELECT(165,125), "S20677C16.s20677c16f5");
    check_field_offset(lv, s20677c16f6, ABISELECT(166,126), "S20677C16.s20677c16f6");
    test_class_info(&lv, &cd_S20677C16);
    dp->~S20677C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C16(Test_S20677C16, "S20677C16", ABISELECT(224,176));

#else // __cplusplus

extern void _ZN9S20677C16C1Ev();
extern void _ZN9S20677C16D1Ev();
Name_Map name_map_S20677C16[] = {
  NSPAIR(_ZN9S20677C16C1Ev),
  NSPAIR(_ZN9S20677C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
static Base_Class bases_S20677C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(176,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
  0, 1},
  {&cd_S20677C5,    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 _ZTI9S20677C16[];
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY vtc_S20677C16[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C16[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern VTBL_ENTRY _ZTV9S20677C16[];
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C16[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C16[] = {
  {&(_ZTV9S20677C16[3]),  3,4},
  {&(_tg__ZTV8S20677C5__9S20677C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C16[];
extern  VTBL_ENTRY _ZTV9S20677C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C16[];
Class_Descriptor cd_S20677C16 = {  "S20677C16", // class name
  bases_S20677C16, 2,
  &(vtc_S20677C16[0]), // expected_vtbl_contents
  &(vtt_S20677C16[0]), // expected_vtt_contents
  ABISELECT(224,176), // object size
  NSPAIRA(_ZTI9S20677C16),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20677C16),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C16),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  S20677C15  : S20677C4 , virtual S20677C12 , S20677C5 , virtual S20677C8 , virtual S20677C16 {
  long s20677c15f0;
  __tsi64 s20677c15f1;
  long double s20677c15f2;
  ::S20677C6_nt s20677c15f3;
  virtual void  v16(); // _ZN9S20677C153v16Ev
  ~S20677C15(); // tgen
  S20677C15(); // tgen
};
//SIG(-1 S20677C15) C1{ BC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC4 v5 v6 Fi FC4 FL Fi Fp} BC4 VBC6{ v7 FC7{} FC4 FC7 FL FC7 Fp FC7 Fp[2] FC7} VBC8{ BC4 v8 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v1 Fl FL FD FC7}


void  S20677C15 ::v16(){vfunc_called(this, "_ZN9S20677C153v16Ev");}
S20677C15 ::~S20677C15(){ note_dtor("S20677C15", this);} // tgen
S20677C15 ::S20677C15(){ note_ctor("S20677C15", this);} // tgen

static void Test_S20677C15()
{
  extern Class_Descriptor cd_S20677C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(94,262)];
    init_test(&cd_S20677C15, buf);
    S20677C15 *dp, &lv = *(dp=new (buf) S20677C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1488,1044), "sizeof(S20677C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C15)");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(600,420), "S20677C15");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(600,420), "S20677C15");
    check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(600,420), "S20677C15");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(600,420), "S20677C15");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(600,420), "S20677C15");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C16*), ABISELECT(600,420), "S20677C15");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*), 0, "S20677C15");
    check_base_class_offset(lv, (S20677C4*), 0, "S20677C15");
    check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(896,624), "S20677C15");
    check_base_class_offset(lv, (S20677C12*), ABISELECT(656,460), "S20677C15");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*), ABISELECT(416,292), "S20677C15");
    check_base_class_offset(lv, (S20677C8*), ABISELECT(1040,724), "S20677C15");
    check_base_class_offset(lv, (S20677C5*)(S20677C16*), ABISELECT(1312,908), "S20677C15");
    check_base_class_offset(lv, (S20677C16*), ABISELECT(1312,908), "S20677C15");
    check_field_offset(lv, s20677c15f0, ABISELECT(552,392), "S20677C15.s20677c15f0");
    check_field_offset(lv, s20677c15f1, ABISELECT(560,396), "S20677C15.s20677c15f1");
    check_field_offset(lv, s20677c15f2, ABISELECT(576,404), "S20677C15.s20677c15f2");
    check_field_offset(lv, s20677c15f3, ABISELECT(592,416), "S20677C15.s20677c15f3");
    test_class_info(&lv, &cd_S20677C15);
    dp->~S20677C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C15(Test_S20677C15, "S20677C15", ABISELECT(1488,1044));

#else // __cplusplus

extern void _ZN9S20677C15C1Ev();
extern void _ZN9S20677C15D1Ev();
Name_Map name_map_S20677C15[] = {
  NSPAIR(_ZN9S20677C15C1Ev),
  NSPAIR(_ZN9S20677C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C8;
extern VTBL_ENTRY _ZTI8S20677C8[];
extern  VTBL_ENTRY _ZTV8S20677C8[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C16;
extern VTBL_ENTRY _ZTI9S20677C16[];
extern  VTBL_ENTRY _ZTV9S20677C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C16[];
static Base_Class bases_S20677C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(600,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20677C5,    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
    6, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20677C4,    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_S20677C5,    ABISELECT(896,624), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(656,460), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C5,    ABISELECT(416,292), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C8,    ABISELECT(1040,724), //bcp->offset
    25, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C5,    ABISELECT(1312,908), //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
    8, //immediately_derived
  0, 0},
  {&cd_S20677C16,    ABISELECT(1312,908), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C15[];
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN8S20677C82v8Ev();
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY vtc_S20677C15[] = {
  ABISELECT(1312,908),
  ABISELECT(1040,724),
  ABISELECT(896,624),
  ABISELECT(656,460),
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
  ABISELECT(184,128),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-56,-40),
  ABISELECT(-656,-460),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(-296,-204),
  ABISELECT(-896,-624),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  0,
  ABISELECT(-1040,-724),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
  0,
  ABISELECT(-712,-488),
  ABISELECT(-1312,-908),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern VTBL_ENTRY _ZTV9S20677C15[];
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C15[] = {
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__9S20677C15[] = {
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A__9S20677C15[] = {
  ABISELECT(184,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C15[] = {
  ABISELECT(240,164),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__9S20677C15[] = {
  ABISELECT(-296,-204),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C15[] = {
  ABISELECT(-296,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C15[] = {
  ABISELECT(-712,-488),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C16[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C16__A3__9S20677C15[] = {
  ABISELECT(-712,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C15[] = {
  {&(_ZTV9S20677C15[7]),  7,34},
  {&(_tg__ZTV8S20677C4__9S20677C15[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__9S20677C15[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A__9S20677C15[3]),  3,3},
  {&(_ZTV9S20677C15[20]),  20,34},
  {&(_ZTV9S20677C15[25]),  25,34},
  {&(_ZTV9S20677C15[14]),  14,34},
  {&(_ZTV9S20677C15[28]),  28,34},
  {&(_ZTV9S20677C15[33]),  33,34},
  {&(_tg__ZTV9S20677C12__9S20677C15[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__9S20677C15[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A1__9S20677C15[3]),  3,3},
  {&(_tg__ZTV9S20677C16__9S20677C15[3]),  3,4},
  {&(_tg__ZTV8S20677C59S20677C16__A3__9S20677C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C15[];
extern  VTBL_ENTRY _ZTV9S20677C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C15[];
Class_Descriptor cd_S20677C15 = {  "S20677C15", // class name
  bases_S20677C15, 9,
  &(vtc_S20677C15[0]), // expected_vtbl_contents
  &(vtt_S20677C15[0]), // expected_vtt_contents
  ABISELECT(1488,1044), // object size
  NSPAIRA(_ZTI9S20677C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20677C15),34, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C15),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20677C17  : virtual S20677C8 {
  ::S20677C15 s20677c17f0;
  ::S20677C6_nt s20677c17f1;
  long s20677c17f2;
  int s20677c17f3[2];
  virtual void  v22(); // _ZN9S20677C173v22Ev
  ~S20677C17(); // tgen
  S20677C17(); // tgen
};
//SIG(-1 S20677C17) C1{ VBC2{ v2 FC3{} FC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} FC3 FL FC3 Fp FC3 Fp[2] FC3} v1 FC6{ BC7{ VBC5 BC4 v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC8{ VBC5 VBC4 v7 v8 Fi FC4 FL Fi Fp} BC4 VBC2 VBC9{ BC4 v9 FL Fc[7] Fp Fi FC3 FC3 Fc[10]} v3 Fl FL FD FC3} FC3 Fl Fi[2]}


void  S20677C17 ::v22(){vfunc_called(this, "_ZN9S20677C173v22Ev");}
S20677C17 ::~S20677C17(){ note_dtor("S20677C17", this);} // tgen
S20677C17 ::S20677C17(){ note_ctor("S20677C17", this);} // tgen

static void Test_S20677C17()
{
  extern Class_Descriptor cd_S20677C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(114,313)];
    init_test(&cd_S20677C17, buf);
    S20677C17 *dp, &lv = *(dp=new (buf) S20677C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1808,1248), "sizeof(S20677C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C17)");
    check_base_class_offset(lv, (S20677C8*), ABISELECT(1536,1064), "S20677C17");
    check_field_offset(lv, s20677c17f0, ABISELECT(16,4), "S20677C17.s20677c17f0");
    check_field_offset(lv, s20677c17f1, ABISELECT(1504,1048), "S20677C17.s20677c17f1");
    check_field_offset(lv, s20677c17f2, ABISELECT(1512,1052), "S20677C17.s20677c17f2");
    check_field_offset(lv, s20677c17f3, ABISELECT(1520,1056), "S20677C17.s20677c17f3");
    test_class_info(&lv, &cd_S20677C17);
    dp->~S20677C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C17(Test_S20677C17, "S20677C17", ABISELECT(1808,1248));

#else // __cplusplus

extern void _ZN9S20677C17C1Ev();
extern void _ZN9S20677C17D1Ev();
Name_Map name_map_S20677C17[] = {
  NSPAIR(_ZN9S20677C17C1Ev),
  NSPAIR(_ZN9S20677C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C8;
extern VTBL_ENTRY _ZTI8S20677C8[];
extern  VTBL_ENTRY _ZTV8S20677C8[];
static Base_Class bases_S20677C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C8,    ABISELECT(1536,1064), //bcp->offset
    4, //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 _ZTI9S20677C17[];
extern void _ZN9S20677C173v22Ev();
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY vtc_S20677C17[] = {
  ABISELECT(1536,1064),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C17[0]),
  (VTBL_ENTRY)&_ZN9S20677C173v22Ev,
  0,
  ABISELECT(-1536,-1064),
  (VTBL_ENTRY)&(_ZTI9S20677C17[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern VTBL_ENTRY _ZTV9S20677C17[];
static  VTT_ENTRY vtt_S20677C17[] = {
  {&(_ZTV9S20677C17[3]),  3,8},
  {&(_ZTV9S20677C17[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S20677C17[];
extern  VTBL_ENTRY _ZTV9S20677C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C17[];
Class_Descriptor cd_S20677C17 = {  "S20677C17", // class name
  bases_S20677C17, 1,
  &(vtc_S20677C17[0]), // expected_vtbl_contents
  &(vtt_S20677C17[0]), // expected_vtt_contents
  ABISELECT(1808,1248), // object size
  NSPAIRA(_ZTI9S20677C17),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20677C17),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C17),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  S20677C14  : S20677C15 , S20677C17 , S20677C13 {
  void *s20677c14f0;
  __tsi64 s20677c14f1;
  int s20677c14f2;
  void *s20677c14f3;
  int s20677c14f4[3];
  char s20677c14f5;
  __tsi64 s20677c14f6;
  void *s20677c14f7;
  long double s20677c14f8;
  ~S20677C14(); // tgen
  S20677C14(); // tgen
};
//SIG(-1 S20677C14) C1{ BC2{ BC3{ VBC4{ m Fp FL[4] Fs} BC5{ VBC4 FD Fi FC4 FC4} v1 v2 v3 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC6{ VBC4 VBC5 v4 v5 Fi FC5 FL Fi Fp} BC5 VBC7{ v6 FC8{} FC5 FC8 FL FC8 Fp FC8 Fp[2] FC8} VBC9{ BC5 v7 FL Fc[7] Fp Fi FC8 FC8 Fc[10]} v8 Fl FL FD FC8} BC10{ VBC7 v9 FC2 FC8 Fl Fi[2]} BC11{ VBC5 BC12{ VBC3 VBC13{ VBC4 VBC3 v10 v11 v12 FL FC8 Fp Fc[2] FC4 Fl FC8} VBC6 v13 v14 FC8 FC8 Fi FC5 FC8 FC8 FC7 FC13 Fp FC8} BC6 Fi Fc:2 FC8 Fi} Fp FL Fi Fp Fi[3] Fc FL Fp FD}


S20677C14 ::~S20677C14(){ note_dtor("S20677C14", this);} // tgen
S20677C14 ::S20677C14(){ note_ctor("S20677C14", this);} // tgen

static void Test_S20677C14()
{
  extern Class_Descriptor cd_S20677C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(311,866)];
    init_test(&cd_S20677C14, buf);
    S20677C14 *dp, &lv = *(dp=new (buf) S20677C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4960,3460), "sizeof(S20677C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C14)");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*)(S20677C15*), ABISELECT(3568,2472), "S20677C14");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*)(S20677C15*), ABISELECT(3568,2472), "S20677C14");
    /*is_ambiguous_... S20677C14::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(3568,2472), "S20677C14");
    /*is_ambiguous_... S20677C14::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(3568,2472), "S20677C14");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C15*), ABISELECT(3568,2472), "S20677C14");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C16*), ABISELECT(3568,2472), "S20677C14");
    /*is_ambiguous_... S20677C14::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(3568,2472), "S20677C14");
    /*is_ambiguous_... S20677C14::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(3568,2472), "S20677C14");
    check_base_class_offset(lv, (S20677C3*)(S20677C2*), ABISELECT(3568,2472), "S20677C14");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*)(S20677C13*), ABISELECT(3568,2472), "S20677C14");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*)(S20677C15*), 0, "S20677C14");
    check_base_class_offset(lv, (S20677C4*)(S20677C15*), 0, "S20677C14");
    /*is_ambiguous_... S20677C14::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(3856,2676), "S20677C14");
    /*is_ambiguous_... S20677C13::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C13*), ABISELECT(3856,2676), "S20677C14");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*)(S20677C13*), ABISELECT(3856,2676), "S20677C14");
    check_base_class_offset(lv, (S20677C12*)(S20677C15*), ABISELECT(3616,2512), "S20677C14");
    check_base_class_offset(lv, (S20677C12*)(S20677C11*)(S20677C13*), ABISELECT(3616,2512), "S20677C14");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C15*), ABISELECT(416,292), "S20677C14");
    check_base_class_offset(lv, (S20677C8*)(S20677C15*), ABISELECT(4000,2776), "S20677C14");
    check_base_class_offset(lv, (S20677C8*)(S20677C17*), ABISELECT(4000,2776), "S20677C14");
    check_base_class_offset(lv, (S20677C5*)(S20677C16*), ABISELECT(4272,2960), "S20677C14");
    check_base_class_offset(lv, (S20677C16*)(S20677C15*), ABISELECT(4272,2960), "S20677C14");
    check_base_class_offset(lv, (S20677C15*), 0, "S20677C14");
    check_base_class_offset(lv, (S20677C17*), ABISELECT(608,420), "S20677C14");
    /*is_ambiguous_... S20677C14::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(4448,3096), "S20677C14");
    check_base_class_offset(lv, (S20677C4*)(S20677C11*)(S20677C13*), ABISELECT(4448,3096), "S20677C14");
    check_base_class_offset(lv, (S20677C4*)(S20677C2*), ABISELECT(4448,3096), "S20677C14");
    check_base_class_offset(lv, (S20677C2*)(S20677C11*)(S20677C13*), ABISELECT(4856,3388), "S20677C14");
    check_base_class_offset(lv, (S20677C11*)(S20677C13*), ABISELECT(2144,1484), "S20677C14");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C12*)(S20677C13*), ABISELECT(3232,2236), "S20677C14");
    check_base_class_offset(lv, (S20677C13*), ABISELECT(2144,1484), "S20677C14");
    check_field_offset(lv, s20677c14f0, ABISELECT(3480,2412), "S20677C14.s20677c14f0");
    check_field_offset(lv, s20677c14f1, ABISELECT(3488,2416), "S20677C14.s20677c14f1");
    check_field_offset(lv, s20677c14f2, ABISELECT(3496,2424), "S20677C14.s20677c14f2");
    check_field_offset(lv, s20677c14f3, ABISELECT(3504,2428), "S20677C14.s20677c14f3");
    check_field_offset(lv, s20677c14f4, ABISELECT(3512,2432), "S20677C14.s20677c14f4");
    check_field_offset(lv, s20677c14f5, ABISELECT(3524,2444), "S20677C14.s20677c14f5");
    check_field_offset(lv, s20677c14f6, ABISELECT(3528,2448), "S20677C14.s20677c14f6");
    check_field_offset(lv, s20677c14f7, ABISELECT(3536,2456), "S20677C14.s20677c14f7");
    check_field_offset(lv, s20677c14f8, ABISELECT(3552,2460), "S20677C14.s20677c14f8");
    test_class_info(&lv, &cd_S20677C14);
    dp->~S20677C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C14(Test_S20677C14, "S20677C14", ABISELECT(4960,3460));

#else // __cplusplus

extern void _ZN9S20677C14C1Ev();
extern void _ZN9S20677C14D1Ev();
Name_Map name_map_S20677C14[] = {
  NSPAIR(_ZN9S20677C14C1Ev),
  NSPAIR(_ZN9S20677C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C8;
extern VTBL_ENTRY _ZTI8S20677C8[];
extern  VTBL_ENTRY _ZTV8S20677C8[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C16;
extern VTBL_ENTRY _ZTI9S20677C16[];
extern  VTBL_ENTRY _ZTV9S20677C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C16[];
extern Class_Descriptor cd_S20677C15;
extern VTBL_ENTRY _ZTI9S20677C15[];
extern  VTBL_ENTRY _ZTV9S20677C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C15[];
extern Class_Descriptor cd_S20677C17;
extern VTBL_ENTRY _ZTI9S20677C17[];
extern  VTBL_ENTRY _ZTV9S20677C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C17[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C2;
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C13;
extern VTBL_ENTRY _ZTI9S20677C13[];
extern  VTBL_ENTRY _ZTV9S20677C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C13[];
static Base_Class bases_S20677C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(3568,2472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20677C5,    0, //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
    9, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20677C4,    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
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20677C5,    ABISELECT(3856,2676), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(3616,2512), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(416,292), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20677C8,    ABISELECT(4000,2776), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(4272,2960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20677C16,    ABISELECT(4272,2960), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20677C15,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C17,    ABISELECT(608,420), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C5,    ABISELECT(4448,3096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(4448,3096), //bcp->offset
    55, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20677C2,    ABISELECT(4856,3388), //bcp->offset
    64, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20677C11,    ABISELECT(2144,1484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20677C12,    ABISELECT(3232,2236), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20677C13,    ABISELECT(2144,1484), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C14[];
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
extern void _ZN9S20677C173v22Ev();
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN8S20677C82v8Ev();
extern void _ZN9S20677C163v15Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY vtc_S20677C14[] = {
  ABISELECT(4856,3388),
  ABISELECT(4448,3096),
  ABISELECT(4272,2960),
  ABISELECT(4000,2776),
  ABISELECT(3856,2676),
  ABISELECT(3616,2512),
  ABISELECT(3568,2472),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
  ABISELECT(3152,2180),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  ABISELECT(3392,2356),
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN9S20677C173v22Ev,
  ABISELECT(1712,1192),
  ABISELECT(1472,1028),
  ABISELECT(2712,1904),
  ABISELECT(1424,988),
  ABISELECT(2304,1612),
  ABISELECT(-2144,-1484),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  ABISELECT(624,440),
  ABISELECT(336,236),
  ABISELECT(-3232,-2236),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  ABISELECT(-3616,-2512),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(-288,-204),
  ABISELECT(-3856,-2676),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  0,
  ABISELECT(-4000,-2776),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
  0,
  ABISELECT(-704,-488),
  ABISELECT(-4272,-2960),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
  0,
  0,
  0,
  ABISELECT(-880,-624),
  ABISELECT(-4448,-3096),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1288,-916),
  ABISELECT(-4856,-3388),
  (VTBL_ENTRY)&(_ZTI9S20677C14[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern VTBL_ENTRY _ZTV9S20677C14[];
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C15__9S20677C14[] = {
  ABISELECT(4272,2960),
  ABISELECT(4000,2776),
  ABISELECT(3856,2676),
  ABISELECT(3616,2512),
  ABISELECT(3568,2472),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C49S20677C15__9S20677C14[] = {
  ABISELECT(3568,2472),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C49S20677C15__9S20677C14[] = {
  ABISELECT(3568,2472),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C15__A2__9S20677C14[] = {
  ABISELECT(3152,2180),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C15__9S20677C14[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  ABISELECT(-3616,-2512),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C15__9S20677C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-3856,-2676),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A__9S20677C15__9S20677C14[] = {
  ABISELECT(3152,2180),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__9S20677C15__9S20677C14[] = {
  0,
  ABISELECT(-4000,-2776),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C15__9S20677C14[] = {
  0,
  ABISELECT(-704,-488),
  ABISELECT(-4272,-2960),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern void _ZN9S20677C173v22Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C17__9S20677C14[] = {
  ABISELECT(3392,2356),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C17[0]),
  (VTBL_ENTRY)&_ZN9S20677C173v22Ev,
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__9S20677C17__9S20677C14[] = {
  0,
  ABISELECT(-3392,-2356),
  (VTBL_ENTRY)&(_ZTI9S20677C17[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C13__9S20677C14[] = {
  ABISELECT(1712,1192),
  ABISELECT(1472,1028),
  ABISELECT(2712,1904),
  ABISELECT(1424,988),
  ABISELECT(2304,1612),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C119S20677C13__9S20677C14[] = {
  ABISELECT(1712,1192),
  ABISELECT(1472,1028),
  ABISELECT(2712,1904),
  ABISELECT(1424,988),
  ABISELECT(2304,1612),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C119S20677C13__9S20677C14[] = {
  0,
  0,
  0,
  ABISELECT(-880,-624),
  ABISELECT(-2304,-1612),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C119S20677C13__9S20677C14[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1288,-916),
  ABISELECT(-2712,-1904),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C119S20677C13__9S20677C14[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  ABISELECT(-1472,-1028),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C119S20677C13__9S20677C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-1712,-1192),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C129S20677C13__A1__9S20677C14[] = {
  ABISELECT(624,440),
  ABISELECT(336,236),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C129S20677C13__A1__9S20677C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-624,-440),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C13__9S20677C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-1712,-1192),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C13__9S20677C14[] = {
  0,
  0,
  0,
  ABISELECT(-880,-624),
  ABISELECT(-2304,-1612),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C13__9S20677C14[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1288,-916),
  ABISELECT(-2712,-1904),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C13__9S20677C14[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  ABISELECT(-1472,-1028),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__A__9S20677C13__9S20677C14[] = {
  ABISELECT(624,440),
  ABISELECT(336,236),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C14[] = {
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__9S20677C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C14[] = {
  ABISELECT(-288,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C14[] = {
  ABISELECT(-704,-488),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C16[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C16__A3__9S20677C14[] = {
  ABISELECT(-704,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__A1__9S20677C14[] = {
  ABISELECT(-880,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__A4__9S20677C14[] = {
  ABISELECT(-880,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C14[] = {
  ABISELECT(-408,-292),
  ABISELECT(-1288,-916),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2__9S20677C14[] = {
  0,
  0,
  0,
  ABISELECT(-880,-624),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTT_ENTRY vtt_S20677C14[] = {
  {&(_ZTV9S20677C14[9]),  9,74},
  {&(_tg__ZTV9S20677C15__9S20677C14[7]),  7,11},
  {&(_tg__ZTV8S20677C49S20677C15__9S20677C14[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C49S20677C15__9S20677C14[3]),  3,3},
  {&(_tg__ZTV8S20677C59S20677C15__A2__9S20677C14[3]),  3,3},
  {&(_tg__ZTV9S20677C12__9S20677C15__9S20677C14[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C15__9S20677C14[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A__9S20677C15__9S20677C14[3]),  3,3},
  {&(_tg__ZTV8S20677C8__9S20677C15__9S20677C14[3]),  3,4},
  {&(_tg__ZTV9S20677C16__9S20677C15__9S20677C14[4]),  4,5},
  {&(_tg__ZTV9S20677C17__9S20677C14[3]),  3,4},
  {&(_tg__ZTV8S20677C8__9S20677C17__9S20677C14[3]),  3,4},
  {&(_tg__ZTV9S20677C13__9S20677C14[7]),  7,9},
  {&(_tg__ZTV9S20677C119S20677C13__9S20677C14[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C119S20677C13__9S20677C14[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C119S20677C13__9S20677C14[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C119S20677C13__9S20677C14[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C119S20677C13__9S20677C14[3]),  3,3},
  {&(_tg__ZTV9S20677C129S20677C13__A1__9S20677C14[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C129S20677C13__A1__9S20677C14[3]),  3,3},
  {&(_tg__ZTV8S20677C5__9S20677C13__9S20677C14[3]),  3,3},
  {&(_tg__ZTV8S20677C4__9S20677C13__9S20677C14[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C13__9S20677C14[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C13__9S20677C14[6]),  6,8},
  {&(_tg__ZTV9S20677C12__A__9S20677C13__9S20677C14[4]),  4,6},
  {&(_ZTV9S20677C14[41]),  41,74},
  {&(_ZTV9S20677C14[46]),  46,74},
  {&(_ZTV9S20677C14[16]),  16,74},
  {&(_ZTV9S20677C14[49]),  49,74},
  {&(_ZTV9S20677C14[54]),  54,74},
  {&(_ZTV9S20677C14[19]),  19,74},
  {&(_ZTV9S20677C14[27]),  27,74},
  {&(_ZTV9S20677C14[61]),  61,74},
  {&(_ZTV9S20677C14[71]),  71,74},
  {&(_ZTV9S20677C14[33]),  33,74},
  {&(_tg__ZTV9S20677C12__9S20677C14[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__9S20677C14[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A1__9S20677C14[3]),  3,3},
  {&(_tg__ZTV9S20677C16__9S20677C14[3]),  3,4},
  {&(_tg__ZTV8S20677C59S20677C16__A3__9S20677C14[3]),  3,3},
  {&(_tg__ZTV8S20677C4__A1__9S20677C14[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__A4__9S20677C14[3]),  3,3},
  {&(_tg__ZTV8S20677C2__9S20677C14[4]),  4,7},
  {&(_tg__ZTV8S20677C4__8S20677C2__9S20677C14[6]),  6,9},
};
extern VTBL_ENTRY _ZTI9S20677C14[];
extern  VTBL_ENTRY _ZTV9S20677C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C14[];
Class_Descriptor cd_S20677C14 = {  "S20677C14", // class name
  bases_S20677C14, 17,
  &(vtc_S20677C14[0]), // expected_vtbl_contents
  &(vtt_S20677C14[0]), // expected_vtt_contents
  ABISELECT(4960,3460), // object size
  NSPAIRA(_ZTI9S20677C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20677C14),74, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C14),44, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20677C10  : S20677C11 {
  int s20677c10f0[2];
  ::S20677C6_nt s20677c10f1;
  ::S20677C6_nt s20677c10f2;
  ::S20677C6_nt s20677c10f3;
  ::S20677C6_nt s20677c10f4;
  ::S20677C6_nt s20677c10f5;
  ::S20677C13 s20677c10f6;
  long s20677c10f7[4];
  ::S20677C6_nt s20677c10f8;
  ::S20677C14 s20677c10f9[2];
  char s20677c10f10;
  ::S20677C6_nt s20677c10f11;
  virtual void  v14(); // _ZN9S20677C103v14Ev
  ~S20677C10(); // tgen
  S20677C10(); // tgen
};
//SIG(-1 S20677C10) C1{ BC2{ VBC3{ VBC4{ m Fp FL[4] Fs} BC5{ VBC4 FD Fi FC4 FC4} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC6{ VBC4 VBC3 v5 v6 v7 FL FC7{} Fp Fc[2] FC4 Fl FC7} VBC8{ VBC4 VBC5 v8 v9 Fi FC5 FL Fi Fp} v10 v11 FC7 FC7 Fi FC5 FC7 FC7 FC9{ v12 FC7 FC5 FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} v1 Fi[2] FC7 FC7 FC7 FC7 FC7 FC10{ VBC5 BC2 BC8 Fi Fc:2 FC7 Fi} Fl[4] FC7 FC11{ BC12{ BC3 VBC8 BC5 VBC9 VBC13{ BC5 v13 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v14 Fl FL FD FC7} BC14{ VBC9 v15 FC12 FC7 Fl Fi[2]} BC10 Fp FL Fi Fp Fi[3] Fc FL Fp FD}[2] Fc FC7}


void  S20677C10 ::v14(){vfunc_called(this, "_ZN9S20677C103v14Ev");}
S20677C10 ::~S20677C10(){ note_dtor("S20677C10", this);} // tgen
S20677C10 ::S20677C10(){ note_ctor("S20677C10", this);} // tgen

static void Test_S20677C10()
{
  extern Class_Descriptor cd_S20677C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(896,2495)];
    init_test(&cd_S20677C10, buf);
    S20677C10 *dp, &lv = *(dp=new (buf) S20677C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14320,9976), "sizeof(S20677C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C10)");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(13784,9600), "S20677C10");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(13784,9600), "S20677C10");
    check_base_class_offset(lv, (S20677C3*)(S20677C2*), ABISELECT(13784,9600), "S20677C10");
    check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(13784,9600), "S20677C10");
    /*is_ambiguous_... S20677C10::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(13784,9600), "S20677C10");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(13376,9308), "S20677C10");
    check_base_class_offset(lv, (S20677C4*)(S20677C11*), ABISELECT(13376,9308), "S20677C10");
    check_base_class_offset(lv, (S20677C4*)(S20677C2*), ABISELECT(13376,9308), "S20677C10");
    check_base_class_offset(lv, (S20677C2*)(S20677C11*), ABISELECT(13832,9640), "S20677C10");
    check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(14176,9876), "S20677C10");
    check_base_class_offset(lv, (S20677C12*)(S20677C11*), ABISELECT(13936,9712), "S20677C10");
    check_base_class_offset(lv, (S20677C11*), 0, "S20677C10");
    check_field_offset(lv, s20677c10f0, ABISELECT(1084,752), "S20677C10.s20677c10f0");
    check_field_offset(lv, s20677c10f1, ABISELECT(1092,760), "S20677C10.s20677c10f1");
    check_field_offset(lv, s20677c10f2, ABISELECT(1093,761), "S20677C10.s20677c10f2");
    check_field_offset(lv, s20677c10f3, ABISELECT(1094,762), "S20677C10.s20677c10f3");
    check_field_offset(lv, s20677c10f4, ABISELECT(1095,763), "S20677C10.s20677c10f4");
    check_field_offset(lv, s20677c10f5, ABISELECT(1096,764), "S20677C10.s20677c10f5");
    check_field_offset(lv, s20677c10f6, ABISELECT(1104,768), "S20677C10.s20677c10f6");
    check_field_offset(lv, s20677c10f7, ABISELECT(3392,2364), "S20677C10.s20677c10f7");
    check_field_offset(lv, s20677c10f8, ABISELECT(3424,2380), "S20677C10.s20677c10f8");
    check_field_offset(lv, s20677c10f9, ABISELECT(3440,2384), "S20677C10.s20677c10f9");
    check_field_offset(lv, s20677c10f10, ABISELECT(13360,9304), "S20677C10.s20677c10f10");
    check_field_offset(lv, s20677c10f11, ABISELECT(13361,9305), "S20677C10.s20677c10f11");
    test_class_info(&lv, &cd_S20677C10);
    dp->~S20677C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C10(Test_S20677C10, "S20677C10", ABISELECT(14320,9976));

#else // __cplusplus

extern void _ZN9S20677C10C1Ev();
extern void _ZN9S20677C10D1Ev();
Name_Map name_map_S20677C10[] = {
  NSPAIR(_ZN9S20677C10C1Ev),
  NSPAIR(_ZN9S20677C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C2;
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
static Base_Class bases_S20677C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(13784,9600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20677C5,    ABISELECT(13376,9308), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(13376,9308), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20677C2,    ABISELECT(13832,9640), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(14176,9876), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(13936,9712), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C10[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C103v14Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY vtc_S20677C10[] = {
  ABISELECT(14176,9876),
  ABISELECT(13936,9712),
  ABISELECT(13832,9640),
  ABISELECT(13784,9600),
  ABISELECT(13376,9308),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20677C103v14Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13376,-9308),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13832,-9640),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-13936,-9712),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(-392,-276),
  ABISELECT(-14176,-9876),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
};
extern VTBL_ENTRY _ZTV9S20677C10[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C11__9S20677C10[] = {
  ABISELECT(14176,9876),
  ABISELECT(13936,9712),
  ABISELECT(13832,9640),
  ABISELECT(13784,9600),
  ABISELECT(13376,9308),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C11__9S20677C10[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13376,-9308),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C11__9S20677C10[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13832,-9640),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C11__9S20677C10[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-13936,-9712),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C11__9S20677C10[] = {
  ABISELECT(-392,-276),
  ABISELECT(-14176,-9876),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C10[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__9S20677C10[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C10[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2__9S20677C10[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C10[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__9S20677C10[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C10[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C10[] = {
  {&(_ZTV9S20677C10[7]),  7,40},
  {&(_tg__ZTV9S20677C11__9S20677C10[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C11__9S20677C10[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C11__9S20677C10[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C11__9S20677C10[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C11__9S20677C10[3]),  3,3},
  {&(_ZTV9S20677C10[16]),  16,40},
  {&(_ZTV9S20677C10[26]),  26,40},
  {&(_ZTV9S20677C10[35]),  35,40},
  {&(_ZTV9S20677C10[40]),  40,40},
  {&(_tg__ZTV8S20677C4__9S20677C10[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__9S20677C10[3]),  3,3},
  {&(_tg__ZTV8S20677C2__9S20677C10[4]),  4,7},
  {&(_tg__ZTV8S20677C4__8S20677C2__9S20677C10[6]),  6,9},
  {&(_tg__ZTV9S20677C12__9S20677C10[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__9S20677C10[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A1__9S20677C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C10[];
extern  VTBL_ENTRY _ZTV9S20677C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C10[];
Class_Descriptor cd_S20677C10 = {  "S20677C10", // class name
  bases_S20677C10, 7,
  &(vtc_S20677C10[0]), // expected_vtbl_contents
  &(vtt_S20677C10[0]), // expected_vtt_contents
  ABISELECT(14320,9976), // object size
  NSPAIRA(_ZTI9S20677C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20677C10),40, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C10),17, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20677C19  : S20677C9 , S20677C12 , virtual S20677C15 {
  void *s20677c19f0;
  char s20677c19f1[4];
  ::S20677C4 s20677c19f2;
  int s20677c19f3[8];
  ::S20677C6_nt s20677c19f4;
  ::S20677C7 s20677c19f5;
  ::S20677C6_nt s20677c19f6;
  long double s20677c19f7;
  ::S20677C5 s20677c19f8[9];
  long double s20677c19f9[10];
  short s20677c19f10;
  virtual void  v17(); // _ZN9S20677C193v17Ev
  virtual void  v18(); // _ZN9S20677C193v18Ev
  virtual void  v19(); // _ZN9S20677C193v19Ev
  virtual void  v20(); // _ZN9S20677C193v20Ev
  ~S20677C19(); // tgen
  S20677C19(); // tgen
};
//SIG(-1 S20677C19) C1{ BC2{ BC3{ m Fp FL[4] Fs} FC3 Fi FD Fi FL Fl} BC4{ VBC3 VBC5{ VBC3 FD Fi FC3 FC3} v5 v6 Fi FC5 FL Fi Fp} VBC6{ BC7{ VBC3 BC5 v7 v8 v9 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC4 BC5 VBC8{ v10 FC9{} FC5 FC9 FL FC9 Fp FC9 Fp[2] FC9} VBC10{ BC5 v11 FL Fc[7] Fp Fi FC9 FC9 Fc[10]} v12 Fl FL FD FC9} v1 v2 v3 v4 Fp Fc[4] FC7 Fi[8] FC9 FC11{ VBC8 BC5 BC2 v13 Fp FC2 Fp Fi[2] FD Fi[2]} FC9 FD FC5[9] FD[10] Fs}


void  S20677C19 ::v17(){vfunc_called(this, "_ZN9S20677C193v17Ev");}
void  S20677C19 ::v18(){vfunc_called(this, "_ZN9S20677C193v18Ev");}
void  S20677C19 ::v19(){vfunc_called(this, "_ZN9S20677C193v19Ev");}
void  S20677C19 ::v20(){vfunc_called(this, "_ZN9S20677C193v20Ev");}
S20677C19 ::~S20677C19(){ note_dtor("S20677C19", this);} // tgen
S20677C19 ::S20677C19(){ note_ctor("S20677C19", this);} // tgen

static void Test_S20677C19()
{
  extern Class_Descriptor cd_S20677C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(325,921)];
    init_test(&cd_S20677C19, buf);
    S20677C19 *dp, &lv = *(dp=new (buf) S20677C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5184,3680), "sizeof(S20677C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C19)");
    check_base_class_offset(lv, (S20677C3*)(S20677C9*), ABISELECT(240,164), "S20677C19");
    check_base_class_offset(lv, (S20677C9*), ABISELECT(240,164), "S20677C19");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(3688,2636), "S20677C19");
    /*is_ambiguous_... S20677C19::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(3688,2636), "S20677C19");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*)(S20677C15*), ABISELECT(3688,2636), "S20677C19");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*)(S20677C15*), ABISELECT(3688,2636), "S20677C19");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(3688,2636), "S20677C19");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C15*), ABISELECT(3688,2636), "S20677C19");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C16*), ABISELECT(3688,2636), "S20677C19");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(3744,2676), "S20677C19");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(3744,2676), "S20677C19");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C12*), 0, "S20677C19");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*)(S20677C15*), ABISELECT(3888,2776), "S20677C19");
    check_base_class_offset(lv, (S20677C4*)(S20677C15*), ABISELECT(3888,2776), "S20677C19");
    check_base_class_offset(lv, (S20677C12*)(S20677C15*), ABISELECT(4496,3196), "S20677C19");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C15*), ABISELECT(4304,3068), "S20677C19");
    check_base_class_offset(lv, (S20677C8*)(S20677C15*), ABISELECT(4736,3360), "S20677C19");
    check_base_class_offset(lv, (S20677C5*)(S20677C16*), ABISELECT(5008,3544), "S20677C19");
    check_base_class_offset(lv, (S20677C16*)(S20677C15*), ABISELECT(5008,3544), "S20677C19");
    check_base_class_offset(lv, (S20677C15*), ABISELECT(3888,2776), "S20677C19");
    check_field_offset(lv, s20677c19f0, ABISELECT(392,276), "S20677C19.s20677c19f0");
    check_field_offset(lv, s20677c19f1, ABISELECT(400,280), "S20677C19.s20677c19f1");
    check_field_offset(lv, s20677c19f2, ABISELECT(416,284), "S20677C19.s20677c19f2");
    check_field_offset(lv, s20677c19f3, ABISELECT(880,616), "S20677C19.s20677c19f3");
    check_field_offset(lv, s20677c19f4, ABISELECT(912,648), "S20677C19.s20677c19f4");
    check_field_offset(lv, s20677c19f5, ABISELECT(928,652), "S20677C19.s20677c19f5");
    check_field_offset(lv, s20677c19f6, ABISELECT(1760,1236), "S20677C19.s20677c19f6");
    check_field_offset(lv, s20677c19f7, ABISELECT(1776,1240), "S20677C19.s20677c19f7");
    check_field_offset(lv, s20677c19f8, ABISELECT(1792,1252), "S20677C19.s20677c19f8");
    check_field_offset(lv, s20677c19f9, ABISELECT(3520,2512), "S20677C19.s20677c19f9");
    check_field_offset(lv, s20677c19f10, ABISELECT(3680,2632), "S20677C19.s20677c19f10");
    test_class_info(&lv, &cd_S20677C19);
    dp->~S20677C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C19(Test_S20677C19, "S20677C19", ABISELECT(5184,3680));

#else // __cplusplus

extern void _ZN9S20677C19C1Ev();
extern void _ZN9S20677C19D1Ev();
Name_Map name_map_S20677C19[] = {
  NSPAIR(_ZN9S20677C19C1Ev),
  NSPAIR(_ZN9S20677C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C9;
extern VTBL_ENTRY _ZTI8S20677C9[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C8;
extern VTBL_ENTRY _ZTI8S20677C8[];
extern  VTBL_ENTRY _ZTV8S20677C8[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C16;
extern VTBL_ENTRY _ZTI9S20677C16[];
extern  VTBL_ENTRY _ZTV9S20677C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C16[];
extern Class_Descriptor cd_S20677C15;
extern VTBL_ENTRY _ZTI9S20677C15[];
extern  VTBL_ENTRY _ZTV9S20677C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C15[];
static Base_Class bases_S20677C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(240,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
    1, //immediately_derived
  0, 0},
  {&cd_S20677C9,    ABISELECT(240,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
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C3,    ABISELECT(3688,2636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20677C5,    ABISELECT(3744,2676), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20677C12,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C5,    ABISELECT(3888,2776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(3888,2776), //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
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20677C12,    ABISELECT(4496,3196), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(4304,3068), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20677C8,    ABISELECT(4736,3360), //bcp->offset
    43, //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
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(5008,3544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20677C16,    ABISELECT(5008,3544), //bcp->offset
    47, //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
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20677C15,    ABISELECT(3888,2776), //bcp->offset
    17, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C19[];
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C193v17Ev();
extern void _ZN9S20677C193v18Ev();
extern void _ZN9S20677C193v19Ev();
extern void _ZN9S20677C193v20Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN8S20677C82v8Ev();
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY vtc_S20677C19[] = {
  ABISELECT(5008,3544),
  ABISELECT(4736,3360),
  ABISELECT(4496,3196),
  ABISELECT(3888,2776),
  ABISELECT(3744,2676),
  ABISELECT(3688,2636),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v20Ev,
  ABISELECT(-56,-40),
  ABISELECT(-3744,-2676),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  0,
  0,
  0,
  0,
  ABISELECT(1120,768),
  ABISELECT(848,584),
  ABISELECT(-144,-100),
  ABISELECT(608,420),
  ABISELECT(-200,-140),
  ABISELECT(-3888,-2776),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
  ABISELECT(-616,-432),
  ABISELECT(-4304,-3068),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  0,
  0,
  ABISELECT(-752,-520),
  ABISELECT(-808,-560),
  ABISELECT(-4496,-3196),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  0,
  ABISELECT(-4736,-3360),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
  0,
  ABISELECT(-1320,-908),
  ABISELECT(-5008,-3544),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern VTBL_ENTRY _ZTV9S20677C19[];
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__A__9S20677C19[] = {
  ABISELECT(3744,2676),
  ABISELECT(3688,2636),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__A__9S20677C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(-3744,-2676),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C19[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C15__9S20677C19[] = {
  ABISELECT(1120,768),
  ABISELECT(848,584),
  ABISELECT(-144,-100),
  ABISELECT(608,420),
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C49S20677C15__9S20677C19[] = {
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C49S20677C15__A1__9S20677C19[] = {
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C15__A2__9S20677C19[] = {
  ABISELECT(-616,-432),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C15__9S20677C19[] = {
  0,
  0,
  ABISELECT(-752,-520),
  ABISELECT(-808,-560),
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C15__9S20677C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A__9S20677C15__9S20677C19[] = {
  ABISELECT(-616,-432),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__9S20677C15__9S20677C19[] = {
  0,
  ABISELECT(-848,-584),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C15__9S20677C19[] = {
  0,
  ABISELECT(-1320,-908),
  ABISELECT(-1120,-768),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__A1__9S20677C19[] = {
  ABISELECT(-752,-520),
  ABISELECT(-808,-560),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__A1__9S20677C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(752,520),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C19[] = {
  ABISELECT(-1320,-908),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C16[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C16__A3__9S20677C19[] = {
  ABISELECT(-1320,-908),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C19[] = {
  {&(_ZTV9S20677C19[8]),  8,52},
  {&(_tg__ZTV9S20677C12__A__9S20677C19[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__A__9S20677C19[3]),  3,3},
  {&(_ZTV9S20677C19[17]),  17,52},
  {&(_ZTV9S20677C19[28]),  28,52},
  {&(_ZTV9S20677C19[41]),  41,52},
  {&(_ZTV9S20677C19[35]),  35,52},
  {&(_ZTV9S20677C19[46]),  46,52},
  {&(_ZTV9S20677C19[51]),  51,52},
  {&(_tg__ZTV8S20677C5__9S20677C19[3]),  3,3},
  {&(_tg__ZTV9S20677C15__9S20677C19[7]),  7,11},
  {&(_tg__ZTV8S20677C49S20677C15__9S20677C19[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C49S20677C15__A1__9S20677C19[3]),  3,3},
  {&(_tg__ZTV8S20677C59S20677C15__A2__9S20677C19[3]),  3,3},
  {&(_tg__ZTV9S20677C12__9S20677C15__9S20677C19[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C15__9S20677C19[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A__9S20677C15__9S20677C19[3]),  3,3},
  {&(_tg__ZTV8S20677C8__9S20677C15__9S20677C19[3]),  3,4},
  {&(_tg__ZTV9S20677C16__9S20677C15__9S20677C19[4]),  4,5},
  {&(_tg__ZTV9S20677C12__A1__9S20677C19[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__A1__9S20677C19[3]),  3,3},
  {&(_tg__ZTV9S20677C16__9S20677C19[3]),  3,4},
  {&(_tg__ZTV8S20677C59S20677C16__A3__9S20677C19[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C19[];
extern  VTBL_ENTRY _ZTV9S20677C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C19[];
Class_Descriptor cd_S20677C19 = {  "S20677C19", // class name
  bases_S20677C19, 13,
  &(vtc_S20677C19[0]), // expected_vtbl_contents
  &(vtt_S20677C19[0]), // expected_vtt_contents
  ABISELECT(5184,3680), // object size
  NSPAIRA(_ZTI9S20677C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20677C19),52, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C19),23, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20677C20  : S20677C13 {
  int s20677c20f0;
  ::S20677C6_nt s20677c20f1;
  short s20677c20f2;
  long s20677c20f3;
  ::S20677C5 s20677c20f4;
  long s20677c20f5;
  virtual void  v23(); // _ZN9S20677C203v23Ev
  ~S20677C20(); // tgen
  S20677C20(); // tgen
};
//SIG(-1 S20677C20) C1{ BC2{ VBC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} BC5{ VBC6{ VBC4 BC3 v2 v3 v4 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi} VBC7{ VBC4 VBC6 v5 v6 v7 FL FC8{} Fp Fc[2] FC4 Fl FC8} VBC9{ VBC4 VBC3 v8 v9 Fi FC3 FL Fi Fp} v10 v11 FC8 FC8 Fi FC3 FC8 FC8 FC10{ v12 FC8 FC3 FC8 FL FC8 Fp FC8 Fp[2] FC8} FC7 Fp FC8} BC9 Fi Fc:2 FC8 Fi} v1 Fi FC8 Fs Fl FC3 Fl}


void  S20677C20 ::v23(){vfunc_called(this, "_ZN9S20677C203v23Ev");}
S20677C20 ::~S20677C20(){ note_dtor("S20677C20", this);} // tgen
S20677C20 ::S20677C20(){ note_ctor("S20677C20", this);} // tgen

static void Test_S20677C20()
{
  extern Class_Descriptor cd_S20677C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(158,439)];
    init_test(&cd_S20677C20, buf);
    S20677C20 *dp, &lv = *(dp=new (buf) S20677C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2512,1752), "sizeof(S20677C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C20)");
    /*is_ambiguous_... S20677C20::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(1704,1184), "S20677C20");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(1704,1184), "S20677C20");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(1704,1184), "S20677C20");
    check_base_class_offset(lv, (S20677C3*)(S20677C2*), ABISELECT(1704,1184), "S20677C20");
    /*is_ambiguous_... S20677C20::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(1704,1184), "S20677C20");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*)(S20677C13*), ABISELECT(1704,1184), "S20677C20");
    /*is_ambiguous_... S20677C13::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C13*), ABISELECT(1568,1084), "S20677C20");
    /*is_ambiguous_... S20677C20::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(1568,1084), "S20677C20");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*)(S20677C13*), ABISELECT(1568,1084), "S20677C20");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(1760,1224), "S20677C20");
    check_base_class_offset(lv, (S20677C4*)(S20677C11*)(S20677C13*), ABISELECT(1760,1224), "S20677C20");
    check_base_class_offset(lv, (S20677C4*)(S20677C2*), ABISELECT(1760,1224), "S20677C20");
    check_base_class_offset(lv, (S20677C2*)(S20677C11*)(S20677C13*), ABISELECT(2168,1516), "S20677C20");
    check_base_class_offset(lv, (S20677C12*)(S20677C11*)(S20677C13*), ABISELECT(2272,1588), "S20677C20");
    check_base_class_offset(lv, (S20677C11*)(S20677C13*), 0, "S20677C20");
    /*is_ambiguous_... S20677C13::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C12*)(S20677C13*), ABISELECT(1088,752), "S20677C20");
    check_base_class_offset(lv, (S20677C13*), 0, "S20677C20");
    check_field_offset(lv, s20677c20f0, ABISELECT(1332,928), "S20677C20.s20677c20f0");
    check_field_offset(lv, s20677c20f1, ABISELECT(1336,932), "S20677C20.s20677c20f1");
    check_field_offset(lv, s20677c20f2, ABISELECT(1338,934), "S20677C20.s20677c20f2");
    check_field_offset(lv, s20677c20f3, ABISELECT(1344,936), "S20677C20.s20677c20f3");
    check_field_offset(lv, s20677c20f4, ABISELECT(1360,940), "S20677C20.s20677c20f4");
    check_field_offset(lv, s20677c20f5, ABISELECT(1552,1080), "S20677C20.s20677c20f5");
    test_class_info(&lv, &cd_S20677C20);
    dp->~S20677C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C20(Test_S20677C20, "S20677C20", ABISELECT(2512,1752));

#else // __cplusplus

extern void _ZN9S20677C20C1Ev();
extern void _ZN9S20677C20D1Ev();
Name_Map name_map_S20677C20[] = {
  NSPAIR(_ZN9S20677C20C1Ev),
  NSPAIR(_ZN9S20677C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C2;
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C13;
extern VTBL_ENTRY _ZTI9S20677C13[];
extern  VTBL_ENTRY _ZTV9S20677C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C13[];
static Base_Class bases_S20677C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1704,1184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20677C5,    ABISELECT(1568,1084), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(1760,1224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(1760,1224), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20677C2,    ABISELECT(2168,1516), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(2272,1588), //bcp->offset
    38, //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
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C11,    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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20677C12,    ABISELECT(1088,752), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20677C13,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C20[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C203v23Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY vtc_S20677C20[] = {
  ABISELECT(1568,1084),
  ABISELECT(2272,1588),
  ABISELECT(2168,1516),
  ABISELECT(1704,1184),
  ABISELECT(1760,1224),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C20[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20677C203v23Ev,
  ABISELECT(480,332),
  ABISELECT(616,432),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20677C20[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(136,100),
  ABISELECT(-1568,-1084),
  (VTBL_ENTRY)&(_ZTI9S20677C20[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1224),
  (VTBL_ENTRY)&(_ZTI9S20677C20[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1516),
  (VTBL_ENTRY)&(_ZTI9S20677C20[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1588),
  (VTBL_ENTRY)&(_ZTI9S20677C20[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
extern VTBL_ENTRY _ZTV9S20677C20[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C13__9S20677C20[] = {
  ABISELECT(1568,1084),
  ABISELECT(2272,1588),
  ABISELECT(2168,1516),
  ABISELECT(1704,1184),
  ABISELECT(1760,1224),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C119S20677C13__9S20677C20[] = {
  ABISELECT(1568,1084),
  ABISELECT(2272,1588),
  ABISELECT(2168,1516),
  ABISELECT(1704,1184),
  ABISELECT(1760,1224),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C119S20677C13__9S20677C20[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1224),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C119S20677C13__9S20677C20[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1516),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C119S20677C13__9S20677C20[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1588),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C119S20677C13__9S20677C20[] = {
  ABISELECT(136,100),
  ABISELECT(-1568,-1084),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C129S20677C13__A1__9S20677C20[] = {
  ABISELECT(480,332),
  ABISELECT(616,432),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C129S20677C13__A1__9S20677C20[] = {
  ABISELECT(136,100),
  ABISELECT(-480,-332),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C13__9S20677C20[] = {
  ABISELECT(136,100),
  ABISELECT(-1568,-1084),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C13__9S20677C20[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1224),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C13__9S20677C20[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1516),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C13__9S20677C20[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1588),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__A__9S20677C13__9S20677C20[] = {
  ABISELECT(480,332),
  ABISELECT(616,432),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20677C13[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C20[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C20[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__A1__9S20677C20[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C20[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2__9S20677C20[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C20[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__9S20677C20[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTT_ENTRY vtt_S20677C20[] = {
  {&(_ZTV9S20677C20[7]),  7,46},
  {&(_tg__ZTV9S20677C13__9S20677C20[7]),  7,9},
  {&(_tg__ZTV9S20677C119S20677C13__9S20677C20[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C119S20677C13__9S20677C20[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C119S20677C13__9S20677C20[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C119S20677C13__9S20677C20[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C119S20677C13__9S20677C20[3]),  3,3},
  {&(_tg__ZTV9S20677C129S20677C13__A1__9S20677C20[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C129S20677C13__A1__9S20677C20[3]),  3,3},
  {&(_tg__ZTV8S20677C5__9S20677C13__9S20677C20[3]),  3,3},
  {&(_tg__ZTV8S20677C4__9S20677C13__9S20677C20[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C13__9S20677C20[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C13__9S20677C20[6]),  6,8},
  {&(_tg__ZTV9S20677C12__A__9S20677C13__9S20677C20[4]),  4,6},
  {&(_ZTV9S20677C20[19]),  19,46},
  {&(_ZTV9S20677C20[25]),  25,46},
  {&(_ZTV9S20677C20[35]),  35,46},
  {&(_ZTV9S20677C20[44]),  44,46},
  {&(_ZTV9S20677C20[14]),  14,46},
  {&(_tg__ZTV8S20677C5__9S20677C20[3]),  3,3},
  {&(_tg__ZTV8S20677C4__9S20677C20[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__A1__9S20677C20[3]),  3,3},
  {&(_tg__ZTV8S20677C2__9S20677C20[4]),  4,7},
  {&(_tg__ZTV8S20677C4__8S20677C2__9S20677C20[6]),  6,9},
  {&(_tg__ZTV9S20677C12__9S20677C20[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__9S20677C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C20[];
extern  VTBL_ENTRY _ZTV9S20677C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C20[];
Class_Descriptor cd_S20677C20 = {  "S20677C20", // class name
  bases_S20677C20, 9,
  &(vtc_S20677C20[0]), // expected_vtbl_contents
  &(vtt_S20677C20[0]), // expected_vtt_contents
  ABISELECT(2512,1752), // object size
  NSPAIRA(_ZTI9S20677C20),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20677C20),46, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C20),26, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20677C21  {
  long s20677c21f0;
  ::S20677C16 s20677c21f1;
  ::S20677C6_nt s20677c21f2;
  int s20677c21f3;
  virtual void  v24(); // _ZN9S20677C213v24Ev
  ~S20677C21(); // tgen
  S20677C21(); // tgen
};
//SIG(-1 S20677C21) C1{ v1 Fl FC2{ BC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} v2 FL Fc[7] Fp Fi FC5{} FC5 Fc[10]} FC5 Fi}


void  S20677C21 ::v24(){vfunc_called(this, "_ZN9S20677C213v24Ev");}
S20677C21 ::~S20677C21(){ note_dtor("S20677C21", this);} // tgen
S20677C21 ::S20677C21(){ note_ctor("S20677C21", this);} // tgen

static void Test_S20677C21()
{
  extern Class_Descriptor cd_S20677C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,49)];
    init_test(&cd_S20677C21, buf);
    S20677C21 *dp, &lv = *(dp=new (buf) S20677C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,192), "sizeof(S20677C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C21)");
    check_field_offset(lv, s20677c21f0, ABISELECT(8,4), "S20677C21.s20677c21f0");
    check_field_offset(lv, s20677c21f1, ABISELECT(16,8), "S20677C21.s20677c21f1");
    check_field_offset(lv, s20677c21f2, ABISELECT(240,184), "S20677C21.s20677c21f2");
    check_field_offset(lv, s20677c21f3, ABISELECT(244,188), "S20677C21.s20677c21f3");
    test_class_info(&lv, &cd_S20677C21);
    dp->~S20677C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C21(Test_S20677C21, "S20677C21", ABISELECT(256,192));

#else // __cplusplus

extern void _ZN9S20677C21C1Ev();
extern void _ZN9S20677C21D1Ev();
Name_Map name_map_S20677C21[] = {
  NSPAIR(_ZN9S20677C21C1Ev),
  NSPAIR(_ZN9S20677C21D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20677C21[];
extern void _ZN9S20677C213v24Ev();
static  VTBL_ENTRY vtc_S20677C21[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C21[0]),
  (VTBL_ENTRY)&_ZN9S20677C213v24Ev,
};
extern VTBL_ENTRY _ZTI9S20677C21[];
extern  VTBL_ENTRY _ZTV9S20677C21[];
Class_Descriptor cd_S20677C21 = {  "S20677C21", // class name
  0,0,//no base classes
  &(vtc_S20677C21[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,192), // object size
  NSPAIRA(_ZTI9S20677C21),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20677C21),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20677C18  : virtual S20677C11 , virtual S20677C19 {
  void *s20677c18f0;
  ::S20677C20 s20677c18f1;
  void *s20677c18f2;
  __tsi64 s20677c18f3;
  int s20677c18f4;
  ::S20677C6_nt s20677c18f5;
  void *s20677c18f6;
  ::S20677C21 s20677c18f7;
  long s20677c18f8;
  virtual void  v21(); // _ZN9S20677C183v21Ev
  ~S20677C18(); // tgen
  S20677C18(); // tgen
};
//SIG(-1 S20677C18) C1{ VBC2{ VBC3{ VBC4{ m Fp FL[4] Fs} BC5{ VBC4 FD Fi FC4 FC4} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC6{ VBC4 VBC3 v5 v6 v7 FL FC7{} Fp Fc[2] FC4 Fl FC7} VBC8{ VBC4 VBC5 v8 v9 Fi FC5 FL Fi Fp} v10 v11 FC7 FC7 Fi FC5 FC7 FC7 FC9{ v12 FC7 FC5 FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} VBC10{ BC11{ BC4 FC4 Fi FD Fi FL Fl} BC8 VBC12{ BC3 VBC8 BC5 VBC9 VBC13{ BC5 v13 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v14 Fl FL FD FC7} v15 v16 v17 v18 Fp Fc[4] FC3 Fi[8] FC7 FC14{ VBC9 BC5 BC11 v21 Fp FC11 Fp Fi[2] FD Fi[2]} FC7 FD FC5[9] FD[10] Fs} v1 Fp FC15{ BC16{ VBC5 BC2 BC8 Fi Fc:2 FC7 Fi} v19 Fi FC7 Fs Fl FC5 Fl} Fp FL Fi FC7 Fp FC17{ v20 Fl FC13 FC7 Fi} Fl}


void  S20677C18 ::v21(){vfunc_called(this, "_ZN9S20677C183v21Ev");}
S20677C18 ::~S20677C18(){ note_dtor("S20677C18", this);} // tgen
S20677C18 ::S20677C18(){ note_ctor("S20677C18", this);} // tgen

static void Test_S20677C18()
{
  extern Class_Descriptor cd_S20677C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(602,1695)];
    init_test(&cd_S20677C18, buf);
    S20677C18 *dp, &lv = *(dp=new (buf) S20677C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9616,6776), "sizeof(S20677C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C18)");
    /*is_ambiguous_... S20677C18::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(4328,3024), "S20677C18");
    /*is_ambiguous_... S20677C18::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(4328,3024), "S20677C18");
    check_base_class_offset(lv, (S20677C3*)(S20677C2*), ABISELECT(4328,3024), "S20677C18");
    /*is_ambiguous_... S20677C18::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(4328,3024), "S20677C18");
    /*is_ambiguous_... S20677C18::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(4328,3024), "S20677C18");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*)(S20677C19*), ABISELECT(4328,3024), "S20677C18");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*)(S20677C15*), ABISELECT(4328,3024), "S20677C18");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*)(S20677C15*), ABISELECT(4328,3024), "S20677C18");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C15*), ABISELECT(4328,3024), "S20677C18");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C16*), ABISELECT(4328,3024), "S20677C18");
    /*is_ambiguous_... S20677C18::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(3920,2732), "S20677C18");
    check_base_class_offset(lv, (S20677C4*)(S20677C11*), ABISELECT(3920,2732), "S20677C18");
    check_base_class_offset(lv, (S20677C4*)(S20677C2*), ABISELECT(3920,2732), "S20677C18");
    check_base_class_offset(lv, (S20677C2*)(S20677C11*), ABISELECT(4376,3064), "S20677C18");
    /*is_ambiguous_... S20677C18::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(4720,3300), "S20677C18");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*)(S20677C19*), ABISELECT(4720,3300), "S20677C18");
    check_base_class_offset(lv, (S20677C12*)(S20677C11*), ABISELECT(4480,3136), "S20677C18");
    check_base_class_offset(lv, (S20677C12*)(S20677C15*), ABISELECT(4480,3136), "S20677C18");
    check_base_class_offset(lv, (S20677C11*), ABISELECT(2832,1980), "S20677C18");
    check_base_class_offset(lv, (S20677C3*)(S20677C9*)(S20677C19*), ABISELECT(5104,3564), "S20677C18");
    check_base_class_offset(lv, (S20677C9*)(S20677C19*), ABISELECT(5104,3564), "S20677C18");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C12*)(S20677C19*), ABISELECT(4864,3400), "S20677C18");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*)(S20677C15*), ABISELECT(8560,6036), "S20677C18");
    check_base_class_offset(lv, (S20677C4*)(S20677C15*), ABISELECT(8560,6036), "S20677C18");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C15*), ABISELECT(8976,6328), "S20677C18");
    check_base_class_offset(lv, (S20677C8*)(S20677C15*), ABISELECT(9168,6456), "S20677C18");
    check_base_class_offset(lv, (S20677C5*)(S20677C16*), ABISELECT(9440,6640), "S20677C18");
    check_base_class_offset(lv, (S20677C16*)(S20677C15*), ABISELECT(9440,6640), "S20677C18");
    check_base_class_offset(lv, (S20677C15*)(S20677C19*), ABISELECT(8560,6036), "S20677C18");
    check_base_class_offset(lv, (S20677C19*), ABISELECT(4864,3400), "S20677C18");
    check_field_offset(lv, s20677c18f0, ABISELECT(8,4), "S20677C18.s20677c18f0");
    check_field_offset(lv, s20677c18f1, ABISELECT(16,8), "S20677C18.s20677c18f1");
    check_field_offset(lv, s20677c18f2, ABISELECT(2528,1760), "S20677C18.s20677c18f2");
    check_field_offset(lv, s20677c18f3, ABISELECT(2536,1764), "S20677C18.s20677c18f3");
    check_field_offset(lv, s20677c18f4, ABISELECT(2544,1772), "S20677C18.s20677c18f4");
    check_field_offset(lv, s20677c18f5, ABISELECT(2548,1776), "S20677C18.s20677c18f5");
    check_field_offset(lv, s20677c18f6, ABISELECT(2552,1780), "S20677C18.s20677c18f6");
    check_field_offset(lv, s20677c18f7, ABISELECT(2560,1784), "S20677C18.s20677c18f7");
    check_field_offset(lv, s20677c18f8, ABISELECT(2816,1976), "S20677C18.s20677c18f8");
    test_class_info(&lv, &cd_S20677C18);
    dp->~S20677C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C18(Test_S20677C18, "S20677C18", ABISELECT(9616,6776));

#else // __cplusplus

extern void _ZN9S20677C18C1Ev();
extern void _ZN9S20677C18D1Ev();
Name_Map name_map_S20677C18[] = {
  NSPAIR(_ZN9S20677C18C1Ev),
  NSPAIR(_ZN9S20677C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C2;
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C9;
extern VTBL_ENTRY _ZTI8S20677C9[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C8;
extern VTBL_ENTRY _ZTI8S20677C8[];
extern  VTBL_ENTRY _ZTV8S20677C8[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C16;
extern VTBL_ENTRY _ZTI9S20677C16[];
extern  VTBL_ENTRY _ZTV9S20677C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C16[];
extern Class_Descriptor cd_S20677C15;
extern VTBL_ENTRY _ZTI9S20677C15[];
extern  VTBL_ENTRY _ZTV9S20677C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C15[];
extern Class_Descriptor cd_S20677C19;
extern VTBL_ENTRY _ZTI9S20677C19[];
extern  VTBL_ENTRY _ZTV9S20677C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C19[];
static Base_Class bases_S20677C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(4328,3024), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20677C5,    ABISELECT(3920,2732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(3920,2732), //bcp->offset
    24, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20677C2,    ABISELECT(4376,3064), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(4720,3300), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(4480,3136), //bcp->offset
    43, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C11,    ABISELECT(2832,1980), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //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_S20677C3,    ABISELECT(5104,3564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20677C9,    ABISELECT(5104,3564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20677C12,    ABISELECT(4864,3400), //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
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20677C5,    ABISELECT(8560,6036), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(8560,6036), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20677C5,    ABISELECT(8976,6328), //bcp->offset
    89, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20677C8,    ABISELECT(9168,6456), //bcp->offset
    92, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(9440,6640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20677C16,    ABISELECT(9440,6640), //bcp->offset
    96, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20677C15,    ABISELECT(8560,6036), //bcp->offset
    74, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S20677C19,    ABISELECT(4864,3400), //bcp->offset
    54, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C18[];
extern void _ZN9S20677C183v21Ev();
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C193v17Ev();
extern void _ZN9S20677C193v18Ev();
extern void _ZN9S20677C193v19Ev();
extern void _ZN9S20677C193v20Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
extern void _ZN8S20677C82v8Ev();
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY vtc_S20677C18[] = {
  ABISELECT(9440,6640),
  ABISELECT(9168,6456),
  ABISELECT(8560,6036),
  ABISELECT(4864,3400),
  ABISELECT(4720,3300),
  ABISELECT(4480,3136),
  ABISELECT(4376,3064),
  ABISELECT(4328,3024),
  ABISELECT(3920,2732),
  ABISELECT(2832,1980),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C183v21Ev,
  0,
  0,
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  ABISELECT(-2832,-1980),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-3920,-2732),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-4376,-3064),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-4480,-3136),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(-392,-276),
  ABISELECT(-4720,-3300),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(4576,3240),
  ABISELECT(4304,3056),
  ABISELECT(-384,-264),
  ABISELECT(3696,2636),
  ABISELECT(-144,-100),
  ABISELECT(-536,-376),
  ABISELECT(-4864,-3400),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-3840,-2736),
  ABISELECT(-4080,-2900),
  ABISELECT(-4232,-3012),
  ABISELECT(-8560,-6036),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
  ABISELECT(-4648,-3304),
  ABISELECT(-8976,-6328),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  0,
  ABISELECT(-9168,-6456),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
  0,
  ABISELECT(-5112,-3616),
  ABISELECT(-9440,-6640),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern VTBL_ENTRY _ZTV9S20677C18[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C11__9S20677C18[] = {
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C11__9S20677C18[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C11__9S20677C18[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-1544,-1084),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C11__9S20677C18[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-1648,-1156),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C11__9S20677C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(-1888,-1320),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C18[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__9S20677C18[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C18[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2__9S20677C18[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C18[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__9S20677C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C18[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C193v17Ev();
extern void _ZN9S20677C193v18Ev();
extern void _ZN9S20677C193v19Ev();
extern void _ZN9S20677C193v20Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C19__9S20677C18[] = {
  ABISELECT(4576,3240),
  ABISELECT(4304,3056),
  ABISELECT(-384,-264),
  ABISELECT(3696,2636),
  ABISELECT(-144,-100),
  ABISELECT(-536,-376),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v20Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C129S20677C19__A1__9S20677C18[] = {
  ABISELECT(-144,-100),
  ABISELECT(-536,-376),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C129S20677C19__A1__9S20677C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C19__9S20677C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C15__9S20677C19__9S20677C18[] = {
  0,
  0,
  0,
  0,
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-3840,-2736),
  ABISELECT(-4080,-2900),
  ABISELECT(-4232,-3012),
  ABISELECT(-3696,-2636),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__A1__9S20677C19__9S20677C18[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(384,264),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C15__A2__9S20677C19__9S20677C18[] = {
  ABISELECT(-4648,-3304),
  ABISELECT(-4112,-2928),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__9S20677C19__9S20677C18[] = {
  0,
  ABISELECT(-4304,-3056),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C19__9S20677C18[] = {
  0,
  ABISELECT(-5112,-3616),
  ABISELECT(-4576,-3240),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C15__9S20677C18[] = {
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-3840,-2736),
  ABISELECT(-4080,-2900),
  ABISELECT(-4232,-3012),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C49S20677C15__A1__9S20677C18[] = {
  ABISELECT(-4232,-3012),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C49S20677C15__A2__9S20677C18[] = {
  ABISELECT(-4232,-3012),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C15__A3__9S20677C18[] = {
  ABISELECT(-4648,-3304),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C15__9S20677C18[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(4080,2900),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C15__9S20677C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(3840,2736),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A__9S20677C15__9S20677C18[] = {
  ABISELECT(-4648,-3304),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__9S20677C15__9S20677C18[] = {
  0,
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C15__9S20677C18[] = {
  0,
  ABISELECT(-5112,-3616),
  ABISELECT(-880,-604),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C18[] = {
  ABISELECT(-5112,-3616),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C16[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C16__A4__9S20677C18[] = {
  ABISELECT(-5112,-3616),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C18[] = {
  {&(_ZTV9S20677C18[12]),  12,101},
  {&(_ZTV9S20677C18[22]),  22,101},
  {&(_ZTV9S20677C18[30]),  30,101},
  {&(_ZTV9S20677C18[40]),  40,101},
  {&(_ZTV9S20677C18[49]),  49,101},
  {&(_ZTV9S20677C18[54]),  54,101},
  {&(_ZTV9S20677C18[68]),  68,101},
  {&(_ZTV9S20677C18[85]),  85,101},
  {&(_ZTV9S20677C18[92]),  92,101},
  {&(_ZTV9S20677C18[95]),  95,101},
  {&(_ZTV9S20677C18[100]),  100,101},
  {&(_tg__ZTV9S20677C11__9S20677C18[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C11__9S20677C18[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C11__9S20677C18[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C11__9S20677C18[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C11__9S20677C18[3]),  3,3},
  {&(_tg__ZTV8S20677C4__9S20677C18[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__9S20677C18[3]),  3,3},
  {&(_tg__ZTV8S20677C2__9S20677C18[4]),  4,7},
  {&(_tg__ZTV8S20677C4__8S20677C2__9S20677C18[6]),  6,9},
  {&(_tg__ZTV9S20677C12__9S20677C18[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__9S20677C18[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A1__9S20677C18[3]),  3,3},
  {&(_tg__ZTV9S20677C19__9S20677C18[8]),  8,14},
  {&(_tg__ZTV9S20677C129S20677C19__A1__9S20677C18[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C129S20677C19__A1__9S20677C18[3]),  3,3},
  {&(_tg__ZTV8S20677C5__9S20677C19__9S20677C18[3]),  3,3},
  {&(_tg__ZTV9S20677C15__9S20677C19__9S20677C18[11]),  11,15},
  {&(_tg__ZTV9S20677C12__A1__9S20677C19__9S20677C18[6]),  6,8},
  {&(_tg__ZTV8S20677C59S20677C15__A2__9S20677C19__9S20677C18[3]),  3,3},
  {&(_tg__ZTV8S20677C8__9S20677C19__9S20677C18[3]),  3,4},
  {&(_tg__ZTV9S20677C16__9S20677C19__9S20677C18[4]),  4,5},
  {&(_tg__ZTV9S20677C15__9S20677C18[7]),  7,11},
  {&(_tg__ZTV8S20677C49S20677C15__A1__9S20677C18[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C49S20677C15__A2__9S20677C18[3]),  3,3},
  {&(_tg__ZTV8S20677C59S20677C15__A3__9S20677C18[3]),  3,3},
  {&(_tg__ZTV9S20677C12__9S20677C15__9S20677C18[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C15__9S20677C18[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A__9S20677C15__9S20677C18[3]),  3,3},
  {&(_tg__ZTV8S20677C8__9S20677C15__9S20677C18[3]),  3,4},
  {&(_tg__ZTV9S20677C16__9S20677C15__9S20677C18[4]),  4,5},
  {&(_tg__ZTV9S20677C16__9S20677C18[3]),  3,4},
  {&(_tg__ZTV8S20677C59S20677C16__A4__9S20677C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C18[];
extern  VTBL_ENTRY _ZTV9S20677C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C18[];
Class_Descriptor cd_S20677C18 = {  "S20677C18", // class name
  bases_S20677C18, 18,
  &(vtc_S20677C18[0]), // expected_vtbl_contents
  &(vtt_S20677C18[0]), // expected_vtt_contents
  ABISELECT(9616,6776), // object size
  NSPAIRA(_ZTI9S20677C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20677C18),101, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C18),43, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20677C22  : S20677C10 , S20677C5 , virtual S20677C11 {
  void *s20677c22f0;
  ::S20677C6_nt s20677c22f1;
  long s20677c22f2;
  virtual  ~S20677C22(); // _ZN9S20677C22D2Ev
  S20677C22(); // tgen
};
//SIG(-1 S20677C22) C1{ BC2{ BC3{ VBC4{ VBC5{ m Fp FL[4] Fs} BC6{ VBC5 FD Fi FC5 FC5} v1 v2 v3 Fs FL Fc Fi[2] FC6 Fp FL Fi FL Fi} VBC7{ VBC5 VBC4 v4 v5 v6 FL FC8{} Fp Fc[2] FC5 Fl FC8} VBC9{ VBC5 VBC6 v7 v8 Fi FC6 FL Fi Fp} v9 v10 FC8 FC8 Fi FC6 FC8 FC8 FC10{ v12 FC8 FC6 FC8 FL FC8 Fp FC8 Fp[2] FC8} FC7 Fp FC8} v11 Fi[2] FC8 FC8 FC8 FC8 FC8 FC11{ VBC6 BC3 BC9 Fi Fc:2 FC8 Fi} Fl[4] FC8 FC12{ BC13{ BC4 VBC9 BC6 VBC10 VBC14{ BC6 v13 FL Fc[7] Fp Fi FC8 FC8 Fc[10]} v14 Fl FL FD FC8} BC15{ VBC10 v15 FC13 FC8 Fl Fi[2]} BC11 Fp FL Fi Fp Fi[3] Fc FL Fp FD}[2] Fc FC8} BC6 VBC3 vd Fp FC8 Fl}


 S20677C22 ::~S20677C22(){ note_dtor("S20677C22", this);}
S20677C22 ::S20677C22(){ note_ctor("S20677C22", this);} // tgen

static void Test_S20677C22()
{
  extern Class_Descriptor cd_S20677C22;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(974,2711)];
    init_test(&cd_S20677C22, buf);
    S20677C22 *dp, &lv = *(dp=new (buf) S20677C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15568,10840), "sizeof(S20677C22)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C22)");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(13944,9712), "S20677C22");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(13944,9712), "S20677C22");
    check_base_class_offset(lv, (S20677C3*)(S20677C2*), ABISELECT(13944,9712), "S20677C22");
    check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(13944,9712), "S20677C22");
    /*is_ambiguous_... S20677C22::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(13944,9712), "S20677C22");
    /*is_ambiguous_... S20677C22::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(13944,9712), "S20677C22");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(13536,9420), "S20677C22");
    check_base_class_offset(lv, (S20677C4*)(S20677C11*)(S20677C10*), ABISELECT(13536,9420), "S20677C22");
    check_base_class_offset(lv, (S20677C4*)(S20677C2*), ABISELECT(13536,9420), "S20677C22");
    /*is_ambiguous_... S20677C22::S20677C11 */ AMB_check_base_class_offset(lv, (S20677C4*)(S20677C11*), ABISELECT(13536,9420), "S20677C22");
    check_base_class_offset(lv, (S20677C2*)(S20677C11*)(S20677C10*), ABISELECT(13992,9752), "S20677C22");
    /*is_ambiguous_... S20677C22::S20677C11 */ AMB_check_base_class_offset(lv, (S20677C2*)(S20677C11*), ABISELECT(13992,9752), "S20677C22");
    check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(14336,9988), "S20677C22");
    check_base_class_offset(lv, (S20677C12*)(S20677C11*)(S20677C10*), ABISELECT(14096,9824), "S20677C22");
    /*is_ambiguous_... S20677C22::S20677C11 */ AMB_check_base_class_offset(lv, (S20677C12*)(S20677C11*), ABISELECT(14096,9824), "S20677C22");
    check_base_class_offset(lv, (S20677C11*)(S20677C10*), 0, "S20677C22");
    check_base_class_offset(lv, (S20677C10*), 0, "S20677C22");
    /*is_ambiguous_... S20677C22::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*), ABISELECT(13376,9308), "S20677C22");
    /*is_ambiguous_... S20677C22::S20677C11 */ AMB_check_base_class_offset(lv, (S20677C11*), ABISELECT(14480,10088), "S20677C22");
    check_field_offset(lv, s20677c22f0, ABISELECT(13512,9408), "S20677C22.s20677c22f0");
    check_field_offset(lv, s20677c22f1, ABISELECT(13520,9412), "S20677C22.s20677c22f1");
    check_field_offset(lv, s20677c22f2, ABISELECT(13528,9416), "S20677C22.s20677c22f2");
    test_class_info(&lv, &cd_S20677C22);
    dp->~S20677C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C22(Test_S20677C22, "S20677C22", ABISELECT(15568,10840));

#else // __cplusplus

extern void _ZN9S20677C22C1Ev();
extern void _ZN9S20677C22D2Ev();
Name_Map name_map_S20677C22[] = {
  NSPAIR(_ZN9S20677C22C1Ev),
  NSPAIR(_ZN9S20677C22D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C2;
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
extern Class_Descriptor cd_S20677C10;
extern VTBL_ENTRY _ZTI9S20677C10[];
extern  VTBL_ENTRY _ZTV9S20677C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C10[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
static Base_Class bases_S20677C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(13944,9712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20677C5,    ABISELECT(13536,9420), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(13536,9420), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20677C2,    ABISELECT(13992,9752), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C5,    ABISELECT(14336,9988), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(14096,9824), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20677C11,    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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20677C10,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C5,    ABISELECT(13376,9308), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C11,    ABISELECT(14480,10088), //bcp->offset
    46, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20677C22[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C103v14Ev();
extern void _ZN9S20677C22D1Ev();
extern void _ZN9S20677C22D0Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY vtc_S20677C22[] = {
  ABISELECT(14480,10088),
  ABISELECT(14336,9988),
  ABISELECT(14096,9824),
  ABISELECT(13992,9752),
  ABISELECT(13944,9712),
  ABISELECT(13536,9420),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C22[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20677C103v14Ev,
  (VTBL_ENTRY)&_ZN9S20677C22D1Ev,
  (VTBL_ENTRY)&_ZN9S20677C22D0Ev,
  ABISELECT(568,404),
  ABISELECT(-13376,-9308),
  (VTBL_ENTRY)&(_ZTI9S20677C22[0]),
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13536,-9420),
  (VTBL_ENTRY)&(_ZTI9S20677C22[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13992,-9752),
  (VTBL_ENTRY)&(_ZTI9S20677C22[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-14096,-9824),
  (VTBL_ENTRY)&(_ZTI9S20677C22[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(-392,-276),
  ABISELECT(-14336,-9988),
  (VTBL_ENTRY)&(_ZTI9S20677C22[0]),
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-384,-264),
  ABISELECT(-488,-336),
  ABISELECT(-536,-376),
  ABISELECT(-944,-668),
  ABISELECT(-14480,-10088),
  (VTBL_ENTRY)&(_ZTI9S20677C22[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern VTBL_ENTRY _ZTV9S20677C22[];
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C103v14Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C10__9S20677C22[] = {
  ABISELECT(14336,9988),
  ABISELECT(14096,9824),
  ABISELECT(13992,9752),
  ABISELECT(13944,9712),
  ABISELECT(13536,9420),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20677C103v14Ev,
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C119S20677C10__9S20677C22[] = {
  ABISELECT(14336,9988),
  ABISELECT(14096,9824),
  ABISELECT(13992,9752),
  ABISELECT(13944,9712),
  ABISELECT(13536,9420),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C119S20677C10__9S20677C22[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13536,-9420),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C119S20677C10__9S20677C22[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13992,-9752),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C119S20677C10__9S20677C22[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-14096,-9824),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C119S20677C10__9S20677C22[] = {
  ABISELECT(-392,-276),
  ABISELECT(-14336,-9988),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C10__9S20677C22[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13536,-9420),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C10__9S20677C22[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13992,-9752),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C10__9S20677C22[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-14096,-9824),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C10__9S20677C22[] = {
  ABISELECT(-392,-276),
  ABISELECT(-14336,-9988),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A__9S20677C22[] = {
  ABISELECT(568,404),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C22[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__9S20677C22[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C22[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2__9S20677C22[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C22[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__9S20677C22[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C22[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C11__A1__9S20677C22[] = {
  ABISELECT(-144,-100),
  ABISELECT(-384,-264),
  ABISELECT(-488,-336),
  ABISELECT(-536,-376),
  ABISELECT(-944,-668),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C11__A1__9S20677C22[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(944,668),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C11__A1__9S20677C22[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(488,336),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C11__A1__9S20677C22[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(384,264),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C11__A1__9S20677C22[] = {
  ABISELECT(-392,-276),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
static  VTT_ENTRY vtt_S20677C22[] = {
  {&(_ZTV9S20677C22[8]),  8,57},
  {&(_tg__ZTV9S20677C10__9S20677C22[7]),  7,10},
  {&(_tg__ZTV9S20677C119S20677C10__9S20677C22[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C119S20677C10__9S20677C22[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C119S20677C10__9S20677C22[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C119S20677C10__9S20677C22[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C119S20677C10__9S20677C22[3]),  3,3},
  {&(_tg__ZTV8S20677C4__9S20677C10__9S20677C22[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C10__9S20677C22[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C10__9S20677C22[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C10__9S20677C22[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A__9S20677C22[3]),  3,3},
  {&(_ZTV9S20677C22[22]),  22,57},
  {&(_ZTV9S20677C22[32]),  32,57},
  {&(_ZTV9S20677C22[41]),  41,57},
  {&(_ZTV9S20677C22[46]),  46,57},
  {&(_ZTV9S20677C22[16]),  16,57},
  {&(_ZTV9S20677C22[55]),  55,57},
  {&(_tg__ZTV8S20677C4__9S20677C22[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__9S20677C22[3]),  3,3},
  {&(_tg__ZTV8S20677C2__9S20677C22[4]),  4,7},
  {&(_tg__ZTV8S20677C4__8S20677C2__9S20677C22[6]),  6,9},
  {&(_tg__ZTV9S20677C12__9S20677C22[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__9S20677C22[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A1__9S20677C22[3]),  3,3},
  {&(_tg__ZTV9S20677C11__A1__9S20677C22[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C11__A1__9S20677C22[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C11__A1__9S20677C22[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C11__A1__9S20677C22[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C11__A1__9S20677C22[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20677C22[];
extern  VTBL_ENTRY _ZTV9S20677C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C22[];
Class_Descriptor cd_S20677C22 = {  "S20677C22", // class name
  bases_S20677C22, 10,
  &(vtc_S20677C22[0]), // expected_vtbl_contents
  &(vtt_S20677C22[0]), // expected_vtt_contents
  ABISELECT(15568,10840), // object size
  NSPAIRA(_ZTI9S20677C22),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20677C22),57, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20677C22),30, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20677C1  : virtual S20677C2 , virtual S20677C7 , virtual S20677C10 , virtual S20677C18 {
  int s20677c1f0[2];
  char s20677c1f1;
  void *s20677c1f2;
  int s20677c1f3;
  ::S20677C22 s20677c1f4;
  virtual  ~S20677C1(); // _ZN8S20677C1D2Ev
  virtual void  v1(); // _ZN8S20677C12v1Ev
  S20677C1(); // tgen
};
//SIG(1 S20677C1) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v5 v6 v7 FL FC6{} Fp Fc[2] FC3 Fl FC6} VBC7{ VBC8{ v8 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} BC5 BC9{ BC3 FC3 Fi FD Fi FL Fl} v9 Fp FC9 Fp Fi[2] FD Fi[2]} VBC10{ BC11{ VBC4 VBC2 VBC12{ VBC3 VBC5 v10 v11 Fi FC5 FL Fi Fp} v12 v13 FC6 FC6 Fi FC5 FC6 FC6 FC8 FC2 Fp FC6} v14 Fi[2] FC6 FC6 FC6 FC6 FC6 FC13{ VBC5 BC11 BC12 Fi Fc:2 FC6 Fi} Fl[4] FC6 FC14{ BC15{ BC4 VBC12 BC5 VBC8 VBC16{ BC5 v15 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v16 Fl FL FD FC6} BC17{ VBC8 v22 FC15 FC6 Fl Fi[2]} BC13 Fp FL Fi Fp Fi[3] Fc FL Fp FD}[2] Fc FC6} VBC18{ VBC11 VBC19{ BC9 BC12 VBC15 v17 v18 v19 v20 Fp Fc[4] FC4 Fi[8] FC6 FC7 FC6 FD FC5[9] FD[10] Fs} v21 Fp FC20{ BC13 v23 Fi FC6 Fs Fl FC5 Fl} Fp FL Fi FC6 Fp FC21{ v24 Fl FC16 FC6 Fi} Fl} vd v1 Fi[2] Fc Fp Fi FC22{ BC10 BC5 VBC11 vd Fp FC6 Fl}}


 S20677C1 ::~S20677C1(){ note_dtor("S20677C1", this);}
void  S20677C1 ::v1(){vfunc_called(this, "_ZN8S20677C12v1Ev");}
S20677C1 ::S20677C1(){ note_ctor("S20677C1", this);} // tgen

static void Test_S20677C1()
{
  extern Class_Descriptor cd_S20677C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2447,6828)];
    init_test(&cd_S20677C1, buf);
    S20677C1 *dp, &lv = *(dp=new (buf) S20677C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(39136,27308), "sizeof(S20677C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20677C1)");
    check_base_class_offset(lv, (S20677C3*)(S20677C2*), ABISELECT(15720,10936), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C4*), ABISELECT(15720,10936), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*), ABISELECT(15720,10936), "S20677C1");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C7*), ABISELECT(15720,10936), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*), ABISELECT(15720,10936), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*), ABISELECT(15720,10936), "S20677C1");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C12*)(S20677C19*), ABISELECT(15720,10936), "S20677C1");
    check_base_class_offset(lv, (S20677C3*)(S20677C4*)(S20677C15*), ABISELECT(15720,10936), "S20677C1");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C4*)(S20677C15*), ABISELECT(15720,10936), "S20677C1");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C15*), ABISELECT(15720,10936), "S20677C1");
    check_base_class_offset(lv, (S20677C3*)(S20677C5*)(S20677C16*), ABISELECT(15720,10936), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C4 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C4*), ABISELECT(15776,10976), "S20677C1");
    check_base_class_offset(lv, (S20677C4*)(S20677C2*), ABISELECT(15776,10976), "S20677C1");
    check_base_class_offset(lv, (S20677C4*)(S20677C11*)(S20677C10*), ABISELECT(15776,10976), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C11 */ AMB_check_base_class_offset(lv, (S20677C4*)(S20677C11*), ABISELECT(15776,10976), "S20677C1");
    check_base_class_offset(lv, (S20677C2*), ABISELECT(15616,10864), "S20677C1");
    check_base_class_offset(lv, (S20677C2*)(S20677C11*)(S20677C10*), ABISELECT(15616,10864), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C11 */ AMB_check_base_class_offset(lv, (S20677C2*)(S20677C11*), ABISELECT(15616,10864), "S20677C1");
    check_base_class_offset(lv, (S20677C8*)(S20677C7*), ABISELECT(16704,11628), "S20677C1");
    check_base_class_offset(lv, (S20677C8*)(S20677C15*), ABISELECT(16704,11628), "S20677C1");
    check_base_class_offset(lv, (S20677C5*)(S20677C7*), ABISELECT(16192,11268), "S20677C1");
    check_base_class_offset(lv, (S20677C3*)(S20677C9*)(S20677C7*), ABISELECT(16336,11368), "S20677C1");
    check_base_class_offset(lv, (S20677C9*)(S20677C7*), ABISELECT(16336,11368), "S20677C1");
    check_base_class_offset(lv, (S20677C7*), ABISELECT(16192,11268), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*), ABISELECT(30592,21284), "S20677C1");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C12*)(S20677C19*), ABISELECT(30592,21284), "S20677C1");
    check_base_class_offset(lv, (S20677C12*)(S20677C11*)(S20677C10*), ABISELECT(30352,21120), "S20677C1");
    /*is_ambiguous_... S20677C1::S20677C11 */ AMB_check_base_class_offset(lv, (S20677C12*)(S20677C11*), ABISELECT(30352,21120), "S20677C1");
    check_base_class_offset(lv, (S20677C12*)(S20677C15*), ABISELECT(30352,21120), "S20677C1");
    check_base_class_offset(lv, (S20677C11*)(S20677C10*), ABISELECT(16976,11812), "S20677C1");
    check_base_class_offset(lv, (S20677C10*), ABISELECT(16976,11812), "S20677C1");
    check_base_class_offset(lv, (S20677C11*)(S20677C18*), ABISELECT(33568,23364), "S20677C1");
    check_base_class_offset(lv, (S20677C3*)(S20677C9*)(S20677C19*), ABISELECT(34896,24280), "S20677C1");
    check_base_class_offset(lv, (S20677C9*)(S20677C19*), ABISELECT(34896,24280), "S20677C1");
    /*is_ambiguous_... S20677C19::S20677C12 */ AMB_check_base_class_offset(lv, (S20677C12*)(S20677C19*), ABISELECT(34656,24116), "S20677C1");
    check_base_class_offset(lv, (S20677C5*)(S20677C4*)(S20677C15*), ABISELECT(38352,26752), "S20677C1");
    check_base_class_offset(lv, (S20677C4*)(S20677C15*), ABISELECT(38352,26752), "S20677C1");
    /*is_ambiguous_... S20677C15::S20677C5 */ AMB_check_base_class_offset(lv, (S20677C5*)(S20677C15*), ABISELECT(38768,27044), "S20677C1");
    check_base_class_offset(lv, (S20677C5*)(S20677C16*), ABISELECT(38960,27172), "S20677C1");
    check_base_class_offset(lv, (S20677C16*)(S20677C15*), ABISELECT(38960,27172), "S20677C1");
    check_base_class_offset(lv, (S20677C15*)(S20677C19*), ABISELECT(38352,26752), "S20677C1");
    check_base_class_offset(lv, (S20677C19*)(S20677C18*), ABISELECT(34656,24116), "S20677C1");
    check_base_class_offset(lv, (S20677C18*), ABISELECT(30736,21384), "S20677C1");
    check_field_offset(lv, s20677c1f0, ABISELECT(8,4), "S20677C1.s20677c1f0");
    check_field_offset(lv, s20677c1f1, ABISELECT(16,12), "S20677C1.s20677c1f1");
    check_field_offset(lv, s20677c1f2, ABISELECT(24,16), "S20677C1.s20677c1f2");
    check_field_offset(lv, s20677c1f3, ABISELECT(32,20), "S20677C1.s20677c1f3");
    check_field_offset(lv, s20677c1f4, ABISELECT(48,24), "S20677C1.s20677c1f4");
    test_class_info(&lv, &cd_S20677C1);
    dp->~S20677C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20677C1(Test_S20677C1, "S20677C1", ABISELECT(39136,27308));

#else // __cplusplus

extern void _ZN8S20677C1C1Ev();
extern void _ZN8S20677C1D2Ev();
Name_Map name_map_S20677C1[] = {
  NSPAIR(_ZN8S20677C1C1Ev),
  NSPAIR(_ZN8S20677C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C2;
extern VTBL_ENTRY _ZTI8S20677C2[];
extern  VTBL_ENTRY _ZTV8S20677C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C2[];
extern Class_Descriptor cd_S20677C8;
extern VTBL_ENTRY _ZTI8S20677C8[];
extern  VTBL_ENTRY _ZTV8S20677C8[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C9;
extern VTBL_ENTRY _ZTI8S20677C9[];
extern Class_Descriptor cd_S20677C7;
extern VTBL_ENTRY _ZTI8S20677C7[];
extern  VTBL_ENTRY _ZTV8S20677C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C7[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
extern Class_Descriptor cd_S20677C10;
extern VTBL_ENTRY _ZTI9S20677C10[];
extern  VTBL_ENTRY _ZTV9S20677C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C10[];
extern Class_Descriptor cd_S20677C11;
extern VTBL_ENTRY _ZTI9S20677C11[];
extern  VTBL_ENTRY _ZTV9S20677C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C11[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C9;
extern VTBL_ENTRY _ZTI8S20677C9[];
extern Class_Descriptor cd_S20677C12;
extern VTBL_ENTRY _ZTI9S20677C12[];
extern  VTBL_ENTRY _ZTV9S20677C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C12[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C4;
extern VTBL_ENTRY _ZTI8S20677C4[];
extern  VTBL_ENTRY _ZTV8S20677C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C4[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C5;
extern VTBL_ENTRY _ZTI8S20677C5[];
extern  VTBL_ENTRY _ZTV8S20677C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C5[];
extern Class_Descriptor cd_S20677C16;
extern VTBL_ENTRY _ZTI9S20677C16[];
extern  VTBL_ENTRY _ZTV9S20677C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C16[];
extern Class_Descriptor cd_S20677C15;
extern VTBL_ENTRY _ZTI9S20677C15[];
extern  VTBL_ENTRY _ZTV9S20677C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C15[];
extern Class_Descriptor cd_S20677C19;
extern VTBL_ENTRY _ZTI9S20677C19[];
extern  VTBL_ENTRY _ZTV9S20677C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C19[];
extern Class_Descriptor cd_S20677C18;
extern VTBL_ENTRY _ZTI9S20677C18[];
extern  VTBL_ENTRY _ZTV9S20677C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20677C18[];
static Base_Class bases_S20677C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(15720,10936), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20677C5,    ABISELECT(15776,10976), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(15776,10976), //bcp->offset
    28, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20677C2,    ABISELECT(15616,10864), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C8,    ABISELECT(16704,11628), //bcp->offset
    43, //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_S20677C5,    ABISELECT(16192,11268), //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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20677C3,    ABISELECT(16336,11368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20677C9,    ABISELECT(16336,11368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20677C7,    ABISELECT(16192,11268), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C5,    ABISELECT(30592,21284), //bcp->offset
    68, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20677C12,    ABISELECT(30352,21120), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20677C11,    ABISELECT(16976,11812), //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
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20677C10,    ABISELECT(16976,11812), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C11,    ABISELECT(33568,23364), //bcp->offset
    85, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20677C3,    ABISELECT(34896,24280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20677C9,    ABISELECT(34896,24280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20677C12,    ABISELECT(34656,24116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20677C5,    ABISELECT(38352,26752), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20677C4,    ABISELECT(38352,26752), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20677C5,    ABISELECT(38768,27044), //bcp->offset
    131, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20677C5,    ABISELECT(38960,27172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20677C16,    ABISELECT(38960,27172), //bcp->offset
    134, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S20677C15,    ABISELECT(38352,26752), //bcp->offset
    116, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S20677C19,    ABISELECT(34656,24116), //bcp->offset
    96, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20677C18,    ABISELECT(30736,21384), //bcp->offset
    71, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20677C1[];
extern void _ZN8S20677C1D1Ev();
extern void _ZN8S20677C1D0Ev();
extern void _ZN8S20677C12v1Ev();
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN8S20677C72v9Ev();
extern void _ZN8S20677C82v8Ev();
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C103v14Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C183v21Ev();
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C193v17Ev();
extern void _ZN9S20677C193v18Ev();
extern void _ZN9S20677C193v19Ev();
extern void _ZN9S20677C193v20Ev();
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY vtc_S20677C1[] = {
  ABISELECT(38960,27172),
  ABISELECT(38352,26752),
  ABISELECT(34656,24116),
  ABISELECT(33568,23364),
  ABISELECT(30736,21384),
  ABISELECT(30592,21284),
  ABISELECT(30352,21120),
  ABISELECT(16976,11812),
  ABISELECT(16704,11628),
  ABISELECT(16192,11268),
  ABISELECT(15776,10976),
  ABISELECT(15720,10936),
  ABISELECT(15616,10864),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN8S20677C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20677C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20677C12v1Ev,
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-15616,-10864),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-15776,-10976),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  0,
  ABISELECT(512,360),
  ABISELECT(-472,-332),
  ABISELECT(-16192,-11268),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN8S20677C72v9Ev,
  0,
  ABISELECT(-16704,-11628),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
  0,
  0,
  0,
  ABISELECT(13616,9472),
  ABISELECT(13376,9308),
  ABISELECT(-1360,-948),
  ABISELECT(-1256,-876),
  ABISELECT(-1200,-836),
  ABISELECT(-16976,-11812),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20677C103v14Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10184),
  ABISELECT(-30352,-21120),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  ABISELECT(-14872,-10348),
  ABISELECT(-30592,-21284),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  0,
  ABISELECT(8224,5788),
  ABISELECT(-14032,-9756),
  ABISELECT(7616,5368),
  ABISELECT(3920,2732),
  ABISELECT(-144,-100),
  ABISELECT(-384,-264),
  ABISELECT(-15120,-10520),
  ABISELECT(-15016,-10448),
  ABISELECT(-14960,-10408),
  ABISELECT(2832,1980),
  ABISELECT(-30736,-21384),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN9S20677C183v21Ev,
  0,
  0,
  ABISELECT(-2976,-2080),
  ABISELECT(-3216,-2244),
  ABISELECT(-17952,-12500),
  ABISELECT(-17848,-12428),
  ABISELECT(-17792,-12388),
  ABISELECT(-33568,-23364),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(4304,3056),
  ABISELECT(-17952,-12488),
  ABISELECT(-4304,-2996),
  ABISELECT(3696,2636),
  ABISELECT(-4064,-2832),
  ABISELECT(-18936,-13180),
  ABISELECT(-34656,-24116),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(608,420),
  ABISELECT(-21648,-15124),
  ABISELECT(-7760,-5468),
  ABISELECT(-8000,-5632),
  ABISELECT(-22632,-15816),
  ABISELECT(-38352,-26752),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
  ABISELECT(-23048,-16108),
  ABISELECT(-38768,-27044),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  0,
  ABISELECT(-23240,-16236),
  ABISELECT(-38960,-27172),
  (VTBL_ENTRY)&(_ZTI8S20677C1[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern VTBL_ENTRY _ZTV8S20677C1[];
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__8S20677C1[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C2__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20677C2[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__8S20677C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C4__8S20677C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C72v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C7__8S20677C1[] = {
  ABISELECT(512,360),
  ABISELECT(-472,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C7[0]),
  (VTBL_ENTRY)&_ZN8S20677C72v9Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C7__A1__8S20677C1[] = {
  ABISELECT(-472,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__8S20677C7__8S20677C1[] = {
  0,
  ABISELECT(-512,-360),
  (VTBL_ENTRY)&(_ZTI8S20677C7[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
extern void _ZN9S20677C103v14Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C10__8S20677C1[] = {
  ABISELECT(13616,9472),
  ABISELECT(13376,9308),
  ABISELECT(-1360,-948),
  ABISELECT(-1256,-876),
  ABISELECT(-1200,-836),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20677C103v14Ev,
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C119S20677C10__8S20677C1[] = {
  ABISELECT(13616,9472),
  ABISELECT(13376,9308),
  ABISELECT(-1360,-948),
  ABISELECT(-1256,-876),
  ABISELECT(-1200,-836),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C119S20677C10__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(1200,836),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C119S20677C10__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(1360,948),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C119S20677C10__8S20677C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10184),
  ABISELECT(-13376,-9308),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C119S20677C10__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  ABISELECT(-13616,-9472),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C10__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(1200,836),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C10__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(1360,948),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C10__8S20677C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10184),
  ABISELECT(-13376,-9308),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C10__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  ABISELECT(-13616,-9472),
  (VTBL_ENTRY)&(_ZTI9S20677C10[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__8S20677C1[] = {
  ABISELECT(240,164),
  ABISELECT(-14632,-10184),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C12__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A2__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C183v21Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C18__8S20677C1[] = {
  ABISELECT(8224,5788),
  ABISELECT(-14032,-9756),
  ABISELECT(7616,5368),
  ABISELECT(3920,2732),
  ABISELECT(-144,-100),
  ABISELECT(-384,-264),
  ABISELECT(-15120,-10520),
  ABISELECT(-15016,-10448),
  ABISELECT(-14960,-10408),
  ABISELECT(2832,1980),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C183v21Ev,
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C11__9S20677C18__8S20677C1[] = {
  0,
  0,
  ABISELECT(-2976,-2080),
  ABISELECT(-3216,-2244),
  ABISELECT(-17952,-12500),
  ABISELECT(-17848,-12428),
  ABISELECT(-17792,-12388),
  ABISELECT(-2832,-1980),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C18__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(14960,10408),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C18__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(15120,10520),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C18__8S20677C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10184),
  ABISELECT(384,264),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C18__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C193v17Ev();
extern void _ZN9S20677C193v18Ev();
extern void _ZN9S20677C193v19Ev();
extern void _ZN9S20677C193v20Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C19__9S20677C18__8S20677C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(4304,3056),
  ABISELECT(-17952,-12488),
  ABISELECT(-4304,-2996),
  ABISELECT(3696,2636),
  ABISELECT(-4064,-2832),
  ABISELECT(-18936,-13180),
  ABISELECT(-3920,-2732),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v20Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C15__9S20677C18__8S20677C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(608,420),
  ABISELECT(-21648,-15124),
  ABISELECT(-7760,-5468),
  ABISELECT(-8000,-5632),
  ABISELECT(-22632,-15816),
  ABISELECT(-7616,-5368),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C15__A3__9S20677C18__8S20677C1[] = {
  ABISELECT(-23048,-16108),
  ABISELECT(-8032,-5660),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__9S20677C18__8S20677C1[] = {
  0,
  ABISELECT(14032,9756),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C18__8S20677C1[] = {
  0,
  ABISELECT(-23240,-16236),
  ABISELECT(-8224,-5788),
  (VTBL_ENTRY)&(_ZTI9S20677C18[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern void _ZN9S20677C113v12Ev();
extern void _ZN9S20677C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C11__A1__8S20677C1[] = {
  ABISELECT(-2976,-2080),
  ABISELECT(-3216,-2244),
  ABISELECT(-17952,-12500),
  ABISELECT(-17848,-12428),
  ABISELECT(-17792,-12388),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20677C113v13Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C4__9S20677C11__A1__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(17792,12388),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
extern void _ZN8S20677C22v5Ev();
extern void _ZN8S20677C22v6Ev();
extern void _ZN8S20677C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C2__9S20677C11__A1__8S20677C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(17952,12500),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN8S20677C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20677C22v7Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C11__A1__8S20677C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10184),
  ABISELECT(3216,2244),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C11__A1__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  ABISELECT(2976,2080),
  (VTBL_ENTRY)&(_ZTI9S20677C11[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
extern void _ZN9S20677C193v17Ev();
extern void _ZN9S20677C193v18Ev();
extern void _ZN9S20677C193v19Ev();
extern void _ZN9S20677C193v20Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C19__8S20677C1[] = {
  ABISELECT(4304,3056),
  ABISELECT(-17952,-12488),
  ABISELECT(-4304,-2996),
  ABISELECT(3696,2636),
  ABISELECT(-4064,-2832),
  ABISELECT(-18936,-13180),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20677C193v20Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C129S20677C19__A1__8S20677C1[] = {
  ABISELECT(-4064,-2832),
  ABISELECT(-18936,-13180),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C129S20677C19__A1__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  ABISELECT(4064,2832),
  (VTBL_ENTRY)&(_ZTI9S20677C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__9S20677C19__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  ABISELECT(4064,2832),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C15__9S20677C19__8S20677C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(608,420),
  ABISELECT(-21648,-15124),
  ABISELECT(-7760,-5468),
  ABISELECT(-8000,-5632),
  ABISELECT(-22632,-15816),
  ABISELECT(-3696,-2636),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__A1__9S20677C19__8S20677C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10184),
  ABISELECT(4304,2996),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C15__A2__9S20677C19__8S20677C1[] = {
  ABISELECT(-23048,-16108),
  ABISELECT(-4112,-2928),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__9S20677C19__8S20677C1[] = {
  0,
  ABISELECT(17952,12488),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C19__8S20677C1[] = {
  0,
  ABISELECT(-23240,-16236),
  ABISELECT(-4304,-3056),
  (VTBL_ENTRY)&(_ZTI9S20677C19[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
extern void _ZN9S20677C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C15__8S20677C1[] = {
  ABISELECT(608,420),
  ABISELECT(-21648,-15124),
  ABISELECT(-7760,-5468),
  ABISELECT(-8000,-5632),
  ABISELECT(-22632,-15816),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20677C153v16Ev,
};
extern void _ZN8S20677C42v2Ev();
extern void _ZN8S20677C42v3Ev();
extern void _ZN8S20677C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C49S20677C15__A1__8S20677C1[] = {
  ABISELECT(-22632,-15816),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C4[0]),
  (VTBL_ENTRY)&_ZN8S20677C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20677C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C58S20677C49S20677C15__A3__8S20677C1[] = {
  ABISELECT(-22632,-15816),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C15__A4__8S20677C1[] = {
  ABISELECT(-23048,-16108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
extern void _ZN9S20677C123v10Ev();
extern void _ZN9S20677C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C12__9S20677C15__8S20677C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10184),
  ABISELECT(8000,5632),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20677C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A1__9S20677C15__8S20677C1[] = {
  ABISELECT(-14872,-10348),
  ABISELECT(7760,5468),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20677C5__A__9S20677C15__8S20677C1[] = {
  ABISELECT(-23048,-16108),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
};
extern void _ZN8S20677C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20677C8__9S20677C15__8S20677C1[] = {
  0,
  ABISELECT(21648,15124),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN8S20677C82v8Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__9S20677C15__8S20677C1[] = {
  0,
  ABISELECT(-23240,-16236),
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI9S20677C15[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
extern void _ZN9S20677C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20677C16__8S20677C1[] = {
  ABISELECT(-23240,-16236),
  0,
  (VTBL_ENTRY)&(_ZTI9S20677C16[0]),
  (VTBL_ENTRY)&_ZN9S20677C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20677C59S20677C16__A5__8S20677C1[] = {
  ABISELECT(-23240,-16236),
  0,
  (VTBL_ENTRY)&(_ZTI8S20677C5[0]),
};
static  VTT_ENTRY vtt_S20677C1[] = {
  {&(_ZTV8S20677C1[15]),  15,139},
  {&(_ZTV8S20677C1[25]),  25,139},
  {&(_ZTV8S20677C1[34]),  34,139},
  {&(_ZTV8S20677C1[42]),  42,139},
  {&(_ZTV8S20677C1[46]),  46,139},
  {&(_ZTV8S20677C1[57]),  57,139},
  {&(_ZTV8S20677C1[66]),  66,139},
  {&(_ZTV8S20677C1[71]),  71,139},
  {&(_ZTV8S20677C1[84]),  84,139},
  {&(_ZTV8S20677C1[94]),  94,139},
  {&(_ZTV8S20677C1[110]),  110,139},
  {&(_ZTV8S20677C1[127]),  127,139},
  {&(_ZTV8S20677C1[134]),  134,139},
  {&(_ZTV8S20677C1[138]),  138,139},
  {&(_tg__ZTV8S20677C2__8S20677C1[4]),  4,7},
  {&(_tg__ZTV8S20677C4__8S20677C2__8S20677C1[6]),  6,9},
  {&(_tg__ZTV8S20677C4__8S20677C1[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C4__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C7__8S20677C1[4]),  4,5},
  {&(_tg__ZTV8S20677C58S20677C7__A1__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C8__8S20677C7__8S20677C1[3]),  3,4},
  {&(_tg__ZTV9S20677C10__8S20677C1[7]),  7,10},
  {&(_tg__ZTV9S20677C119S20677C10__8S20677C1[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C119S20677C10__8S20677C1[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C119S20677C10__8S20677C1[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C119S20677C10__8S20677C1[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C119S20677C10__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C4__9S20677C10__8S20677C1[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C10__8S20677C1[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C10__8S20677C1[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C10__8S20677C1[3]),  3,3},
  {&(_tg__ZTV9S20677C12__8S20677C1[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C12__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A2__8S20677C1[3]),  3,3},
  {&(_tg__ZTV9S20677C18__8S20677C1[12]),  12,13},
  {&(_tg__ZTV9S20677C11__9S20677C18__8S20677C1[9]),  9,11},
  {&(_tg__ZTV8S20677C4__9S20677C18__8S20677C1[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C18__8S20677C1[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C18__8S20677C1[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C18__8S20677C1[3]),  3,3},
  {&(_tg__ZTV9S20677C19__9S20677C18__8S20677C1[14]),  14,20},
  {&(_tg__ZTV9S20677C15__9S20677C18__8S20677C1[11]),  11,15},
  {&(_tg__ZTV8S20677C59S20677C15__A3__9S20677C18__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C8__9S20677C18__8S20677C1[3]),  3,4},
  {&(_tg__ZTV9S20677C16__9S20677C18__8S20677C1[4]),  4,5},
  {&(_tg__ZTV9S20677C11__A1__8S20677C1[7]),  7,9},
  {&(_tg__ZTV8S20677C4__9S20677C11__A1__8S20677C1[6]),  6,9},
  {&(_tg__ZTV8S20677C2__9S20677C11__A1__8S20677C1[7]),  7,10},
  {&(_tg__ZTV9S20677C12__9S20677C11__A1__8S20677C1[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C11__A1__8S20677C1[3]),  3,3},
  {&(_tg__ZTV9S20677C19__8S20677C1[8]),  8,14},
  {&(_tg__ZTV9S20677C129S20677C19__A1__8S20677C1[4]),  4,6},
  {&(_tg__ZTV8S20677C5__9S20677C129S20677C19__A1__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C5__9S20677C19__8S20677C1[3]),  3,3},
  {&(_tg__ZTV9S20677C15__9S20677C19__8S20677C1[11]),  11,15},
  {&(_tg__ZTV9S20677C12__A1__9S20677C19__8S20677C1[6]),  6,8},
  {&(_tg__ZTV8S20677C59S20677C15__A2__9S20677C19__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C8__9S20677C19__8S20677C1[3]),  3,4},
  {&(_tg__ZTV9S20677C16__9S20677C19__8S20677C1[4]),  4,5},
  {&(_tg__ZTV9S20677C15__8S20677C1[7]),  7,11},
  {&(_tg__ZTV8S20677C49S20677C15__A1__8S20677C1[3]),  3,6},
  {&(_tg__ZTV8S20677C58S20677C49S20677C15__A3__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C59S20677C15__A4__8S20677C1[3]),  3,3},
  {&(_tg__ZTV9S20677C12__9S20677C15__8S20677C1[6]),  6,8},
  {&(_tg__ZTV8S20677C5__A1__9S20677C15__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C5__A__9S20677C15__8S20677C1[3]),  3,3},
  {&(_tg__ZTV8S20677C8__9S20677C15__8S20677C1[3]),  3,4},
  {&(_tg__ZTV9S20677C16__9S20677C15__8S20677C1[4]),  4,5},
  {&(_tg__ZTV9S20677C16__8S20677C1[3]),  3,4},
  {&(_tg__ZTV8S20677C59S20677C16__A5__8S20677C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20677C1[];
extern  VTBL_ENTRY _ZTV8S20677C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20677C1[];
Class_Descriptor cd_S20677C1 = {  "S20677C1", // class name
  bases_S20677C1, 25,
  &(vtc_S20677C1[0]), // expected_vtbl_contents
  &(vtt_S20677C1[0]), // expected_vtt_contents
  ABISELECT(39136,27308), // object size
  NSPAIRA(_ZTI8S20677C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20677C1),139, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20677C1),70, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20678C5  : virtual S20677C3 {
  long double s20678c5f0;
  int s20678c5f1;
  ::S20677C3 s20678c5f2;
  ::S20677C3 s20678c5f3;
  ~S20678C5(); // tgen
  S20678C5(); // tgen
};
//SIG(-1 S20678C5) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S20678C5 ::~S20678C5(){ note_dtor("S20678C5", this);} // tgen
S20678C5 ::S20678C5(){ note_ctor("S20678C5", this);} // tgen

static void Test_S20678C5()
{
  extern Class_Descriptor cd_S20678C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S20678C5, buf);
    S20678C5 *dp, &lv = *(dp=new (buf) S20678C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S20678C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C5)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S20678C5");
    check_field_offset(lv, s20678c5f0, ABISELECT(16,4), "S20678C5.s20678c5f0");
    check_field_offset(lv, s20678c5f1, ABISELECT(32,16), "S20678C5.s20678c5f1");
    check_field_offset(lv, s20678c5f2, ABISELECT(40,20), "S20678C5.s20678c5f2");
    check_field_offset(lv, s20678c5f3, ABISELECT(88,60), "S20678C5.s20678c5f3");
    test_class_info(&lv, &cd_S20678C5);
    dp->~S20678C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C5(Test_S20678C5, "S20678C5", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S20678C5C1Ev();
extern void _ZN8S20678C5D1Ev();
Name_Map name_map_S20678C5[] = {
  NSPAIR(_ZN8S20678C5C1Ev),
  NSPAIR(_ZN8S20678C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20678C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20678C5[];
static  VTBL_ENTRY vtc_S20678C5[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern VTBL_ENTRY _ZTV8S20678C5[];
static  VTT_ENTRY vtt_S20678C5[] = {
  {&(_ZTV8S20678C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
Class_Descriptor cd_S20678C5 = {  "S20678C5", // class name
  bases_S20678C5, 1,
  &(vtc_S20678C5[0]), // expected_vtbl_contents
  &(vtt_S20678C5[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S20678C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20678C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20678C5),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20678C4  : virtual S20677C3 , S20678C5 {
  short s20678c4f0;
  __tsi64 s20678c4f1;
  char s20678c4f2;
  int s20678c4f3[2];
  ::S20678C5 s20678c4f4;
  void *s20678c4f5;
  __tsi64 s20678c4f6;
  int s20678c4f7;
  __tsi64 s20678c4f8;
  int s20678c4f9;
  virtual void  v2(); // _ZN8S20678C42v2Ev
  virtual void  v3(); // _ZN8S20678C42v3Ev
  virtual void  v4(); // _ZN8S20678C42v4Ev
  ~S20678C4(); // tgen
  S20678C4(); // tgen
};
//SIG(-1 S20678C4) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S20678C4 ::v2(){vfunc_called(this, "_ZN8S20678C42v2Ev");}
void  S20678C4 ::v3(){vfunc_called(this, "_ZN8S20678C42v3Ev");}
void  S20678C4 ::v4(){vfunc_called(this, "_ZN8S20678C42v4Ev");}
S20678C4 ::~S20678C4(){ note_dtor("S20678C4", this);} // tgen
S20678C4 ::S20678C4(){ note_ctor("S20678C4", this);} // tgen

static void Test_S20678C4()
{
  extern Class_Descriptor cd_S20678C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S20678C4, buf);
    S20678C4 *dp, &lv = *(dp=new (buf) S20678C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S20678C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S20678C4");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(408,292), "S20678C4");
    check_base_class_offset(lv, (S20678C5*), 0, "S20678C4");
    check_field_offset(lv, s20678c4f0, ABISELECT(136,100), "S20678C4.s20678c4f0");
    check_field_offset(lv, s20678c4f1, ABISELECT(144,104), "S20678C4.s20678c4f1");
    check_field_offset(lv, s20678c4f2, ABISELECT(152,112), "S20678C4.s20678c4f2");
    check_field_offset(lv, s20678c4f3, ABISELECT(156,116), "S20678C4.s20678c4f3");
    check_field_offset(lv, s20678c4f4, ABISELECT(176,124), "S20678C4.s20678c4f4");
    check_field_offset(lv, s20678c4f5, ABISELECT(368,264), "S20678C4.s20678c4f5");
    check_field_offset(lv, s20678c4f6, ABISELECT(376,268), "S20678C4.s20678c4f6");
    check_field_offset(lv, s20678c4f7, ABISELECT(384,276), "S20678C4.s20678c4f7");
    check_field_offset(lv, s20678c4f8, ABISELECT(392,280), "S20678C4.s20678c4f8");
    check_field_offset(lv, s20678c4f9, ABISELECT(400,288), "S20678C4.s20678c4f9");
    test_class_info(&lv, &cd_S20678C4);
    dp->~S20678C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C4(Test_S20678C4, "S20678C4", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S20678C4C1Ev();
extern void _ZN8S20678C4D1Ev();
Name_Map name_map_S20678C4[] = {
  NSPAIR(_ZN8S20678C4C1Ev),
  NSPAIR(_ZN8S20678C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
static Base_Class bases_S20678C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20678C5,    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 _ZTI8S20678C4[];
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY vtc_S20678C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20678C4[];
static  VTBL_ENTRY _tg__ZTV8S20678C5__8S20678C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C4[] = {
  {&(_ZTV8S20678C4[3]),  3,6},
  {&(_tg__ZTV8S20678C5__8S20678C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
Class_Descriptor cd_S20678C4 = {  "S20678C4", // class name
  bases_S20678C4, 2,
  &(vtc_S20678C4[0]), // expected_vtbl_contents
  &(vtt_S20678C4[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S20678C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20678C4),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20678C4),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  S20678C2  : virtual S20677C3 , virtual S20678C4 {
  __tsi64 s20678c2f0;
  ::S20677C6_nt s20678c2f1;
  void *s20678c2f2;
  char s20678c2f3[2];
  ::S20677C3 s20678c2f4;
  long s20678c2f5;
  ::S20677C6_nt s20678c2f6;
  virtual void  v5(); // _ZN8S20678C22v5Ev
  virtual void  v6(); // _ZN8S20678C22v6Ev
  virtual void  v7(); // _ZN8S20678C22v7Ev
  ~S20678C2(); // tgen
  S20678C2(); // tgen
};
//SIG(-1 S20678C2) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S20678C2 ::v5(){vfunc_called(this, "_ZN8S20678C22v5Ev");}
void  S20678C2 ::v6(){vfunc_called(this, "_ZN8S20678C22v6Ev");}
void  S20678C2 ::v7(){vfunc_called(this, "_ZN8S20678C22v7Ev");}
S20678C2 ::~S20678C2(){ note_dtor("S20678C2", this);} // tgen
S20678C2 ::S20678C2(){ note_ctor("S20678C2", this);} // tgen

static void Test_S20678C2()
{
  extern Class_Descriptor cd_S20678C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S20678C2, buf);
    S20678C2 *dp, &lv = *(dp=new (buf) S20678C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S20678C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C2)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S20678C2");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(104,72), "S20678C2");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(104,72), "S20678C2");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(160,112), "S20678C2");
    check_base_class_offset(lv, (S20678C4*), ABISELECT(160,112), "S20678C2");
    check_field_offset(lv, s20678c2f0, ABISELECT(8,4), "S20678C2.s20678c2f0");
    check_field_offset(lv, s20678c2f1, ABISELECT(16,12), "S20678C2.s20678c2f1");
    check_field_offset(lv, s20678c2f2, ABISELECT(24,16), "S20678C2.s20678c2f2");
    check_field_offset(lv, s20678c2f3, ABISELECT(32,20), "S20678C2.s20678c2f3");
    check_field_offset(lv, s20678c2f4, ABISELECT(40,24), "S20678C2.s20678c2f4");
    check_field_offset(lv, s20678c2f5, ABISELECT(88,64), "S20678C2.s20678c2f5");
    check_field_offset(lv, s20678c2f6, ABISELECT(96,68), "S20678C2.s20678c2f6");
    test_class_info(&lv, &cd_S20678C2);
    dp->~S20678C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C2(Test_S20678C2, "S20678C2", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN8S20678C2C1Ev();
extern void _ZN8S20678C2D1Ev();
Name_Map name_map_S20678C2[] = {
  NSPAIR(_ZN8S20678C2C1Ev),
  NSPAIR(_ZN8S20678C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
static Base_Class bases_S20678C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20678C5,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(160,112), //bcp->offset
    7, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20678C2[];
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY vtc_S20678C2[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20678C2[];
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__8S20678C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C2[] = {
  {&(_ZTV8S20678C2[4]),  4,16},
  {&(_ZTV8S20678C2[13]),  13,16},
  {&(_tg__ZTV8S20678C4__8S20678C2[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__8S20678C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
Class_Descriptor cd_S20678C2 = {  "S20678C2", // class name
  bases_S20678C2, 3,
  &(vtc_S20678C2[0]), // expected_vtbl_contents
  &(vtt_S20678C2[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI8S20678C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20678C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20678C2),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  S20678C8  {
  ::S20677C6_nt s20678c8f0;
  ::S20678C5 s20678c8f1;
  ::S20677C6_nt s20678c8f2;
  __tsi64 s20678c8f3;
  ::S20677C6_nt s20678c8f4;
  void *s20678c8f5;
  ::S20677C6_nt s20678c8f6;
  void *s20678c8f7[2];
  ::S20677C6_nt s20678c8f8;
  virtual void  v8(); // _ZN8S20678C82v8Ev
  ~S20678C8(); // tgen
  S20678C8(); // tgen
};
//SIG(-1 S20678C8) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S20678C8 ::v8(){vfunc_called(this, "_ZN8S20678C82v8Ev");}
S20678C8 ::~S20678C8(){ note_dtor("S20678C8", this);} // tgen
S20678C8 ::S20678C8(){ note_ctor("S20678C8", this);} // tgen

static void Test_S20678C8()
{
  extern Class_Descriptor cd_S20678C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S20678C8, buf);
    S20678C8 *dp, &lv = *(dp=new (buf) S20678C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S20678C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C8)");
    check_field_offset(lv, s20678c8f0, ABISELECT(8,4), "S20678C8.s20678c8f0");
    check_field_offset(lv, s20678c8f1, ABISELECT(16,8), "S20678C8.s20678c8f1");
    check_field_offset(lv, s20678c8f2, ABISELECT(208,148), "S20678C8.s20678c8f2");
    check_field_offset(lv, s20678c8f3, ABISELECT(216,152), "S20678C8.s20678c8f3");
    check_field_offset(lv, s20678c8f4, ABISELECT(224,160), "S20678C8.s20678c8f4");
    check_field_offset(lv, s20678c8f5, ABISELECT(232,164), "S20678C8.s20678c8f5");
    check_field_offset(lv, s20678c8f6, ABISELECT(240,168), "S20678C8.s20678c8f6");
    check_field_offset(lv, s20678c8f7, ABISELECT(248,172), "S20678C8.s20678c8f7");
    check_field_offset(lv, s20678c8f8, ABISELECT(264,180), "S20678C8.s20678c8f8");
    test_class_info(&lv, &cd_S20678C8);
    dp->~S20678C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C8(Test_S20678C8, "S20678C8", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN8S20678C8C1Ev();
extern void _ZN8S20678C8D1Ev();
Name_Map name_map_S20678C8[] = {
  NSPAIR(_ZN8S20678C8C1Ev),
  NSPAIR(_ZN8S20678C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20678C8[];
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY vtc_S20678C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C8[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern VTBL_ENTRY _ZTI8S20678C8[];
extern  VTBL_ENTRY _ZTV8S20678C8[];
Class_Descriptor cd_S20678C8 = {  "S20678C8", // class name
  0,0,//no base classes
  &(vtc_S20678C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI8S20678C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20678C8),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20678C9  : S20677C3 {
  ::S20677C3 s20678c9f0;
  int s20678c9f1;
  long double s20678c9f2;
  int s20678c9f3;
  __tsi64 s20678c9f4;
  long s20678c9f5;
};
//SIG(-1 S20678C9) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S20678C9()
{
  extern Class_Descriptor cd_S20678C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20678C9, buf);
    S20678C9 &lv = *(new (buf) S20678C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20678C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C9)");
    check_base_class_offset(lv, (S20677C3*), 0, "S20678C9");
    check_field_offset(lv, s20678c9f0, ABISELECT(48,40), "S20678C9.s20678c9f0");
    check_field_offset(lv, s20678c9f1, ABISELECT(96,80), "S20678C9.s20678c9f1");
    check_field_offset(lv, s20678c9f2, ABISELECT(112,84), "S20678C9.s20678c9f2");
    check_field_offset(lv, s20678c9f3, ABISELECT(128,96), "S20678C9.s20678c9f3");
    check_field_offset(lv, s20678c9f4, ABISELECT(136,100), "S20678C9.s20678c9f4");
    check_field_offset(lv, s20678c9f5, ABISELECT(144,108), "S20678C9.s20678c9f5");
    test_class_info(&lv, &cd_S20678C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C9(Test_S20678C9, "S20678C9", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20678C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20678C9[];
Class_Descriptor cd_S20678C9 = {  "S20678C9", // class name
  bases_S20678C9, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S20678C9),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20678C7  : virtual S20678C8 , S20678C5 , S20678C9 {
  void *s20678c7f0;
  ::S20678C9 s20678c7f1;
  void *s20678c7f2;
  int s20678c7f3[2];
  long double s20678c7f4;
  int s20678c7f5[2];
  virtual void  v9(); // _ZN8S20678C72v9Ev
  ~S20678C7(); // tgen
  S20678C7(); // tgen
};
//SIG(-1 S20678C7) C1{ VBC2{ v2 FC3{} FC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} FC3 FL FC3 Fp FC3 Fp[2] FC3} BC4 BC6{ BC5 FC5 Fi FD Fi FL Fl} v1 Fp FC6 Fp Fi[2] FD Fi[2]}


void  S20678C7 ::v9(){vfunc_called(this, "_ZN8S20678C72v9Ev");}
S20678C7 ::~S20678C7(){ note_dtor("S20678C7", this);} // tgen
S20678C7 ::S20678C7(){ note_ctor("S20678C7", this);} // tgen

static void Test_S20678C7()
{
  extern Class_Descriptor cd_S20678C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,147)];
    init_test(&cd_S20678C7, buf);
    S20678C7 *dp, &lv = *(dp=new (buf) S20678C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,584), "sizeof(S20678C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C7)");
    check_base_class_offset(lv, (S20678C8*), ABISELECT(512,360), "S20678C7");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(784,544), "S20678C7");
    check_base_class_offset(lv, (S20678C5*), 0, "S20678C7");
    check_base_class_offset(lv, (S20677C3*)(S20678C9*), ABISELECT(144,100), "S20678C7");
    check_base_class_offset(lv, (S20678C9*), ABISELECT(144,100), "S20678C7");
    check_field_offset(lv, s20678c7f0, ABISELECT(296,212), "S20678C7.s20678c7f0");
    check_field_offset(lv, s20678c7f1, ABISELECT(304,216), "S20678C7.s20678c7f1");
    check_field_offset(lv, s20678c7f2, ABISELECT(464,328), "S20678C7.s20678c7f2");
    check_field_offset(lv, s20678c7f3, ABISELECT(472,332), "S20678C7.s20678c7f3");
    check_field_offset(lv, s20678c7f4, ABISELECT(480,340), "S20678C7.s20678c7f4");
    check_field_offset(lv, s20678c7f5, ABISELECT(496,352), "S20678C7.s20678c7f5");
    test_class_info(&lv, &cd_S20678C7);
    dp->~S20678C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C7(Test_S20678C7, "S20678C7", ABISELECT(832,584));

#else // __cplusplus

extern void _ZN8S20678C7C1Ev();
extern void _ZN8S20678C7D1Ev();
Name_Map name_map_S20678C7[] = {
  NSPAIR(_ZN8S20678C7C1Ev),
  NSPAIR(_ZN8S20678C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20678C8;
extern VTBL_ENTRY _ZTI8S20678C8[];
extern  VTBL_ENTRY _ZTV8S20678C8[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C9;
extern VTBL_ENTRY _ZTI8S20678C9[];
static Base_Class bases_S20678C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20678C8,    ABISELECT(512,360), //bcp->offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(784,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20678C5,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C3,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20678C9,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20678C7[];
extern void _ZN8S20678C72v9Ev();
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY vtc_S20678C7[] = {
  ABISELECT(512,360),
  ABISELECT(784,544),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C7[0]),
  (VTBL_ENTRY)&_ZN8S20678C72v9Ev,
  0,
  ABISELECT(-512,-360),
  (VTBL_ENTRY)&(_ZTI8S20678C7[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern VTBL_ENTRY _ZTV8S20678C7[];
static  VTBL_ENTRY _tg__ZTV8S20678C5__8S20678C7[] = {
  ABISELECT(784,544),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C7[] = {
  {&(_ZTV8S20678C7[4]),  4,9},
  {&(_tg__ZTV8S20678C5__8S20678C7[3]),  3,3},
  {&(_ZTV8S20678C7[8]),  8,9},
};
extern VTBL_ENTRY _ZTI8S20678C7[];
extern  VTBL_ENTRY _ZTV8S20678C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C7[];
Class_Descriptor cd_S20678C7 = {  "S20678C7", // class name
  bases_S20678C7, 5,
  &(vtc_S20678C7[0]), // expected_vtbl_contents
  &(vtt_S20678C7[0]), // expected_vtt_contents
  ABISELECT(832,584), // object size
  NSPAIRA(_ZTI8S20678C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20678C7),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20678C7),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  S20678C12  : virtual S20677C3 , virtual S20678C5 {
  int s20678c12f0;
  ::S20678C5 s20678c12f1;
  __tsi64 s20678c12f2;
  int s20678c12f3;
  void *s20678c12f4;
  virtual void  v10(); // _ZN9S20678C123v10Ev
  virtual void  v11(); // _ZN9S20678C123v11Ev
  ~S20678C12(); // tgen
  S20678C12(); // tgen
};
//SIG(-1 S20678C12) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 FD Fi FC2 FC2} v1 v2 Fi FC3 FL Fi Fp}


void  S20678C12 ::v10(){vfunc_called(this, "_ZN9S20678C123v10Ev");}
void  S20678C12 ::v11(){vfunc_called(this, "_ZN9S20678C123v11Ev");}
S20678C12 ::~S20678C12(){ note_dtor("S20678C12", this);} // tgen
S20678C12 ::S20678C12(){ note_ctor("S20678C12", this);} // tgen

static void Test_S20678C12()
{
  extern Class_Descriptor cd_S20678C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,77)];
    init_test(&cd_S20678C12, buf);
    S20678C12 *dp, &lv = *(dp=new (buf) S20678C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,304), "sizeof(S20678C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C12)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(232,164), "S20678C12");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(232,164), "S20678C12");
    check_base_class_offset(lv, (S20678C5*), ABISELECT(288,204), "S20678C12");
    check_field_offset(lv, s20678c12f0, ABISELECT(8,4), "S20678C12.s20678c12f0");
    check_field_offset(lv, s20678c12f1, ABISELECT(16,8), "S20678C12.s20678c12f1");
    check_field_offset(lv, s20678c12f2, ABISELECT(208,148), "S20678C12.s20678c12f2");
    check_field_offset(lv, s20678c12f3, ABISELECT(216,156), "S20678C12.s20678c12f3");
    check_field_offset(lv, s20678c12f4, ABISELECT(224,160), "S20678C12.s20678c12f4");
    test_class_info(&lv, &cd_S20678C12);
    dp->~S20678C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C12(Test_S20678C12, "S20678C12", ABISELECT(432,304));

#else // __cplusplus

extern void _ZN9S20678C12C1Ev();
extern void _ZN9S20678C12D1Ev();
Name_Map name_map_S20678C12[] = {
  NSPAIR(_ZN9S20678C12C1Ev),
  NSPAIR(_ZN9S20678C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
static Base_Class bases_S20678C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(232,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C5,    ABISELECT(288,204), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C12[];
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY vtc_S20678C12[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
extern VTBL_ENTRY _ZTV9S20678C12[];
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C12[] = {
  {&(_ZTV9S20678C12[4]),  4,9},
  {&(_ZTV9S20678C12[9]),  9,9},
  {&(_tg__ZTV8S20678C5__9S20678C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
Class_Descriptor cd_S20678C12 = {  "S20678C12", // class name
  bases_S20678C12, 2,
  &(vtc_S20678C12[0]), // expected_vtbl_contents
  &(vtt_S20678C12[0]), // expected_vtt_contents
  ABISELECT(432,304), // object size
  NSPAIRA(_ZTI9S20678C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20678C12),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C12),3, //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  S20678C11  : virtual S20678C4 , virtual S20678C2 , virtual S20678C12 {
  ::S20677C6_nt s20678c11f0;
  ::S20677C6_nt s20678c11f1;
  int s20678c11f2;
  ::S20678C5 s20678c11f3;
  ::S20677C6_nt s20678c11f4;
  ::S20677C6_nt s20678c11f5;
  ::S20678C8 s20678c11f6;
  ::S20678C2 s20678c11f7;
  void *s20678c11f8;
  ::S20677C6_nt s20678c11f9;
  virtual void  v12(); // _ZN9S20678C113v12Ev
  virtual void  v13(); // _ZN9S20678C113v13Ev
  ~S20678C11(); // tgen
  S20678C11(); // tgen
};
//SIG(-1 S20678C11) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v3 v4 v5 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC2 v6 v7 v8 FL FC6{} Fp Fc[2] FC3 Fl FC6} VBC7{ VBC3 VBC4 v9 v10 Fi FC4 FL Fi Fp} v1 v2 FC6 FC6 Fi FC4 FC6 FC6 FC8{ v11 FC6 FC4 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC5 Fp FC6}


void  S20678C11 ::v12(){vfunc_called(this, "_ZN9S20678C113v12Ev");}
void  S20678C11 ::v13(){vfunc_called(this, "_ZN9S20678C113v13Ev");}
S20678C11 ::~S20678C11(){ note_dtor("S20678C11", this);} // tgen
S20678C11 ::S20678C11(){ note_ctor("S20678C11", this);} // tgen

static void Test_S20678C11()
{
  extern Class_Descriptor cd_S20678C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(128,356)];
    init_test(&cd_S20678C11, buf);
    S20678C11 *dp, &lv = *(dp=new (buf) S20678C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2032,1420), "sizeof(S20678C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C11)");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(1496,1044), "S20678C11");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(1496,1044), "S20678C11");
    check_base_class_offset(lv, (S20677C3*)(S20678C2*), ABISELECT(1496,1044), "S20678C11");
    check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(1496,1044), "S20678C11");
    /*is_ambiguous_... S20678C11::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(1496,1044), "S20678C11");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(1088,752), "S20678C11");
    check_base_class_offset(lv, (S20678C4*), ABISELECT(1088,752), "S20678C11");
    check_base_class_offset(lv, (S20678C4*)(S20678C2*), ABISELECT(1088,752), "S20678C11");
    check_base_class_offset(lv, (S20678C2*), ABISELECT(1544,1084), "S20678C11");
    check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(1888,1320), "S20678C11");
    check_base_class_offset(lv, (S20678C12*), ABISELECT(1648,1156), "S20678C11");
    check_field_offset(lv, s20678c11f0, ABISELECT(8,4), "S20678C11.s20678c11f0");
    check_field_offset(lv, s20678c11f1, ABISELECT(9,5), "S20678C11.s20678c11f1");
    check_field_offset(lv, s20678c11f2, ABISELECT(12,8), "S20678C11.s20678c11f2");
    check_field_offset(lv, s20678c11f3, ABISELECT(16,12), "S20678C11.s20678c11f3");
    check_field_offset(lv, s20678c11f4, ABISELECT(208,152), "S20678C11.s20678c11f4");
    check_field_offset(lv, s20678c11f5, ABISELECT(209,153), "S20678C11.s20678c11f5");
    check_field_offset(lv, s20678c11f6, ABISELECT(224,156), "S20678C11.s20678c11f6");
    check_field_offset(lv, s20678c11f7, ABISELECT(496,340), "S20678C11.s20678c11f7");
    check_field_offset(lv, s20678c11f8, ABISELECT(1072,744), "S20678C11.s20678c11f8");
    check_field_offset(lv, s20678c11f9, ABISELECT(1080,748), "S20678C11.s20678c11f9");
    test_class_info(&lv, &cd_S20678C11);
    dp->~S20678C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C11(Test_S20678C11, "S20678C11", ABISELECT(2032,1420));

#else // __cplusplus

extern void _ZN9S20678C11C1Ev();
extern void _ZN9S20678C11D1Ev();
Name_Map name_map_S20678C11[] = {
  NSPAIR(_ZN9S20678C11C1Ev),
  NSPAIR(_ZN9S20678C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C2;
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
static Base_Class bases_S20678C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1496,1044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20678C5,    ABISELECT(1088,752), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C2,    ABISELECT(1544,1084), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C5,    ABISELECT(1888,1320), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(1648,1156), //bcp->offset
    28, //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},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C11[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY vtc_S20678C11[] = {
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-1544,-1084),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-1648,-1156),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(-392,-276),
  ABISELECT(-1888,-1320),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern VTBL_ENTRY _ZTV9S20678C11[];
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C11[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__9S20678C11[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C11[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2__9S20678C11[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C11[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__9S20678C11[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C11[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C11[] = {
  {&(_ZTV9S20678C11[7]),  7,39},
  {&(_ZTV9S20678C11[15]),  15,39},
  {&(_ZTV9S20678C11[25]),  25,39},
  {&(_ZTV9S20678C11[34]),  34,39},
  {&(_ZTV9S20678C11[39]),  39,39},
  {&(_tg__ZTV8S20678C4__9S20678C11[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__9S20678C11[3]),  3,3},
  {&(_tg__ZTV8S20678C2__9S20678C11[4]),  4,7},
  {&(_tg__ZTV8S20678C4__8S20678C2__9S20678C11[6]),  6,9},
  {&(_tg__ZTV9S20678C12__9S20678C11[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__9S20678C11[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A1__9S20678C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
Class_Descriptor cd_S20678C11 = {  "S20678C11", // class name
  bases_S20678C11, 6,
  &(vtc_S20678C11[0]), // expected_vtbl_contents
  &(vtt_S20678C11[0]), // expected_vtt_contents
  ABISELECT(2032,1420), // object size
  NSPAIRA(_ZTI9S20678C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20678C11),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C11),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20678C13  : virtual S20678C5 , S20678C11 , S20678C12 {
  int s20678c13f0;
  char s20678c13f1:2;
  ::S20677C6_nt s20678c13f2;
  int s20678c13f3;
  ~S20678C13(); // tgen
  S20678C13(); // tgen
};
//SIG(-1 S20678C13) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} BC4{ VBC5{ VBC3 BC2 v1 v2 v3 Fs FL Fc Fi[2] FC2 Fp FL Fi FL Fi} VBC6{ VBC3 VBC5 v4 v5 v6 FL FC7{} Fp Fc[2] FC3 Fl FC7} VBC8{ VBC3 VBC2 v7 v8 Fi FC2 FL Fi Fp} v9 v10 FC7 FC7 Fi FC2 FC7 FC7 FC9{ v11 FC7 FC2 FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} BC8 Fi Fc:2 FC7 Fi}


S20678C13 ::~S20678C13(){ note_dtor("S20678C13", this);} // tgen
S20678C13 ::S20678C13(){ note_ctor("S20678C13", this);} // tgen

static void Test_S20678C13()
{
  extern Class_Descriptor cd_S20678C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(144,400)];
    init_test(&cd_S20678C13, buf);
    S20678C13 *dp, &lv = *(dp=new (buf) S20678C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2288,1596), "sizeof(S20678C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C13)");
    /*is_ambiguous_... S20678C13::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(1480,1028), "S20678C13");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(1480,1028), "S20678C13");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(1480,1028), "S20678C13");
    check_base_class_offset(lv, (S20677C3*)(S20678C2*), ABISELECT(1480,1028), "S20678C13");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(1480,1028), "S20678C13");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(1480,1028), "S20678C13");
    /*is_ambiguous_... S20678C13::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*), ABISELECT(1344,928), "S20678C13");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(1344,928), "S20678C13");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(1344,928), "S20678C13");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(1536,1068), "S20678C13");
    check_base_class_offset(lv, (S20678C4*)(S20678C11*), ABISELECT(1536,1068), "S20678C13");
    check_base_class_offset(lv, (S20678C4*)(S20678C2*), ABISELECT(1536,1068), "S20678C13");
    check_base_class_offset(lv, (S20678C2*)(S20678C11*), ABISELECT(1944,1360), "S20678C13");
    check_base_class_offset(lv, (S20678C12*)(S20678C11*), ABISELECT(2048,1432), "S20678C13");
    check_base_class_offset(lv, (S20678C11*), 0, "S20678C13");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C12*), ABISELECT(1088,752), "S20678C13");
    check_field_offset(lv, s20678c13f0, ABISELECT(1320,916), "S20678C13.s20678c13f0");
    set_bf_and_test(lv, s20678c13f1, ABISELECT(1324,920), 0, 2, 1, "S20678C13");
    set_bf_and_test(lv, s20678c13f1, ABISELECT(1324,920), 0, 2, hide_sll(1LL<<1), "S20678C13");
    check_field_offset(lv, s20678c13f2, ABISELECT(1325,921), "S20678C13.s20678c13f2");
    check_field_offset(lv, s20678c13f3, ABISELECT(1328,924), "S20678C13.s20678c13f3");
    test_class_info(&lv, &cd_S20678C13);
    dp->~S20678C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C13(Test_S20678C13, "S20678C13", ABISELECT(2288,1596));

#else // __cplusplus

extern void _ZN9S20678C13C1Ev();
extern void _ZN9S20678C13D1Ev();
Name_Map name_map_S20678C13[] = {
  NSPAIR(_ZN9S20678C13C1Ev),
  NSPAIR(_ZN9S20678C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C2;
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
static Base_Class bases_S20678C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1480,1028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20678C5,    ABISELECT(1344,928), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C5,    ABISELECT(1536,1068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    3, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(1536,1068), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20678C2,    ABISELECT(1944,1360), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(2048,1432), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20678C12,    ABISELECT(1088,752), //bcp->offset
    9, //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C13[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY vtc_S20678C13[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  ABISELECT(256,176),
  ABISELECT(392,276),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
extern VTBL_ENTRY _ZTV9S20678C13[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C11__9S20678C13[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C11__9S20678C13[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C11__9S20678C13[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C11__9S20678C13[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C11__9S20678C13[] = {
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__A__9S20678C13[] = {
  ABISELECT(256,176),
  ABISELECT(392,276),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__A__9S20678C13[] = {
  ABISELECT(136,100),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C13[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C13[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__A1__9S20678C13[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C13[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2__9S20678C13[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C13[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__9S20678C13[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTT_ENTRY vtt_S20678C13[] = {
  {&(_ZTV9S20678C13[7]),  7,45},
  {&(_tg__ZTV9S20678C11__9S20678C13[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C11__9S20678C13[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C11__9S20678C13[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C11__9S20678C13[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C11__9S20678C13[3]),  3,3},
  {&(_tg__ZTV9S20678C12__A__9S20678C13[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__A__9S20678C13[3]),  3,3},
  {&(_ZTV9S20678C13[18]),  18,45},
  {&(_ZTV9S20678C13[24]),  24,45},
  {&(_ZTV9S20678C13[34]),  34,45},
  {&(_ZTV9S20678C13[43]),  43,45},
  {&(_ZTV9S20678C13[13]),  13,45},
  {&(_tg__ZTV8S20678C5__9S20678C13[3]),  3,3},
  {&(_tg__ZTV8S20678C4__9S20678C13[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__A1__9S20678C13[3]),  3,3},
  {&(_tg__ZTV8S20678C2__9S20678C13[4]),  4,7},
  {&(_tg__ZTV8S20678C4__8S20678C2__9S20678C13[6]),  6,9},
  {&(_tg__ZTV9S20678C12__9S20678C13[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__9S20678C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C13[];
extern  VTBL_ENTRY _ZTV9S20678C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C13[];
Class_Descriptor cd_S20678C13 = {  "S20678C13", // class name
  bases_S20678C13, 8,
  &(vtc_S20678C13[0]), // expected_vtbl_contents
  &(vtt_S20678C13[0]), // expected_vtt_contents
  ABISELECT(2288,1596), // object size
  NSPAIRA(_ZTI9S20678C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20678C13),45, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C13),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20678C16  : S20678C5 {
  __tsi64 s20678c16f0;
  char s20678c16f1[7];
  void *s20678c16f2;
  int s20678c16f3;
  ::S20677C6_nt s20678c16f4;
  ::S20677C6_nt s20678c16f5;
  char s20678c16f6[10];
  virtual void  v15(); // _ZN9S20678C163v15Ev
  ~S20678C16(); // tgen
  S20678C16(); // tgen
};
//SIG(-1 S20678C16) C1{ BC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} v1 FL Fc[7] Fp Fi FC4{} FC4 Fc[10]}


void  S20678C16 ::v15(){vfunc_called(this, "_ZN9S20678C163v15Ev");}
S20678C16 ::~S20678C16(){ note_dtor("S20678C16", this);} // tgen
S20678C16 ::S20678C16(){ note_ctor("S20678C16", this);} // tgen

static void Test_S20678C16()
{
  extern Class_Descriptor cd_S20678C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,45)];
    init_test(&cd_S20678C16, buf);
    S20678C16 *dp, &lv = *(dp=new (buf) S20678C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,176), "sizeof(S20678C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C16)");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(176,136), "S20678C16");
    check_base_class_offset(lv, (S20678C5*), 0, "S20678C16");
    check_field_offset(lv, s20678c16f0, ABISELECT(136,100), "S20678C16.s20678c16f0");
    check_field_offset(lv, s20678c16f1, ABISELECT(144,108), "S20678C16.s20678c16f1");
    check_field_offset(lv, s20678c16f2, ABISELECT(152,116), "S20678C16.s20678c16f2");
    check_field_offset(lv, s20678c16f3, ABISELECT(160,120), "S20678C16.s20678c16f3");
    check_field_offset(lv, s20678c16f4, ABISELECT(164,124), "S20678C16.s20678c16f4");
    check_field_offset(lv, s20678c16f5, ABISELECT(165,125), "S20678C16.s20678c16f5");
    check_field_offset(lv, s20678c16f6, ABISELECT(166,126), "S20678C16.s20678c16f6");
    test_class_info(&lv, &cd_S20678C16);
    dp->~S20678C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C16(Test_S20678C16, "S20678C16", ABISELECT(224,176));

#else // __cplusplus

extern void _ZN9S20678C16C1Ev();
extern void _ZN9S20678C16D1Ev();
Name_Map name_map_S20678C16[] = {
  NSPAIR(_ZN9S20678C16C1Ev),
  NSPAIR(_ZN9S20678C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
static Base_Class bases_S20678C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(176,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
  0, 1},
  {&cd_S20678C5,    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 _ZTI9S20678C16[];
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY vtc_S20678C16[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C16[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern VTBL_ENTRY _ZTV9S20678C16[];
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C16[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C16[] = {
  {&(_ZTV9S20678C16[3]),  3,4},
  {&(_tg__ZTV8S20678C5__9S20678C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C16[];
extern  VTBL_ENTRY _ZTV9S20678C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C16[];
Class_Descriptor cd_S20678C16 = {  "S20678C16", // class name
  bases_S20678C16, 2,
  &(vtc_S20678C16[0]), // expected_vtbl_contents
  &(vtt_S20678C16[0]), // expected_vtt_contents
  ABISELECT(224,176), // object size
  NSPAIRA(_ZTI9S20678C16),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20678C16),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C16),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  S20678C15  : S20678C4 , virtual S20678C12 , S20678C5 , virtual S20678C8 , virtual S20678C16 {
  long s20678c15f0;
  __tsi64 s20678c15f1;
  long double s20678c15f2;
  ::S20677C6_nt s20678c15f3;
  virtual void  v16(); // _ZN9S20678C153v16Ev
  ~S20678C15(); // tgen
  S20678C15(); // tgen
};
//SIG(-1 S20678C15) C1{ BC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC4 v5 v6 Fi FC4 FL Fi Fp} BC4 VBC6{ v7 FC7{} FC4 FC7 FL FC7 Fp FC7 Fp[2] FC7} VBC8{ BC4 v8 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v1 Fl FL FD FC7}


void  S20678C15 ::v16(){vfunc_called(this, "_ZN9S20678C153v16Ev");}
S20678C15 ::~S20678C15(){ note_dtor("S20678C15", this);} // tgen
S20678C15 ::S20678C15(){ note_ctor("S20678C15", this);} // tgen

static void Test_S20678C15()
{
  extern Class_Descriptor cd_S20678C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(94,262)];
    init_test(&cd_S20678C15, buf);
    S20678C15 *dp, &lv = *(dp=new (buf) S20678C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1488,1044), "sizeof(S20678C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C15)");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(600,420), "S20678C15");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(600,420), "S20678C15");
    check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(600,420), "S20678C15");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(600,420), "S20678C15");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(600,420), "S20678C15");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C16*), ABISELECT(600,420), "S20678C15");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*), 0, "S20678C15");
    check_base_class_offset(lv, (S20678C4*), 0, "S20678C15");
    check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(896,624), "S20678C15");
    check_base_class_offset(lv, (S20678C12*), ABISELECT(656,460), "S20678C15");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*), ABISELECT(416,292), "S20678C15");
    check_base_class_offset(lv, (S20678C8*), ABISELECT(1040,724), "S20678C15");
    check_base_class_offset(lv, (S20678C5*)(S20678C16*), ABISELECT(1312,908), "S20678C15");
    check_base_class_offset(lv, (S20678C16*), ABISELECT(1312,908), "S20678C15");
    check_field_offset(lv, s20678c15f0, ABISELECT(552,392), "S20678C15.s20678c15f0");
    check_field_offset(lv, s20678c15f1, ABISELECT(560,396), "S20678C15.s20678c15f1");
    check_field_offset(lv, s20678c15f2, ABISELECT(576,404), "S20678C15.s20678c15f2");
    check_field_offset(lv, s20678c15f3, ABISELECT(592,416), "S20678C15.s20678c15f3");
    test_class_info(&lv, &cd_S20678C15);
    dp->~S20678C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C15(Test_S20678C15, "S20678C15", ABISELECT(1488,1044));

#else // __cplusplus

extern void _ZN9S20678C15C1Ev();
extern void _ZN9S20678C15D1Ev();
Name_Map name_map_S20678C15[] = {
  NSPAIR(_ZN9S20678C15C1Ev),
  NSPAIR(_ZN9S20678C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C8;
extern VTBL_ENTRY _ZTI8S20678C8[];
extern  VTBL_ENTRY _ZTV8S20678C8[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C16;
extern VTBL_ENTRY _ZTI9S20678C16[];
extern  VTBL_ENTRY _ZTV9S20678C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C16[];
static Base_Class bases_S20678C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(600,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20678C5,    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
    6, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20678C4,    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_S20678C5,    ABISELECT(896,624), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(656,460), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C5,    ABISELECT(416,292), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20678C8,    ABISELECT(1040,724), //bcp->offset
    25, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C5,    ABISELECT(1312,908), //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
    8, //immediately_derived
  0, 0},
  {&cd_S20678C16,    ABISELECT(1312,908), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C15[];
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN8S20678C82v8Ev();
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY vtc_S20678C15[] = {
  ABISELECT(1312,908),
  ABISELECT(1040,724),
  ABISELECT(896,624),
  ABISELECT(656,460),
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
  ABISELECT(184,128),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-56,-40),
  ABISELECT(-656,-460),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(-296,-204),
  ABISELECT(-896,-624),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  0,
  ABISELECT(-1040,-724),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
  0,
  ABISELECT(-712,-488),
  ABISELECT(-1312,-908),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern VTBL_ENTRY _ZTV9S20678C15[];
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C15[] = {
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__9S20678C15[] = {
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A__9S20678C15[] = {
  ABISELECT(184,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C15[] = {
  ABISELECT(240,164),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__9S20678C15[] = {
  ABISELECT(-296,-204),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C15[] = {
  ABISELECT(-296,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C15[] = {
  ABISELECT(-712,-488),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C16[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C16__A3__9S20678C15[] = {
  ABISELECT(-712,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C15[] = {
  {&(_ZTV9S20678C15[7]),  7,34},
  {&(_tg__ZTV8S20678C4__9S20678C15[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__9S20678C15[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A__9S20678C15[3]),  3,3},
  {&(_ZTV9S20678C15[20]),  20,34},
  {&(_ZTV9S20678C15[25]),  25,34},
  {&(_ZTV9S20678C15[14]),  14,34},
  {&(_ZTV9S20678C15[28]),  28,34},
  {&(_ZTV9S20678C15[33]),  33,34},
  {&(_tg__ZTV9S20678C12__9S20678C15[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__9S20678C15[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A1__9S20678C15[3]),  3,3},
  {&(_tg__ZTV9S20678C16__9S20678C15[3]),  3,4},
  {&(_tg__ZTV8S20678C59S20678C16__A3__9S20678C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C15[];
extern  VTBL_ENTRY _ZTV9S20678C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C15[];
Class_Descriptor cd_S20678C15 = {  "S20678C15", // class name
  bases_S20678C15, 9,
  &(vtc_S20678C15[0]), // expected_vtbl_contents
  &(vtt_S20678C15[0]), // expected_vtt_contents
  ABISELECT(1488,1044), // object size
  NSPAIRA(_ZTI9S20678C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20678C15),34, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C15),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20678C17  : virtual S20678C8 {
  ::S20678C15 s20678c17f0;
  ::S20677C6_nt s20678c17f1;
  __tsi64 s20678c17f2;
  int s20678c17f3[2];
  virtual void  v22(); // _ZN9S20678C173v22Ev
  ~S20678C17(); // tgen
  S20678C17(); // tgen
};
//SIG(-1 S20678C17) C1{ VBC2{ v2 FC3{} FC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} FC3 FL FC3 Fp FC3 Fp[2] FC3} v1 FC6{ BC7{ VBC5 BC4 v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC8{ VBC5 VBC4 v7 v8 Fi FC4 FL Fi Fp} BC4 VBC2 VBC9{ BC4 v9 FL Fc[7] Fp Fi FC3 FC3 Fc[10]} v3 Fl FL FD FC3} FC3 FL Fi[2]}


void  S20678C17 ::v22(){vfunc_called(this, "_ZN9S20678C173v22Ev");}
S20678C17 ::~S20678C17(){ note_dtor("S20678C17", this);} // tgen
S20678C17 ::S20678C17(){ note_ctor("S20678C17", this);} // tgen

static void Test_S20678C17()
{
  extern Class_Descriptor cd_S20678C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(114,314)];
    init_test(&cd_S20678C17, buf);
    S20678C17 *dp, &lv = *(dp=new (buf) S20678C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1808,1252), "sizeof(S20678C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C17)");
    check_base_class_offset(lv, (S20678C8*), ABISELECT(1536,1068), "S20678C17");
    check_field_offset(lv, s20678c17f0, ABISELECT(16,4), "S20678C17.s20678c17f0");
    check_field_offset(lv, s20678c17f1, ABISELECT(1504,1048), "S20678C17.s20678c17f1");
    check_field_offset(lv, s20678c17f2, ABISELECT(1512,1052), "S20678C17.s20678c17f2");
    check_field_offset(lv, s20678c17f3, ABISELECT(1520,1060), "S20678C17.s20678c17f3");
    test_class_info(&lv, &cd_S20678C17);
    dp->~S20678C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C17(Test_S20678C17, "S20678C17", ABISELECT(1808,1252));

#else // __cplusplus

extern void _ZN9S20678C17C1Ev();
extern void _ZN9S20678C17D1Ev();
Name_Map name_map_S20678C17[] = {
  NSPAIR(_ZN9S20678C17C1Ev),
  NSPAIR(_ZN9S20678C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20678C8;
extern VTBL_ENTRY _ZTI8S20678C8[];
extern  VTBL_ENTRY _ZTV8S20678C8[];
static Base_Class bases_S20678C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20678C8,    ABISELECT(1536,1068), //bcp->offset
    4, //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 _ZTI9S20678C17[];
extern void _ZN9S20678C173v22Ev();
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY vtc_S20678C17[] = {
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C17[0]),
  (VTBL_ENTRY)&_ZN9S20678C173v22Ev,
  0,
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20678C17[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern VTBL_ENTRY _ZTV9S20678C17[];
static  VTT_ENTRY vtt_S20678C17[] = {
  {&(_ZTV9S20678C17[3]),  3,8},
  {&(_ZTV9S20678C17[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S20678C17[];
extern  VTBL_ENTRY _ZTV9S20678C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C17[];
Class_Descriptor cd_S20678C17 = {  "S20678C17", // class name
  bases_S20678C17, 1,
  &(vtc_S20678C17[0]), // expected_vtbl_contents
  &(vtt_S20678C17[0]), // expected_vtt_contents
  ABISELECT(1808,1252), // object size
  NSPAIRA(_ZTI9S20678C17),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20678C17),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C17),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  S20678C14  : S20678C15 , S20678C17 , S20678C13 {
  void *s20678c14f0;
  __tsi64 s20678c14f1;
  int s20678c14f2;
  void *s20678c14f3;
  int s20678c14f4[3];
  char s20678c14f5;
  __tsi64 s20678c14f6;
  void *s20678c14f7;
  long double s20678c14f8;
  ~S20678C14(); // tgen
  S20678C14(); // tgen
};
//SIG(-1 S20678C14) C1{ BC2{ BC3{ VBC4{ m Fp FL[4] Fs} BC5{ VBC4 FD Fi FC4 FC4} v1 v2 v3 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC6{ VBC4 VBC5 v4 v5 Fi FC5 FL Fi Fp} BC5 VBC7{ v6 FC8{} FC5 FC8 FL FC8 Fp FC8 Fp[2] FC8} VBC9{ BC5 v7 FL Fc[7] Fp Fi FC8 FC8 Fc[10]} v8 Fl FL FD FC8} BC10{ VBC7 v9 FC2 FC8 FL Fi[2]} BC11{ VBC5 BC12{ VBC3 VBC13{ VBC4 VBC3 v10 v11 v12 FL FC8 Fp Fc[2] FC4 Fl FC8} VBC6 v13 v14 FC8 FC8 Fi FC5 FC8 FC8 FC7 FC13 Fp FC8} BC6 Fi Fc:2 FC8 Fi} Fp FL Fi Fp Fi[3] Fc FL Fp FD}


S20678C14 ::~S20678C14(){ note_dtor("S20678C14", this);} // tgen
S20678C14 ::S20678C14(){ note_ctor("S20678C14", this);} // tgen

static void Test_S20678C14()
{
  extern Class_Descriptor cd_S20678C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(311,867)];
    init_test(&cd_S20678C14, buf);
    S20678C14 *dp, &lv = *(dp=new (buf) S20678C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4960,3464), "sizeof(S20678C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C14)");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*)(S20678C15*), ABISELECT(3568,2476), "S20678C14");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*)(S20678C15*), ABISELECT(3568,2476), "S20678C14");
    /*is_ambiguous_... S20678C14::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(3568,2476), "S20678C14");
    /*is_ambiguous_... S20678C14::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(3568,2476), "S20678C14");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C15*), ABISELECT(3568,2476), "S20678C14");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C16*), ABISELECT(3568,2476), "S20678C14");
    /*is_ambiguous_... S20678C14::S20678C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(3568,2476), "S20678C14");
    /*is_ambiguous_... S20678C14::S20678C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(3568,2476), "S20678C14");
    check_base_class_offset(lv, (S20677C3*)(S20678C2*), ABISELECT(3568,2476), "S20678C14");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*)(S20678C13*), ABISELECT(3568,2476), "S20678C14");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*)(S20678C15*), 0, "S20678C14");
    check_base_class_offset(lv, (S20678C4*)(S20678C15*), 0, "S20678C14");
    /*is_ambiguous_... S20678C14::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(3856,2680), "S20678C14");
    /*is_ambiguous_... S20678C13::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C13*), ABISELECT(3856,2680), "S20678C14");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*)(S20678C13*), ABISELECT(3856,2680), "S20678C14");
    check_base_class_offset(lv, (S20678C12*)(S20678C15*), ABISELECT(3616,2516), "S20678C14");
    check_base_class_offset(lv, (S20678C12*)(S20678C11*)(S20678C13*), ABISELECT(3616,2516), "S20678C14");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C15*), ABISELECT(416,292), "S20678C14");
    check_base_class_offset(lv, (S20678C8*)(S20678C15*), ABISELECT(4000,2780), "S20678C14");
    check_base_class_offset(lv, (S20678C8*)(S20678C17*), ABISELECT(4000,2780), "S20678C14");
    check_base_class_offset(lv, (S20678C5*)(S20678C16*), ABISELECT(4272,2964), "S20678C14");
    check_base_class_offset(lv, (S20678C16*)(S20678C15*), ABISELECT(4272,2964), "S20678C14");
    check_base_class_offset(lv, (S20678C15*), 0, "S20678C14");
    check_base_class_offset(lv, (S20678C17*), ABISELECT(608,420), "S20678C14");
    /*is_ambiguous_... S20678C14::S20678C4 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(4448,3100), "S20678C14");
    check_base_class_offset(lv, (S20678C4*)(S20678C11*)(S20678C13*), ABISELECT(4448,3100), "S20678C14");
    check_base_class_offset(lv, (S20678C4*)(S20678C2*), ABISELECT(4448,3100), "S20678C14");
    check_base_class_offset(lv, (S20678C2*)(S20678C11*)(S20678C13*), ABISELECT(4856,3392), "S20678C14");
    check_base_class_offset(lv, (S20678C11*)(S20678C13*), ABISELECT(2144,1488), "S20678C14");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C12*)(S20678C13*), ABISELECT(3232,2240), "S20678C14");
    check_base_class_offset(lv, (S20678C13*), ABISELECT(2144,1488), "S20678C14");
    check_field_offset(lv, s20678c14f0, ABISELECT(3480,2416), "S20678C14.s20678c14f0");
    check_field_offset(lv, s20678c14f1, ABISELECT(3488,2420), "S20678C14.s20678c14f1");
    check_field_offset(lv, s20678c14f2, ABISELECT(3496,2428), "S20678C14.s20678c14f2");
    check_field_offset(lv, s20678c14f3, ABISELECT(3504,2432), "S20678C14.s20678c14f3");
    check_field_offset(lv, s20678c14f4, ABISELECT(3512,2436), "S20678C14.s20678c14f4");
    check_field_offset(lv, s20678c14f5, ABISELECT(3524,2448), "S20678C14.s20678c14f5");
    check_field_offset(lv, s20678c14f6, ABISELECT(3528,2452), "S20678C14.s20678c14f6");
    check_field_offset(lv, s20678c14f7, ABISELECT(3536,2460), "S20678C14.s20678c14f7");
    check_field_offset(lv, s20678c14f8, ABISELECT(3552,2464), "S20678C14.s20678c14f8");
    test_class_info(&lv, &cd_S20678C14);
    dp->~S20678C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C14(Test_S20678C14, "S20678C14", ABISELECT(4960,3464));

#else // __cplusplus

extern void _ZN9S20678C14C1Ev();
extern void _ZN9S20678C14D1Ev();
Name_Map name_map_S20678C14[] = {
  NSPAIR(_ZN9S20678C14C1Ev),
  NSPAIR(_ZN9S20678C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C8;
extern VTBL_ENTRY _ZTI8S20678C8[];
extern  VTBL_ENTRY _ZTV8S20678C8[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C16;
extern VTBL_ENTRY _ZTI9S20678C16[];
extern  VTBL_ENTRY _ZTV9S20678C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C16[];
extern Class_Descriptor cd_S20678C15;
extern VTBL_ENTRY _ZTI9S20678C15[];
extern  VTBL_ENTRY _ZTV9S20678C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C15[];
extern Class_Descriptor cd_S20678C17;
extern VTBL_ENTRY _ZTI9S20678C17[];
extern  VTBL_ENTRY _ZTV9S20678C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C17[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C2;
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C13;
extern VTBL_ENTRY _ZTI9S20678C13[];
extern  VTBL_ENTRY _ZTV9S20678C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C13[];
static Base_Class bases_S20678C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(3568,2476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20678C5,    0, //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
    9, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20678C4,    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
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20678C5,    ABISELECT(3856,2680), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(3616,2516), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(416,292), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20678C8,    ABISELECT(4000,2780), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(4272,2964), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20678C16,    ABISELECT(4272,2964), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20678C15,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20678C17,    ABISELECT(608,420), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20678C5,    ABISELECT(4448,3100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(4448,3100), //bcp->offset
    55, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20678C2,    ABISELECT(4856,3392), //bcp->offset
    64, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20678C11,    ABISELECT(2144,1488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20678C12,    ABISELECT(3232,2240), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20678C13,    ABISELECT(2144,1488), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C14[];
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
extern void _ZN9S20678C173v22Ev();
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN8S20678C82v8Ev();
extern void _ZN9S20678C163v15Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY vtc_S20678C14[] = {
  ABISELECT(4856,3392),
  ABISELECT(4448,3100),
  ABISELECT(4272,2964),
  ABISELECT(4000,2780),
  ABISELECT(3856,2680),
  ABISELECT(3616,2516),
  ABISELECT(3568,2476),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
  ABISELECT(3152,2184),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  ABISELECT(3392,2360),
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN9S20678C173v22Ev,
  ABISELECT(1712,1192),
  ABISELECT(1472,1028),
  ABISELECT(2712,1904),
  ABISELECT(1424,988),
  ABISELECT(2304,1612),
  ABISELECT(-2144,-1488),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  ABISELECT(624,440),
  ABISELECT(336,236),
  ABISELECT(-3232,-2240),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  ABISELECT(-3616,-2516),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(-288,-204),
  ABISELECT(-3856,-2680),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  0,
  ABISELECT(-4000,-2780),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
  0,
  ABISELECT(-704,-488),
  ABISELECT(-4272,-2964),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
  0,
  0,
  0,
  ABISELECT(-880,-624),
  ABISELECT(-4448,-3100),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1288,-916),
  ABISELECT(-4856,-3392),
  (VTBL_ENTRY)&(_ZTI9S20678C14[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern VTBL_ENTRY _ZTV9S20678C14[];
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C15__9S20678C14[] = {
  ABISELECT(4272,2964),
  ABISELECT(4000,2780),
  ABISELECT(3856,2680),
  ABISELECT(3616,2516),
  ABISELECT(3568,2476),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C49S20678C15__9S20678C14[] = {
  ABISELECT(3568,2476),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C49S20678C15__9S20678C14[] = {
  ABISELECT(3568,2476),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C15__A2__9S20678C14[] = {
  ABISELECT(3152,2184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C15__9S20678C14[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  ABISELECT(-3616,-2516),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C15__9S20678C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-3856,-2680),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A__9S20678C15__9S20678C14[] = {
  ABISELECT(3152,2184),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__9S20678C15__9S20678C14[] = {
  0,
  ABISELECT(-4000,-2780),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C15__9S20678C14[] = {
  0,
  ABISELECT(-704,-488),
  ABISELECT(-4272,-2964),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern void _ZN9S20678C173v22Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C17__9S20678C14[] = {
  ABISELECT(3392,2360),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C17[0]),
  (VTBL_ENTRY)&_ZN9S20678C173v22Ev,
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__9S20678C17__9S20678C14[] = {
  0,
  ABISELECT(-3392,-2360),
  (VTBL_ENTRY)&(_ZTI9S20678C17[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C13__9S20678C14[] = {
  ABISELECT(1712,1192),
  ABISELECT(1472,1028),
  ABISELECT(2712,1904),
  ABISELECT(1424,988),
  ABISELECT(2304,1612),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C119S20678C13__9S20678C14[] = {
  ABISELECT(1712,1192),
  ABISELECT(1472,1028),
  ABISELECT(2712,1904),
  ABISELECT(1424,988),
  ABISELECT(2304,1612),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C119S20678C13__9S20678C14[] = {
  0,
  0,
  0,
  ABISELECT(-880,-624),
  ABISELECT(-2304,-1612),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C119S20678C13__9S20678C14[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1288,-916),
  ABISELECT(-2712,-1904),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C119S20678C13__9S20678C14[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  ABISELECT(-1472,-1028),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C119S20678C13__9S20678C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-1712,-1192),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C129S20678C13__A1__9S20678C14[] = {
  ABISELECT(624,440),
  ABISELECT(336,236),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C129S20678C13__A1__9S20678C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-624,-440),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C13__9S20678C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-1712,-1192),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C13__9S20678C14[] = {
  0,
  0,
  0,
  ABISELECT(-880,-624),
  ABISELECT(-2304,-1612),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C13__9S20678C14[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1288,-916),
  ABISELECT(-2712,-1904),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C13__9S20678C14[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  ABISELECT(-1472,-1028),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__A__9S20678C13__9S20678C14[] = {
  ABISELECT(624,440),
  ABISELECT(336,236),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C14[] = {
  ABISELECT(240,164),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__9S20678C14[] = {
  ABISELECT(-288,-204),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C14[] = {
  ABISELECT(-288,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C14[] = {
  ABISELECT(-704,-488),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C16[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C16__A3__9S20678C14[] = {
  ABISELECT(-704,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__A1__9S20678C14[] = {
  ABISELECT(-880,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__A4__9S20678C14[] = {
  ABISELECT(-880,-624),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C14[] = {
  ABISELECT(-408,-292),
  ABISELECT(-1288,-916),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2__9S20678C14[] = {
  0,
  0,
  0,
  ABISELECT(-880,-624),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTT_ENTRY vtt_S20678C14[] = {
  {&(_ZTV9S20678C14[9]),  9,74},
  {&(_tg__ZTV9S20678C15__9S20678C14[7]),  7,11},
  {&(_tg__ZTV8S20678C49S20678C15__9S20678C14[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C49S20678C15__9S20678C14[3]),  3,3},
  {&(_tg__ZTV8S20678C59S20678C15__A2__9S20678C14[3]),  3,3},
  {&(_tg__ZTV9S20678C12__9S20678C15__9S20678C14[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C15__9S20678C14[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A__9S20678C15__9S20678C14[3]),  3,3},
  {&(_tg__ZTV8S20678C8__9S20678C15__9S20678C14[3]),  3,4},
  {&(_tg__ZTV9S20678C16__9S20678C15__9S20678C14[4]),  4,5},
  {&(_tg__ZTV9S20678C17__9S20678C14[3]),  3,4},
  {&(_tg__ZTV8S20678C8__9S20678C17__9S20678C14[3]),  3,4},
  {&(_tg__ZTV9S20678C13__9S20678C14[7]),  7,9},
  {&(_tg__ZTV9S20678C119S20678C13__9S20678C14[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C119S20678C13__9S20678C14[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C119S20678C13__9S20678C14[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C119S20678C13__9S20678C14[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C119S20678C13__9S20678C14[3]),  3,3},
  {&(_tg__ZTV9S20678C129S20678C13__A1__9S20678C14[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C129S20678C13__A1__9S20678C14[3]),  3,3},
  {&(_tg__ZTV8S20678C5__9S20678C13__9S20678C14[3]),  3,3},
  {&(_tg__ZTV8S20678C4__9S20678C13__9S20678C14[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C13__9S20678C14[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C13__9S20678C14[6]),  6,8},
  {&(_tg__ZTV9S20678C12__A__9S20678C13__9S20678C14[4]),  4,6},
  {&(_ZTV9S20678C14[41]),  41,74},
  {&(_ZTV9S20678C14[46]),  46,74},
  {&(_ZTV9S20678C14[16]),  16,74},
  {&(_ZTV9S20678C14[49]),  49,74},
  {&(_ZTV9S20678C14[54]),  54,74},
  {&(_ZTV9S20678C14[19]),  19,74},
  {&(_ZTV9S20678C14[27]),  27,74},
  {&(_ZTV9S20678C14[61]),  61,74},
  {&(_ZTV9S20678C14[71]),  71,74},
  {&(_ZTV9S20678C14[33]),  33,74},
  {&(_tg__ZTV9S20678C12__9S20678C14[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__9S20678C14[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A1__9S20678C14[3]),  3,3},
  {&(_tg__ZTV9S20678C16__9S20678C14[3]),  3,4},
  {&(_tg__ZTV8S20678C59S20678C16__A3__9S20678C14[3]),  3,3},
  {&(_tg__ZTV8S20678C4__A1__9S20678C14[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__A4__9S20678C14[3]),  3,3},
  {&(_tg__ZTV8S20678C2__9S20678C14[4]),  4,7},
  {&(_tg__ZTV8S20678C4__8S20678C2__9S20678C14[6]),  6,9},
};
extern VTBL_ENTRY _ZTI9S20678C14[];
extern  VTBL_ENTRY _ZTV9S20678C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C14[];
Class_Descriptor cd_S20678C14 = {  "S20678C14", // class name
  bases_S20678C14, 17,
  &(vtc_S20678C14[0]), // expected_vtbl_contents
  &(vtt_S20678C14[0]), // expected_vtt_contents
  ABISELECT(4960,3464), // object size
  NSPAIRA(_ZTI9S20678C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20678C14),74, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C14),44, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20678C10  : S20678C11 {
  int s20678c10f0[2];
  ::S20677C6_nt s20678c10f1;
  ::S20677C6_nt s20678c10f2;
  ::S20677C6_nt s20678c10f3;
  ::S20677C6_nt s20678c10f4;
  ::S20677C6_nt s20678c10f5;
  ::S20678C13 s20678c10f6;
  __tsi64 s20678c10f7[4];
  ::S20677C6_nt s20678c10f8;
  ::S20678C14 s20678c10f9[2];
  char s20678c10f10;
  ::S20677C6_nt s20678c10f11;
  virtual void  v14(); // _ZN9S20678C103v14Ev
  ~S20678C10(); // tgen
  S20678C10(); // tgen
};
//SIG(-1 S20678C10) C1{ BC2{ VBC3{ VBC4{ m Fp FL[4] Fs} BC5{ VBC4 FD Fi FC4 FC4} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC6{ VBC4 VBC3 v5 v6 v7 FL FC7{} Fp Fc[2] FC4 Fl FC7} VBC8{ VBC4 VBC5 v8 v9 Fi FC5 FL Fi Fp} v10 v11 FC7 FC7 Fi FC5 FC7 FC7 FC9{ v12 FC7 FC5 FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} v1 Fi[2] FC7 FC7 FC7 FC7 FC7 FC10{ VBC5 BC2 BC8 Fi Fc:2 FC7 Fi} FL[4] FC7 FC11{ BC12{ BC3 VBC8 BC5 VBC9 VBC13{ BC5 v13 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v14 Fl FL FD FC7} BC14{ VBC9 v15 FC12 FC7 FL Fi[2]} BC10 Fp FL Fi Fp Fi[3] Fc FL Fp FD}[2] Fc FC7}


void  S20678C10 ::v14(){vfunc_called(this, "_ZN9S20678C103v14Ev");}
S20678C10 ::~S20678C10(){ note_dtor("S20678C10", this);} // tgen
S20678C10 ::S20678C10(){ note_ctor("S20678C10", this);} // tgen

static void Test_S20678C10()
{
  extern Class_Descriptor cd_S20678C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(896,2501)];
    init_test(&cd_S20678C10, buf);
    S20678C10 *dp, &lv = *(dp=new (buf) S20678C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14320,10000), "sizeof(S20678C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C10)");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(13784,9624), "S20678C10");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(13784,9624), "S20678C10");
    check_base_class_offset(lv, (S20677C3*)(S20678C2*), ABISELECT(13784,9624), "S20678C10");
    check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(13784,9624), "S20678C10");
    /*is_ambiguous_... S20678C10::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(13784,9624), "S20678C10");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(13376,9332), "S20678C10");
    check_base_class_offset(lv, (S20678C4*)(S20678C11*), ABISELECT(13376,9332), "S20678C10");
    check_base_class_offset(lv, (S20678C4*)(S20678C2*), ABISELECT(13376,9332), "S20678C10");
    check_base_class_offset(lv, (S20678C2*)(S20678C11*), ABISELECT(13832,9664), "S20678C10");
    check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(14176,9900), "S20678C10");
    check_base_class_offset(lv, (S20678C12*)(S20678C11*), ABISELECT(13936,9736), "S20678C10");
    check_base_class_offset(lv, (S20678C11*), 0, "S20678C10");
    check_field_offset(lv, s20678c10f0, ABISELECT(1084,752), "S20678C10.s20678c10f0");
    check_field_offset(lv, s20678c10f1, ABISELECT(1092,760), "S20678C10.s20678c10f1");
    check_field_offset(lv, s20678c10f2, ABISELECT(1093,761), "S20678C10.s20678c10f2");
    check_field_offset(lv, s20678c10f3, ABISELECT(1094,762), "S20678C10.s20678c10f3");
    check_field_offset(lv, s20678c10f4, ABISELECT(1095,763), "S20678C10.s20678c10f4");
    check_field_offset(lv, s20678c10f5, ABISELECT(1096,764), "S20678C10.s20678c10f5");
    check_field_offset(lv, s20678c10f6, ABISELECT(1104,768), "S20678C10.s20678c10f6");
    check_field_offset(lv, s20678c10f7, ABISELECT(3392,2364), "S20678C10.s20678c10f7");
    check_field_offset(lv, s20678c10f8, ABISELECT(3424,2396), "S20678C10.s20678c10f8");
    check_field_offset(lv, s20678c10f9, ABISELECT(3440,2400), "S20678C10.s20678c10f9");
    check_field_offset(lv, s20678c10f10, ABISELECT(13360,9328), "S20678C10.s20678c10f10");
    check_field_offset(lv, s20678c10f11, ABISELECT(13361,9329), "S20678C10.s20678c10f11");
    test_class_info(&lv, &cd_S20678C10);
    dp->~S20678C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C10(Test_S20678C10, "S20678C10", ABISELECT(14320,10000));

#else // __cplusplus

extern void _ZN9S20678C10C1Ev();
extern void _ZN9S20678C10D1Ev();
Name_Map name_map_S20678C10[] = {
  NSPAIR(_ZN9S20678C10C1Ev),
  NSPAIR(_ZN9S20678C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C2;
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
static Base_Class bases_S20678C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(13784,9624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20678C5,    ABISELECT(13376,9332), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(13376,9332), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20678C2,    ABISELECT(13832,9664), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(14176,9900), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(13936,9736), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C10[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C103v14Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY vtc_S20678C10[] = {
  ABISELECT(14176,9900),
  ABISELECT(13936,9736),
  ABISELECT(13832,9664),
  ABISELECT(13784,9624),
  ABISELECT(13376,9332),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20678C103v14Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13376,-9332),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13832,-9664),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-13936,-9736),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(-392,-276),
  ABISELECT(-14176,-9900),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
};
extern VTBL_ENTRY _ZTV9S20678C10[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C11__9S20678C10[] = {
  ABISELECT(14176,9900),
  ABISELECT(13936,9736),
  ABISELECT(13832,9664),
  ABISELECT(13784,9624),
  ABISELECT(13376,9332),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C11__9S20678C10[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13376,-9332),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C11__9S20678C10[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13832,-9664),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C11__9S20678C10[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-13936,-9736),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C11__9S20678C10[] = {
  ABISELECT(-392,-276),
  ABISELECT(-14176,-9900),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C10[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__9S20678C10[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C10[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2__9S20678C10[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C10[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__9S20678C10[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C10[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C10[] = {
  {&(_ZTV9S20678C10[7]),  7,40},
  {&(_tg__ZTV9S20678C11__9S20678C10[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C11__9S20678C10[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C11__9S20678C10[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C11__9S20678C10[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C11__9S20678C10[3]),  3,3},
  {&(_ZTV9S20678C10[16]),  16,40},
  {&(_ZTV9S20678C10[26]),  26,40},
  {&(_ZTV9S20678C10[35]),  35,40},
  {&(_ZTV9S20678C10[40]),  40,40},
  {&(_tg__ZTV8S20678C4__9S20678C10[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__9S20678C10[3]),  3,3},
  {&(_tg__ZTV8S20678C2__9S20678C10[4]),  4,7},
  {&(_tg__ZTV8S20678C4__8S20678C2__9S20678C10[6]),  6,9},
  {&(_tg__ZTV9S20678C12__9S20678C10[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__9S20678C10[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A1__9S20678C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C10[];
extern  VTBL_ENTRY _ZTV9S20678C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C10[];
Class_Descriptor cd_S20678C10 = {  "S20678C10", // class name
  bases_S20678C10, 7,
  &(vtc_S20678C10[0]), // expected_vtbl_contents
  &(vtt_S20678C10[0]), // expected_vtt_contents
  ABISELECT(14320,10000), // object size
  NSPAIRA(_ZTI9S20678C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20678C10),40, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C10),17, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20678C19  : S20678C9 , S20678C12 , virtual S20678C15 {
  void *s20678c19f0;
  char s20678c19f1[4];
  ::S20678C4 s20678c19f2;
  int s20678c19f3[8];
  ::S20677C6_nt s20678c19f4;
  ::S20678C7 s20678c19f5;
  ::S20677C6_nt s20678c19f6;
  long double s20678c19f7;
  ::S20678C5 s20678c19f8[9];
  long double s20678c19f9[10];
  short s20678c19f10;
  virtual void  v17(); // _ZN9S20678C193v17Ev
  virtual void  v18(); // _ZN9S20678C193v18Ev
  virtual void  v19(); // _ZN9S20678C193v19Ev
  virtual void  v20(); // _ZN9S20678C193v20Ev
  ~S20678C19(); // tgen
  S20678C19(); // tgen
};
//SIG(-1 S20678C19) C1{ BC2{ BC3{ m Fp FL[4] Fs} FC3 Fi FD Fi FL Fl} BC4{ VBC3 VBC5{ VBC3 FD Fi FC3 FC3} v5 v6 Fi FC5 FL Fi Fp} VBC6{ BC7{ VBC3 BC5 v7 v8 v9 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC4 BC5 VBC8{ v10 FC9{} FC5 FC9 FL FC9 Fp FC9 Fp[2] FC9} VBC10{ BC5 v11 FL Fc[7] Fp Fi FC9 FC9 Fc[10]} v12 Fl FL FD FC9} v1 v2 v3 v4 Fp Fc[4] FC7 Fi[8] FC9 FC11{ VBC8 BC5 BC2 v13 Fp FC2 Fp Fi[2] FD Fi[2]} FC9 FD FC5[9] FD[10] Fs}


void  S20678C19 ::v17(){vfunc_called(this, "_ZN9S20678C193v17Ev");}
void  S20678C19 ::v18(){vfunc_called(this, "_ZN9S20678C193v18Ev");}
void  S20678C19 ::v19(){vfunc_called(this, "_ZN9S20678C193v19Ev");}
void  S20678C19 ::v20(){vfunc_called(this, "_ZN9S20678C193v20Ev");}
S20678C19 ::~S20678C19(){ note_dtor("S20678C19", this);} // tgen
S20678C19 ::S20678C19(){ note_ctor("S20678C19", this);} // tgen

static void Test_S20678C19()
{
  extern Class_Descriptor cd_S20678C19;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(325,921)];
    init_test(&cd_S20678C19, buf);
    S20678C19 *dp, &lv = *(dp=new (buf) S20678C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5184,3680), "sizeof(S20678C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C19)");
    check_base_class_offset(lv, (S20677C3*)(S20678C9*), ABISELECT(240,164), "S20678C19");
    check_base_class_offset(lv, (S20678C9*), ABISELECT(240,164), "S20678C19");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(3688,2636), "S20678C19");
    /*is_ambiguous_... S20678C19::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(3688,2636), "S20678C19");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*)(S20678C15*), ABISELECT(3688,2636), "S20678C19");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*)(S20678C15*), ABISELECT(3688,2636), "S20678C19");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(3688,2636), "S20678C19");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C15*), ABISELECT(3688,2636), "S20678C19");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C16*), ABISELECT(3688,2636), "S20678C19");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(3744,2676), "S20678C19");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(3744,2676), "S20678C19");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C12*), 0, "S20678C19");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*)(S20678C15*), ABISELECT(3888,2776), "S20678C19");
    check_base_class_offset(lv, (S20678C4*)(S20678C15*), ABISELECT(3888,2776), "S20678C19");
    check_base_class_offset(lv, (S20678C12*)(S20678C15*), ABISELECT(4496,3196), "S20678C19");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C15*), ABISELECT(4304,3068), "S20678C19");
    check_base_class_offset(lv, (S20678C8*)(S20678C15*), ABISELECT(4736,3360), "S20678C19");
    check_base_class_offset(lv, (S20678C5*)(S20678C16*), ABISELECT(5008,3544), "S20678C19");
    check_base_class_offset(lv, (S20678C16*)(S20678C15*), ABISELECT(5008,3544), "S20678C19");
    check_base_class_offset(lv, (S20678C15*), ABISELECT(3888,2776), "S20678C19");
    check_field_offset(lv, s20678c19f0, ABISELECT(392,276), "S20678C19.s20678c19f0");
    check_field_offset(lv, s20678c19f1, ABISELECT(400,280), "S20678C19.s20678c19f1");
    check_field_offset(lv, s20678c19f2, ABISELECT(416,284), "S20678C19.s20678c19f2");
    check_field_offset(lv, s20678c19f3, ABISELECT(880,616), "S20678C19.s20678c19f3");
    check_field_offset(lv, s20678c19f4, ABISELECT(912,648), "S20678C19.s20678c19f4");
    check_field_offset(lv, s20678c19f5, ABISELECT(928,652), "S20678C19.s20678c19f5");
    check_field_offset(lv, s20678c19f6, ABISELECT(1760,1236), "S20678C19.s20678c19f6");
    check_field_offset(lv, s20678c19f7, ABISELECT(1776,1240), "S20678C19.s20678c19f7");
    check_field_offset(lv, s20678c19f8, ABISELECT(1792,1252), "S20678C19.s20678c19f8");
    check_field_offset(lv, s20678c19f9, ABISELECT(3520,2512), "S20678C19.s20678c19f9");
    check_field_offset(lv, s20678c19f10, ABISELECT(3680,2632), "S20678C19.s20678c19f10");
    test_class_info(&lv, &cd_S20678C19);
    dp->~S20678C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C19(Test_S20678C19, "S20678C19", ABISELECT(5184,3680));

#else // __cplusplus

extern void _ZN9S20678C19C1Ev();
extern void _ZN9S20678C19D1Ev();
Name_Map name_map_S20678C19[] = {
  NSPAIR(_ZN9S20678C19C1Ev),
  NSPAIR(_ZN9S20678C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C9;
extern VTBL_ENTRY _ZTI8S20678C9[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C8;
extern VTBL_ENTRY _ZTI8S20678C8[];
extern  VTBL_ENTRY _ZTV8S20678C8[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C16;
extern VTBL_ENTRY _ZTI9S20678C16[];
extern  VTBL_ENTRY _ZTV9S20678C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C16[];
extern Class_Descriptor cd_S20678C15;
extern VTBL_ENTRY _ZTI9S20678C15[];
extern  VTBL_ENTRY _ZTV9S20678C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C15[];
static Base_Class bases_S20678C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(240,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
    1, //immediately_derived
  0, 0},
  {&cd_S20678C9,    ABISELECT(240,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
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C3,    ABISELECT(3688,2636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20678C5,    ABISELECT(3744,2676), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20678C12,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20678C5,    ABISELECT(3888,2776), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(3888,2776), //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
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20678C12,    ABISELECT(4496,3196), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(4304,3068), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20678C8,    ABISELECT(4736,3360), //bcp->offset
    43, //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
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(5008,3544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20678C16,    ABISELECT(5008,3544), //bcp->offset
    47, //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
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20678C15,    ABISELECT(3888,2776), //bcp->offset
    17, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C19[];
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C193v17Ev();
extern void _ZN9S20678C193v18Ev();
extern void _ZN9S20678C193v19Ev();
extern void _ZN9S20678C193v20Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN8S20678C82v8Ev();
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY vtc_S20678C19[] = {
  ABISELECT(5008,3544),
  ABISELECT(4736,3360),
  ABISELECT(4496,3196),
  ABISELECT(3888,2776),
  ABISELECT(3744,2676),
  ABISELECT(3688,2636),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v20Ev,
  ABISELECT(-56,-40),
  ABISELECT(-3744,-2676),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  0,
  0,
  0,
  0,
  ABISELECT(1120,768),
  ABISELECT(848,584),
  ABISELECT(-144,-100),
  ABISELECT(608,420),
  ABISELECT(-200,-140),
  ABISELECT(-3888,-2776),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
  ABISELECT(-616,-432),
  ABISELECT(-4304,-3068),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  0,
  0,
  ABISELECT(-752,-520),
  ABISELECT(-808,-560),
  ABISELECT(-4496,-3196),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  0,
  ABISELECT(-4736,-3360),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
  0,
  ABISELECT(-1320,-908),
  ABISELECT(-5008,-3544),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern VTBL_ENTRY _ZTV9S20678C19[];
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__A__9S20678C19[] = {
  ABISELECT(3744,2676),
  ABISELECT(3688,2636),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__A__9S20678C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(-3744,-2676),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C19[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C15__9S20678C19[] = {
  ABISELECT(1120,768),
  ABISELECT(848,584),
  ABISELECT(-144,-100),
  ABISELECT(608,420),
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C49S20678C15__9S20678C19[] = {
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C49S20678C15__A1__9S20678C19[] = {
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C15__A2__9S20678C19[] = {
  ABISELECT(-616,-432),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C15__9S20678C19[] = {
  0,
  0,
  ABISELECT(-752,-520),
  ABISELECT(-808,-560),
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C15__9S20678C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A__9S20678C15__9S20678C19[] = {
  ABISELECT(-616,-432),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__9S20678C15__9S20678C19[] = {
  0,
  ABISELECT(-848,-584),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C15__9S20678C19[] = {
  0,
  ABISELECT(-1320,-908),
  ABISELECT(-1120,-768),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__A1__9S20678C19[] = {
  ABISELECT(-752,-520),
  ABISELECT(-808,-560),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__A1__9S20678C19[] = {
  ABISELECT(-56,-40),
  ABISELECT(752,520),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C19[] = {
  ABISELECT(-1320,-908),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C16[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C16__A3__9S20678C19[] = {
  ABISELECT(-1320,-908),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C19[] = {
  {&(_ZTV9S20678C19[8]),  8,52},
  {&(_tg__ZTV9S20678C12__A__9S20678C19[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__A__9S20678C19[3]),  3,3},
  {&(_ZTV9S20678C19[17]),  17,52},
  {&(_ZTV9S20678C19[28]),  28,52},
  {&(_ZTV9S20678C19[41]),  41,52},
  {&(_ZTV9S20678C19[35]),  35,52},
  {&(_ZTV9S20678C19[46]),  46,52},
  {&(_ZTV9S20678C19[51]),  51,52},
  {&(_tg__ZTV8S20678C5__9S20678C19[3]),  3,3},
  {&(_tg__ZTV9S20678C15__9S20678C19[7]),  7,11},
  {&(_tg__ZTV8S20678C49S20678C15__9S20678C19[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C49S20678C15__A1__9S20678C19[3]),  3,3},
  {&(_tg__ZTV8S20678C59S20678C15__A2__9S20678C19[3]),  3,3},
  {&(_tg__ZTV9S20678C12__9S20678C15__9S20678C19[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C15__9S20678C19[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A__9S20678C15__9S20678C19[3]),  3,3},
  {&(_tg__ZTV8S20678C8__9S20678C15__9S20678C19[3]),  3,4},
  {&(_tg__ZTV9S20678C16__9S20678C15__9S20678C19[4]),  4,5},
  {&(_tg__ZTV9S20678C12__A1__9S20678C19[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__A1__9S20678C19[3]),  3,3},
  {&(_tg__ZTV9S20678C16__9S20678C19[3]),  3,4},
  {&(_tg__ZTV8S20678C59S20678C16__A3__9S20678C19[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C19[];
extern  VTBL_ENTRY _ZTV9S20678C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C19[];
Class_Descriptor cd_S20678C19 = {  "S20678C19", // class name
  bases_S20678C19, 13,
  &(vtc_S20678C19[0]), // expected_vtbl_contents
  &(vtt_S20678C19[0]), // expected_vtt_contents
  ABISELECT(5184,3680), // object size
  NSPAIRA(_ZTI9S20678C19),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20678C19),52, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C19),23, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20678C20  : S20678C13 {
  int s20678c20f0;
  ::S20677C6_nt s20678c20f1;
  short s20678c20f2;
  __tsi64 s20678c20f3;
  ::S20678C5 s20678c20f4;
  __tsi64 s20678c20f5;
  virtual void  v23(); // _ZN9S20678C203v23Ev
  ~S20678C20(); // tgen
  S20678C20(); // tgen
};
//SIG(-1 S20678C20) C1{ BC2{ VBC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} BC5{ VBC6{ VBC4 BC3 v2 v3 v4 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi} VBC7{ VBC4 VBC6 v5 v6 v7 FL FC8{} Fp Fc[2] FC4 Fl FC8} VBC9{ VBC4 VBC3 v8 v9 Fi FC3 FL Fi Fp} v10 v11 FC8 FC8 Fi FC3 FC8 FC8 FC10{ v12 FC8 FC3 FC8 FL FC8 Fp FC8 Fp[2] FC8} FC7 Fp FC8} BC9 Fi Fc:2 FC8 Fi} v1 Fi FC8 Fs FL FC3 FL}


void  S20678C20 ::v23(){vfunc_called(this, "_ZN9S20678C203v23Ev");}
S20678C20 ::~S20678C20(){ note_dtor("S20678C20", this);} // tgen
S20678C20 ::S20678C20(){ note_ctor("S20678C20", this);} // tgen

static void Test_S20678C20()
{
  extern Class_Descriptor cd_S20678C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(158,441)];
    init_test(&cd_S20678C20, buf);
    S20678C20 *dp, &lv = *(dp=new (buf) S20678C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2512,1760), "sizeof(S20678C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C20)");
    /*is_ambiguous_... S20678C20::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(1704,1192), "S20678C20");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(1704,1192), "S20678C20");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(1704,1192), "S20678C20");
    check_base_class_offset(lv, (S20677C3*)(S20678C2*), ABISELECT(1704,1192), "S20678C20");
    /*is_ambiguous_... S20678C20::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(1704,1192), "S20678C20");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*)(S20678C13*), ABISELECT(1704,1192), "S20678C20");
    /*is_ambiguous_... S20678C13::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C13*), ABISELECT(1568,1092), "S20678C20");
    /*is_ambiguous_... S20678C20::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(1568,1092), "S20678C20");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*)(S20678C13*), ABISELECT(1568,1092), "S20678C20");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(1760,1232), "S20678C20");
    check_base_class_offset(lv, (S20678C4*)(S20678C11*)(S20678C13*), ABISELECT(1760,1232), "S20678C20");
    check_base_class_offset(lv, (S20678C4*)(S20678C2*), ABISELECT(1760,1232), "S20678C20");
    check_base_class_offset(lv, (S20678C2*)(S20678C11*)(S20678C13*), ABISELECT(2168,1524), "S20678C20");
    check_base_class_offset(lv, (S20678C12*)(S20678C11*)(S20678C13*), ABISELECT(2272,1596), "S20678C20");
    check_base_class_offset(lv, (S20678C11*)(S20678C13*), 0, "S20678C20");
    /*is_ambiguous_... S20678C13::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C12*)(S20678C13*), ABISELECT(1088,752), "S20678C20");
    check_base_class_offset(lv, (S20678C13*), 0, "S20678C20");
    check_field_offset(lv, s20678c20f0, ABISELECT(1332,928), "S20678C20.s20678c20f0");
    check_field_offset(lv, s20678c20f1, ABISELECT(1336,932), "S20678C20.s20678c20f1");
    check_field_offset(lv, s20678c20f2, ABISELECT(1338,934), "S20678C20.s20678c20f2");
    check_field_offset(lv, s20678c20f3, ABISELECT(1344,936), "S20678C20.s20678c20f3");
    check_field_offset(lv, s20678c20f4, ABISELECT(1360,944), "S20678C20.s20678c20f4");
    check_field_offset(lv, s20678c20f5, ABISELECT(1552,1084), "S20678C20.s20678c20f5");
    test_class_info(&lv, &cd_S20678C20);
    dp->~S20678C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C20(Test_S20678C20, "S20678C20", ABISELECT(2512,1760));

#else // __cplusplus

extern void _ZN9S20678C20C1Ev();
extern void _ZN9S20678C20D1Ev();
Name_Map name_map_S20678C20[] = {
  NSPAIR(_ZN9S20678C20C1Ev),
  NSPAIR(_ZN9S20678C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C2;
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C13;
extern VTBL_ENTRY _ZTI9S20678C13[];
extern  VTBL_ENTRY _ZTV9S20678C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C13[];
static Base_Class bases_S20678C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1704,1192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20678C5,    ABISELECT(1568,1092), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(1760,1232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(1760,1232), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20678C2,    ABISELECT(2168,1524), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(2272,1596), //bcp->offset
    38, //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
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C11,    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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20678C12,    ABISELECT(1088,752), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20678C13,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C20[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C203v23Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY vtc_S20678C20[] = {
  ABISELECT(1568,1092),
  ABISELECT(2272,1596),
  ABISELECT(2168,1524),
  ABISELECT(1704,1192),
  ABISELECT(1760,1232),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C20[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20678C203v23Ev,
  ABISELECT(480,340),
  ABISELECT(616,440),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20678C20[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(136,100),
  ABISELECT(-1568,-1092),
  (VTBL_ENTRY)&(_ZTI9S20678C20[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1232),
  (VTBL_ENTRY)&(_ZTI9S20678C20[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1524),
  (VTBL_ENTRY)&(_ZTI9S20678C20[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1596),
  (VTBL_ENTRY)&(_ZTI9S20678C20[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
extern VTBL_ENTRY _ZTV9S20678C20[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C13__9S20678C20[] = {
  ABISELECT(1568,1092),
  ABISELECT(2272,1596),
  ABISELECT(2168,1524),
  ABISELECT(1704,1192),
  ABISELECT(1760,1232),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C119S20678C13__9S20678C20[] = {
  ABISELECT(1568,1092),
  ABISELECT(2272,1596),
  ABISELECT(2168,1524),
  ABISELECT(1704,1192),
  ABISELECT(1760,1232),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C119S20678C13__9S20678C20[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1232),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C119S20678C13__9S20678C20[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1524),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C119S20678C13__9S20678C20[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1596),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C119S20678C13__9S20678C20[] = {
  ABISELECT(136,100),
  ABISELECT(-1568,-1092),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C129S20678C13__A1__9S20678C20[] = {
  ABISELECT(480,340),
  ABISELECT(616,440),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C129S20678C13__A1__9S20678C20[] = {
  ABISELECT(136,100),
  ABISELECT(-480,-340),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C13__9S20678C20[] = {
  ABISELECT(136,100),
  ABISELECT(-1568,-1092),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C13__9S20678C20[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1232),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C13__9S20678C20[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1524),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C13__9S20678C20[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1596),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__A__9S20678C13__9S20678C20[] = {
  ABISELECT(480,340),
  ABISELECT(616,440),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20678C13[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C20[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C20[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__A1__9S20678C20[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C20[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2__9S20678C20[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C20[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__9S20678C20[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTT_ENTRY vtt_S20678C20[] = {
  {&(_ZTV9S20678C20[7]),  7,46},
  {&(_tg__ZTV9S20678C13__9S20678C20[7]),  7,9},
  {&(_tg__ZTV9S20678C119S20678C13__9S20678C20[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C119S20678C13__9S20678C20[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C119S20678C13__9S20678C20[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C119S20678C13__9S20678C20[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C119S20678C13__9S20678C20[3]),  3,3},
  {&(_tg__ZTV9S20678C129S20678C13__A1__9S20678C20[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C129S20678C13__A1__9S20678C20[3]),  3,3},
  {&(_tg__ZTV8S20678C5__9S20678C13__9S20678C20[3]),  3,3},
  {&(_tg__ZTV8S20678C4__9S20678C13__9S20678C20[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C13__9S20678C20[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C13__9S20678C20[6]),  6,8},
  {&(_tg__ZTV9S20678C12__A__9S20678C13__9S20678C20[4]),  4,6},
  {&(_ZTV9S20678C20[19]),  19,46},
  {&(_ZTV9S20678C20[25]),  25,46},
  {&(_ZTV9S20678C20[35]),  35,46},
  {&(_ZTV9S20678C20[44]),  44,46},
  {&(_ZTV9S20678C20[14]),  14,46},
  {&(_tg__ZTV8S20678C5__9S20678C20[3]),  3,3},
  {&(_tg__ZTV8S20678C4__9S20678C20[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__A1__9S20678C20[3]),  3,3},
  {&(_tg__ZTV8S20678C2__9S20678C20[4]),  4,7},
  {&(_tg__ZTV8S20678C4__8S20678C2__9S20678C20[6]),  6,9},
  {&(_tg__ZTV9S20678C12__9S20678C20[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__9S20678C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C20[];
extern  VTBL_ENTRY _ZTV9S20678C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C20[];
Class_Descriptor cd_S20678C20 = {  "S20678C20", // class name
  bases_S20678C20, 9,
  &(vtc_S20678C20[0]), // expected_vtbl_contents
  &(vtt_S20678C20[0]), // expected_vtt_contents
  ABISELECT(2512,1760), // object size
  NSPAIRA(_ZTI9S20678C20),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20678C20),46, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C20),26, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20678C21  {
  __tsi64 s20678c21f0;
  ::S20678C16 s20678c21f1;
  ::S20677C6_nt s20678c21f2;
  int s20678c21f3;
  virtual void  v24(); // _ZN9S20678C213v24Ev
  ~S20678C21(); // tgen
  S20678C21(); // tgen
};
//SIG(-1 S20678C21) C1{ v1 FL FC2{ BC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} v2 FL Fc[7] Fp Fi FC5{} FC5 Fc[10]} FC5 Fi}


void  S20678C21 ::v24(){vfunc_called(this, "_ZN9S20678C213v24Ev");}
S20678C21 ::~S20678C21(){ note_dtor("S20678C21", this);} // tgen
S20678C21 ::S20678C21(){ note_ctor("S20678C21", this);} // tgen

static void Test_S20678C21()
{
  extern Class_Descriptor cd_S20678C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,50)];
    init_test(&cd_S20678C21, buf);
    S20678C21 *dp, &lv = *(dp=new (buf) S20678C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S20678C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C21)");
    check_field_offset(lv, s20678c21f0, ABISELECT(8,4), "S20678C21.s20678c21f0");
    check_field_offset(lv, s20678c21f1, ABISELECT(16,12), "S20678C21.s20678c21f1");
    check_field_offset(lv, s20678c21f2, ABISELECT(240,188), "S20678C21.s20678c21f2");
    check_field_offset(lv, s20678c21f3, ABISELECT(244,192), "S20678C21.s20678c21f3");
    test_class_info(&lv, &cd_S20678C21);
    dp->~S20678C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C21(Test_S20678C21, "S20678C21", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN9S20678C21C1Ev();
extern void _ZN9S20678C21D1Ev();
Name_Map name_map_S20678C21[] = {
  NSPAIR(_ZN9S20678C21C1Ev),
  NSPAIR(_ZN9S20678C21D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20678C21[];
extern void _ZN9S20678C213v24Ev();
static  VTBL_ENTRY vtc_S20678C21[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C21[0]),
  (VTBL_ENTRY)&_ZN9S20678C213v24Ev,
};
extern VTBL_ENTRY _ZTI9S20678C21[];
extern  VTBL_ENTRY _ZTV9S20678C21[];
Class_Descriptor cd_S20678C21 = {  "S20678C21", // class name
  0,0,//no base classes
  &(vtc_S20678C21[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI9S20678C21),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20678C21),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20678C18  : virtual S20678C11 , virtual S20678C19 {
  void *s20678c18f0;
  ::S20678C20 s20678c18f1;
  void *s20678c18f2;
  __tsi64 s20678c18f3;
  int s20678c18f4;
  ::S20677C6_nt s20678c18f5;
  void *s20678c18f6;
  ::S20678C21 s20678c18f7;
  __tsi64 s20678c18f8;
  virtual void  v21(); // _ZN9S20678C183v21Ev
  ~S20678C18(); // tgen
  S20678C18(); // tgen
};
//SIG(-1 S20678C18) C1{ VBC2{ VBC3{ VBC4{ m Fp FL[4] Fs} BC5{ VBC4 FD Fi FC4 FC4} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC6{ VBC4 VBC3 v5 v6 v7 FL FC7{} Fp Fc[2] FC4 Fl FC7} VBC8{ VBC4 VBC5 v8 v9 Fi FC5 FL Fi Fp} v10 v11 FC7 FC7 Fi FC5 FC7 FC7 FC9{ v12 FC7 FC5 FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} VBC10{ BC11{ BC4 FC4 Fi FD Fi FL Fl} BC8 VBC12{ BC3 VBC8 BC5 VBC9 VBC13{ BC5 v13 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v14 Fl FL FD FC7} v15 v16 v17 v18 Fp Fc[4] FC3 Fi[8] FC7 FC14{ VBC9 BC5 BC11 v21 Fp FC11 Fp Fi[2] FD Fi[2]} FC7 FD FC5[9] FD[10] Fs} v1 Fp FC15{ BC16{ VBC5 BC2 BC8 Fi Fc:2 FC7 Fi} v19 Fi FC7 Fs FL FC5 FL} Fp FL Fi FC7 Fp FC17{ v20 FL FC13 FC7 Fi} FL}


void  S20678C18 ::v21(){vfunc_called(this, "_ZN9S20678C183v21Ev");}
S20678C18 ::~S20678C18(){ note_dtor("S20678C18", this);} // tgen
S20678C18 ::S20678C18(){ note_ctor("S20678C18", this);} // tgen

static void Test_S20678C18()
{
  extern Class_Descriptor cd_S20678C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(602,1699)];
    init_test(&cd_S20678C18, buf);
    S20678C18 *dp, &lv = *(dp=new (buf) S20678C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9616,6792), "sizeof(S20678C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C18)");
    /*is_ambiguous_... S20678C18::S20678C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(4328,3040), "S20678C18");
    /*is_ambiguous_... S20678C18::S20678C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(4328,3040), "S20678C18");
    check_base_class_offset(lv, (S20677C3*)(S20678C2*), ABISELECT(4328,3040), "S20678C18");
    /*is_ambiguous_... S20678C18::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(4328,3040), "S20678C18");
    /*is_ambiguous_... S20678C18::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(4328,3040), "S20678C18");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*)(S20678C19*), ABISELECT(4328,3040), "S20678C18");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*)(S20678C15*), ABISELECT(4328,3040), "S20678C18");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*)(S20678C15*), ABISELECT(4328,3040), "S20678C18");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C15*), ABISELECT(4328,3040), "S20678C18");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C16*), ABISELECT(4328,3040), "S20678C18");
    /*is_ambiguous_... S20678C18::S20678C4 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(3920,2748), "S20678C18");
    check_base_class_offset(lv, (S20678C4*)(S20678C11*), ABISELECT(3920,2748), "S20678C18");
    check_base_class_offset(lv, (S20678C4*)(S20678C2*), ABISELECT(3920,2748), "S20678C18");
    check_base_class_offset(lv, (S20678C2*)(S20678C11*), ABISELECT(4376,3080), "S20678C18");
    /*is_ambiguous_... S20678C18::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(4720,3316), "S20678C18");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*)(S20678C19*), ABISELECT(4720,3316), "S20678C18");
    check_base_class_offset(lv, (S20678C12*)(S20678C11*), ABISELECT(4480,3152), "S20678C18");
    check_base_class_offset(lv, (S20678C12*)(S20678C15*), ABISELECT(4480,3152), "S20678C18");
    check_base_class_offset(lv, (S20678C11*), ABISELECT(2832,1996), "S20678C18");
    check_base_class_offset(lv, (S20677C3*)(S20678C9*)(S20678C19*), ABISELECT(5104,3580), "S20678C18");
    check_base_class_offset(lv, (S20678C9*)(S20678C19*), ABISELECT(5104,3580), "S20678C18");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C12*)(S20678C19*), ABISELECT(4864,3416), "S20678C18");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*)(S20678C15*), ABISELECT(8560,6052), "S20678C18");
    check_base_class_offset(lv, (S20678C4*)(S20678C15*), ABISELECT(8560,6052), "S20678C18");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C15*), ABISELECT(8976,6344), "S20678C18");
    check_base_class_offset(lv, (S20678C8*)(S20678C15*), ABISELECT(9168,6472), "S20678C18");
    check_base_class_offset(lv, (S20678C5*)(S20678C16*), ABISELECT(9440,6656), "S20678C18");
    check_base_class_offset(lv, (S20678C16*)(S20678C15*), ABISELECT(9440,6656), "S20678C18");
    check_base_class_offset(lv, (S20678C15*)(S20678C19*), ABISELECT(8560,6052), "S20678C18");
    check_base_class_offset(lv, (S20678C19*), ABISELECT(4864,3416), "S20678C18");
    check_field_offset(lv, s20678c18f0, ABISELECT(8,4), "S20678C18.s20678c18f0");
    check_field_offset(lv, s20678c18f1, ABISELECT(16,8), "S20678C18.s20678c18f1");
    check_field_offset(lv, s20678c18f2, ABISELECT(2528,1768), "S20678C18.s20678c18f2");
    check_field_offset(lv, s20678c18f3, ABISELECT(2536,1772), "S20678C18.s20678c18f3");
    check_field_offset(lv, s20678c18f4, ABISELECT(2544,1780), "S20678C18.s20678c18f4");
    check_field_offset(lv, s20678c18f5, ABISELECT(2548,1784), "S20678C18.s20678c18f5");
    check_field_offset(lv, s20678c18f6, ABISELECT(2552,1788), "S20678C18.s20678c18f6");
    check_field_offset(lv, s20678c18f7, ABISELECT(2560,1792), "S20678C18.s20678c18f7");
    check_field_offset(lv, s20678c18f8, ABISELECT(2816,1988), "S20678C18.s20678c18f8");
    test_class_info(&lv, &cd_S20678C18);
    dp->~S20678C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C18(Test_S20678C18, "S20678C18", ABISELECT(9616,6792));

#else // __cplusplus

extern void _ZN9S20678C18C1Ev();
extern void _ZN9S20678C18D1Ev();
Name_Map name_map_S20678C18[] = {
  NSPAIR(_ZN9S20678C18C1Ev),
  NSPAIR(_ZN9S20678C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C2;
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C9;
extern VTBL_ENTRY _ZTI8S20678C9[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C8;
extern VTBL_ENTRY _ZTI8S20678C8[];
extern  VTBL_ENTRY _ZTV8S20678C8[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C16;
extern VTBL_ENTRY _ZTI9S20678C16[];
extern  VTBL_ENTRY _ZTV9S20678C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C16[];
extern Class_Descriptor cd_S20678C15;
extern VTBL_ENTRY _ZTI9S20678C15[];
extern  VTBL_ENTRY _ZTV9S20678C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C15[];
extern Class_Descriptor cd_S20678C19;
extern VTBL_ENTRY _ZTI9S20678C19[];
extern  VTBL_ENTRY _ZTV9S20678C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C19[];
static Base_Class bases_S20678C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(4328,3040), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20678C5,    ABISELECT(3920,2748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(3920,2748), //bcp->offset
    24, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20678C2,    ABISELECT(4376,3080), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(4720,3316), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(4480,3152), //bcp->offset
    43, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C11,    ABISELECT(2832,1996), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //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_S20677C3,    ABISELECT(5104,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20678C9,    ABISELECT(5104,3580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20678C12,    ABISELECT(4864,3416), //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
    14, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20678C5,    ABISELECT(8560,6052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(8560,6052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20678C5,    ABISELECT(8976,6344), //bcp->offset
    89, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20678C8,    ABISELECT(9168,6472), //bcp->offset
    92, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(9440,6656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20678C16,    ABISELECT(9440,6656), //bcp->offset
    96, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20678C15,    ABISELECT(8560,6052), //bcp->offset
    74, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S20678C19,    ABISELECT(4864,3416), //bcp->offset
    54, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C18[];
extern void _ZN9S20678C183v21Ev();
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C193v17Ev();
extern void _ZN9S20678C193v18Ev();
extern void _ZN9S20678C193v19Ev();
extern void _ZN9S20678C193v20Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
extern void _ZN8S20678C82v8Ev();
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY vtc_S20678C18[] = {
  ABISELECT(9440,6656),
  ABISELECT(9168,6472),
  ABISELECT(8560,6052),
  ABISELECT(4864,3416),
  ABISELECT(4720,3316),
  ABISELECT(4480,3152),
  ABISELECT(4376,3080),
  ABISELECT(4328,3040),
  ABISELECT(3920,2748),
  ABISELECT(2832,1996),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C183v21Ev,
  0,
  0,
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  ABISELECT(-2832,-1996),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-3920,-2748),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-4376,-3080),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-4480,-3152),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(-392,-276),
  ABISELECT(-4720,-3316),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(4576,3240),
  ABISELECT(4304,3056),
  ABISELECT(-384,-264),
  ABISELECT(3696,2636),
  ABISELECT(-144,-100),
  ABISELECT(-536,-376),
  ABISELECT(-4864,-3416),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-3840,-2736),
  ABISELECT(-4080,-2900),
  ABISELECT(-4232,-3012),
  ABISELECT(-8560,-6052),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
  ABISELECT(-4648,-3304),
  ABISELECT(-8976,-6344),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  0,
  ABISELECT(-9168,-6472),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
  0,
  ABISELECT(-5112,-3616),
  ABISELECT(-9440,-6656),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern VTBL_ENTRY _ZTV9S20678C18[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C11__9S20678C18[] = {
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C11__9S20678C18[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C11__9S20678C18[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-1544,-1084),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C11__9S20678C18[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-1648,-1156),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C11__9S20678C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(-1888,-1320),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C18[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__9S20678C18[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C18[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2__9S20678C18[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C18[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__9S20678C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C18[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C193v17Ev();
extern void _ZN9S20678C193v18Ev();
extern void _ZN9S20678C193v19Ev();
extern void _ZN9S20678C193v20Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C19__9S20678C18[] = {
  ABISELECT(4576,3240),
  ABISELECT(4304,3056),
  ABISELECT(-384,-264),
  ABISELECT(3696,2636),
  ABISELECT(-144,-100),
  ABISELECT(-536,-376),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v20Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C129S20678C19__A1__9S20678C18[] = {
  ABISELECT(-144,-100),
  ABISELECT(-536,-376),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C129S20678C19__A1__9S20678C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C19__9S20678C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C15__9S20678C19__9S20678C18[] = {
  0,
  0,
  0,
  0,
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-3840,-2736),
  ABISELECT(-4080,-2900),
  ABISELECT(-4232,-3012),
  ABISELECT(-3696,-2636),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__A1__9S20678C19__9S20678C18[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(384,264),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C15__A2__9S20678C19__9S20678C18[] = {
  ABISELECT(-4648,-3304),
  ABISELECT(-4112,-2928),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__9S20678C19__9S20678C18[] = {
  0,
  ABISELECT(-4304,-3056),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C19__9S20678C18[] = {
  0,
  ABISELECT(-5112,-3616),
  ABISELECT(-4576,-3240),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C15__9S20678C18[] = {
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-3840,-2736),
  ABISELECT(-4080,-2900),
  ABISELECT(-4232,-3012),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C49S20678C15__A1__9S20678C18[] = {
  ABISELECT(-4232,-3012),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C49S20678C15__A2__9S20678C18[] = {
  ABISELECT(-4232,-3012),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C15__A3__9S20678C18[] = {
  ABISELECT(-4648,-3304),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C15__9S20678C18[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(4080,2900),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C15__9S20678C18[] = {
  ABISELECT(-392,-276),
  ABISELECT(3840,2736),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A__9S20678C15__9S20678C18[] = {
  ABISELECT(-4648,-3304),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__9S20678C15__9S20678C18[] = {
  0,
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C15__9S20678C18[] = {
  0,
  ABISELECT(-5112,-3616),
  ABISELECT(-880,-604),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C18[] = {
  ABISELECT(-5112,-3616),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C16[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C16__A4__9S20678C18[] = {
  ABISELECT(-5112,-3616),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C18[] = {
  {&(_ZTV9S20678C18[12]),  12,101},
  {&(_ZTV9S20678C18[22]),  22,101},
  {&(_ZTV9S20678C18[30]),  30,101},
  {&(_ZTV9S20678C18[40]),  40,101},
  {&(_ZTV9S20678C18[49]),  49,101},
  {&(_ZTV9S20678C18[54]),  54,101},
  {&(_ZTV9S20678C18[68]),  68,101},
  {&(_ZTV9S20678C18[85]),  85,101},
  {&(_ZTV9S20678C18[92]),  92,101},
  {&(_ZTV9S20678C18[95]),  95,101},
  {&(_ZTV9S20678C18[100]),  100,101},
  {&(_tg__ZTV9S20678C11__9S20678C18[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C11__9S20678C18[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C11__9S20678C18[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C11__9S20678C18[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C11__9S20678C18[3]),  3,3},
  {&(_tg__ZTV8S20678C4__9S20678C18[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__9S20678C18[3]),  3,3},
  {&(_tg__ZTV8S20678C2__9S20678C18[4]),  4,7},
  {&(_tg__ZTV8S20678C4__8S20678C2__9S20678C18[6]),  6,9},
  {&(_tg__ZTV9S20678C12__9S20678C18[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__9S20678C18[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A1__9S20678C18[3]),  3,3},
  {&(_tg__ZTV9S20678C19__9S20678C18[8]),  8,14},
  {&(_tg__ZTV9S20678C129S20678C19__A1__9S20678C18[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C129S20678C19__A1__9S20678C18[3]),  3,3},
  {&(_tg__ZTV8S20678C5__9S20678C19__9S20678C18[3]),  3,3},
  {&(_tg__ZTV9S20678C15__9S20678C19__9S20678C18[11]),  11,15},
  {&(_tg__ZTV9S20678C12__A1__9S20678C19__9S20678C18[6]),  6,8},
  {&(_tg__ZTV8S20678C59S20678C15__A2__9S20678C19__9S20678C18[3]),  3,3},
  {&(_tg__ZTV8S20678C8__9S20678C19__9S20678C18[3]),  3,4},
  {&(_tg__ZTV9S20678C16__9S20678C19__9S20678C18[4]),  4,5},
  {&(_tg__ZTV9S20678C15__9S20678C18[7]),  7,11},
  {&(_tg__ZTV8S20678C49S20678C15__A1__9S20678C18[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C49S20678C15__A2__9S20678C18[3]),  3,3},
  {&(_tg__ZTV8S20678C59S20678C15__A3__9S20678C18[3]),  3,3},
  {&(_tg__ZTV9S20678C12__9S20678C15__9S20678C18[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C15__9S20678C18[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A__9S20678C15__9S20678C18[3]),  3,3},
  {&(_tg__ZTV8S20678C8__9S20678C15__9S20678C18[3]),  3,4},
  {&(_tg__ZTV9S20678C16__9S20678C15__9S20678C18[4]),  4,5},
  {&(_tg__ZTV9S20678C16__9S20678C18[3]),  3,4},
  {&(_tg__ZTV8S20678C59S20678C16__A4__9S20678C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C18[];
extern  VTBL_ENTRY _ZTV9S20678C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C18[];
Class_Descriptor cd_S20678C18 = {  "S20678C18", // class name
  bases_S20678C18, 18,
  &(vtc_S20678C18[0]), // expected_vtbl_contents
  &(vtt_S20678C18[0]), // expected_vtt_contents
  ABISELECT(9616,6792), // object size
  NSPAIRA(_ZTI9S20678C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20678C18),101, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C18),43, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20678C22  : S20678C10 , S20678C5 , virtual S20678C11 {
  void *s20678c22f0;
  ::S20677C6_nt s20678c22f1;
  __tsi64 s20678c22f2;
  virtual  ~S20678C22(); // _ZN9S20678C22D2Ev
  S20678C22(); // tgen
};
//SIG(-1 S20678C22) C1{ BC2{ BC3{ VBC4{ VBC5{ m Fp FL[4] Fs} BC6{ VBC5 FD Fi FC5 FC5} v1 v2 v3 Fs FL Fc Fi[2] FC6 Fp FL Fi FL Fi} VBC7{ VBC5 VBC4 v4 v5 v6 FL FC8{} Fp Fc[2] FC5 Fl FC8} VBC9{ VBC5 VBC6 v7 v8 Fi FC6 FL Fi Fp} v9 v10 FC8 FC8 Fi FC6 FC8 FC8 FC10{ v12 FC8 FC6 FC8 FL FC8 Fp FC8 Fp[2] FC8} FC7 Fp FC8} v11 Fi[2] FC8 FC8 FC8 FC8 FC8 FC11{ VBC6 BC3 BC9 Fi Fc:2 FC8 Fi} FL[4] FC8 FC12{ BC13{ BC4 VBC9 BC6 VBC10 VBC14{ BC6 v13 FL Fc[7] Fp Fi FC8 FC8 Fc[10]} v14 Fl FL FD FC8} BC15{ VBC10 v15 FC13 FC8 FL Fi[2]} BC11 Fp FL Fi Fp Fi[3] Fc FL Fp FD}[2] Fc FC8} BC6 VBC3 vd Fp FC8 FL}


 S20678C22 ::~S20678C22(){ note_dtor("S20678C22", this);}
S20678C22 ::S20678C22(){ note_ctor("S20678C22", this);} // tgen

static void Test_S20678C22()
{
  extern Class_Descriptor cd_S20678C22;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(974,2718)];
    init_test(&cd_S20678C22, buf);
    S20678C22 *dp, &lv = *(dp=new (buf) S20678C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(15568,10868), "sizeof(S20678C22)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C22)");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(13944,9740), "S20678C22");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(13944,9740), "S20678C22");
    check_base_class_offset(lv, (S20677C3*)(S20678C2*), ABISELECT(13944,9740), "S20678C22");
    check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(13944,9740), "S20678C22");
    /*is_ambiguous_... S20678C22::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(13944,9740), "S20678C22");
    /*is_ambiguous_... S20678C22::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(13944,9740), "S20678C22");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(13536,9448), "S20678C22");
    check_base_class_offset(lv, (S20678C4*)(S20678C11*)(S20678C10*), ABISELECT(13536,9448), "S20678C22");
    check_base_class_offset(lv, (S20678C4*)(S20678C2*), ABISELECT(13536,9448), "S20678C22");
    /*is_ambiguous_... S20678C22::S20678C11 */ AMB_check_base_class_offset(lv, (S20678C4*)(S20678C11*), ABISELECT(13536,9448), "S20678C22");
    check_base_class_offset(lv, (S20678C2*)(S20678C11*)(S20678C10*), ABISELECT(13992,9780), "S20678C22");
    /*is_ambiguous_... S20678C22::S20678C11 */ AMB_check_base_class_offset(lv, (S20678C2*)(S20678C11*), ABISELECT(13992,9780), "S20678C22");
    check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(14336,10016), "S20678C22");
    check_base_class_offset(lv, (S20678C12*)(S20678C11*)(S20678C10*), ABISELECT(14096,9852), "S20678C22");
    /*is_ambiguous_... S20678C22::S20678C11 */ AMB_check_base_class_offset(lv, (S20678C12*)(S20678C11*), ABISELECT(14096,9852), "S20678C22");
    check_base_class_offset(lv, (S20678C11*)(S20678C10*), 0, "S20678C22");
    check_base_class_offset(lv, (S20678C10*), 0, "S20678C22");
    /*is_ambiguous_... S20678C22::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*), ABISELECT(13376,9332), "S20678C22");
    /*is_ambiguous_... S20678C22::S20678C11 */ AMB_check_base_class_offset(lv, (S20678C11*), ABISELECT(14480,10116), "S20678C22");
    check_field_offset(lv, s20678c22f0, ABISELECT(13512,9432), "S20678C22.s20678c22f0");
    check_field_offset(lv, s20678c22f1, ABISELECT(13520,9436), "S20678C22.s20678c22f1");
    check_field_offset(lv, s20678c22f2, ABISELECT(13528,9440), "S20678C22.s20678c22f2");
    test_class_info(&lv, &cd_S20678C22);
    dp->~S20678C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C22(Test_S20678C22, "S20678C22", ABISELECT(15568,10868));

#else // __cplusplus

extern void _ZN9S20678C22C1Ev();
extern void _ZN9S20678C22D2Ev();
Name_Map name_map_S20678C22[] = {
  NSPAIR(_ZN9S20678C22C1Ev),
  NSPAIR(_ZN9S20678C22D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C2;
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
extern Class_Descriptor cd_S20678C10;
extern VTBL_ENTRY _ZTI9S20678C10[];
extern  VTBL_ENTRY _ZTV9S20678C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C10[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
static Base_Class bases_S20678C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(13944,9740), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20678C5,    ABISELECT(13536,9448), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(13536,9448), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20678C2,    ABISELECT(13992,9780), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C5,    ABISELECT(14336,10016), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(14096,9852), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20678C11,    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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20678C10,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20678C5,    ABISELECT(13376,9332), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20678C11,    ABISELECT(14480,10116), //bcp->offset
    46, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20678C22[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C103v14Ev();
extern void _ZN9S20678C22D1Ev();
extern void _ZN9S20678C22D0Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY vtc_S20678C22[] = {
  ABISELECT(14480,10116),
  ABISELECT(14336,10016),
  ABISELECT(14096,9852),
  ABISELECT(13992,9780),
  ABISELECT(13944,9740),
  ABISELECT(13536,9448),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C22[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20678C103v14Ev,
  (VTBL_ENTRY)&_ZN9S20678C22D1Ev,
  (VTBL_ENTRY)&_ZN9S20678C22D0Ev,
  ABISELECT(568,408),
  ABISELECT(-13376,-9332),
  (VTBL_ENTRY)&(_ZTI9S20678C22[0]),
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13536,-9448),
  (VTBL_ENTRY)&(_ZTI9S20678C22[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13992,-9780),
  (VTBL_ENTRY)&(_ZTI9S20678C22[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-14096,-9852),
  (VTBL_ENTRY)&(_ZTI9S20678C22[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(-392,-276),
  ABISELECT(-14336,-10016),
  (VTBL_ENTRY)&(_ZTI9S20678C22[0]),
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-384,-264),
  ABISELECT(-488,-336),
  ABISELECT(-536,-376),
  ABISELECT(-944,-668),
  ABISELECT(-14480,-10116),
  (VTBL_ENTRY)&(_ZTI9S20678C22[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern VTBL_ENTRY _ZTV9S20678C22[];
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C103v14Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C10__9S20678C22[] = {
  ABISELECT(14336,10016),
  ABISELECT(14096,9852),
  ABISELECT(13992,9780),
  ABISELECT(13944,9740),
  ABISELECT(13536,9448),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20678C103v14Ev,
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C119S20678C10__9S20678C22[] = {
  ABISELECT(14336,10016),
  ABISELECT(14096,9852),
  ABISELECT(13992,9780),
  ABISELECT(13944,9740),
  ABISELECT(13536,9448),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C119S20678C10__9S20678C22[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13536,-9448),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C119S20678C10__9S20678C22[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13992,-9780),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C119S20678C10__9S20678C22[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-14096,-9852),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C119S20678C10__9S20678C22[] = {
  ABISELECT(-392,-276),
  ABISELECT(-14336,-10016),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C10__9S20678C22[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-13536,-9448),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C10__9S20678C22[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-13992,-9780),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C10__9S20678C22[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-14096,-9852),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C10__9S20678C22[] = {
  ABISELECT(-392,-276),
  ABISELECT(-14336,-10016),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A__9S20678C22[] = {
  ABISELECT(568,408),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C22[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__9S20678C22[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C22[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2__9S20678C22[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C22[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__9S20678C22[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C22[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C11__A1__9S20678C22[] = {
  ABISELECT(-144,-100),
  ABISELECT(-384,-264),
  ABISELECT(-488,-336),
  ABISELECT(-536,-376),
  ABISELECT(-944,-668),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C11__A1__9S20678C22[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(944,668),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C11__A1__9S20678C22[] = {
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(488,336),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C11__A1__9S20678C22[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(384,264),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C11__A1__9S20678C22[] = {
  ABISELECT(-392,-276),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
static  VTT_ENTRY vtt_S20678C22[] = {
  {&(_ZTV9S20678C22[8]),  8,57},
  {&(_tg__ZTV9S20678C10__9S20678C22[7]),  7,10},
  {&(_tg__ZTV9S20678C119S20678C10__9S20678C22[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C119S20678C10__9S20678C22[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C119S20678C10__9S20678C22[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C119S20678C10__9S20678C22[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C119S20678C10__9S20678C22[3]),  3,3},
  {&(_tg__ZTV8S20678C4__9S20678C10__9S20678C22[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C10__9S20678C22[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C10__9S20678C22[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C10__9S20678C22[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A__9S20678C22[3]),  3,3},
  {&(_ZTV9S20678C22[22]),  22,57},
  {&(_ZTV9S20678C22[32]),  32,57},
  {&(_ZTV9S20678C22[41]),  41,57},
  {&(_ZTV9S20678C22[46]),  46,57},
  {&(_ZTV9S20678C22[16]),  16,57},
  {&(_ZTV9S20678C22[55]),  55,57},
  {&(_tg__ZTV8S20678C4__9S20678C22[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__9S20678C22[3]),  3,3},
  {&(_tg__ZTV8S20678C2__9S20678C22[4]),  4,7},
  {&(_tg__ZTV8S20678C4__8S20678C2__9S20678C22[6]),  6,9},
  {&(_tg__ZTV9S20678C12__9S20678C22[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__9S20678C22[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A1__9S20678C22[3]),  3,3},
  {&(_tg__ZTV9S20678C11__A1__9S20678C22[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C11__A1__9S20678C22[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C11__A1__9S20678C22[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C11__A1__9S20678C22[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C11__A1__9S20678C22[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20678C22[];
extern  VTBL_ENTRY _ZTV9S20678C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C22[];
Class_Descriptor cd_S20678C22 = {  "S20678C22", // class name
  bases_S20678C22, 10,
  &(vtc_S20678C22[0]), // expected_vtbl_contents
  &(vtt_S20678C22[0]), // expected_vtt_contents
  ABISELECT(15568,10868), // object size
  NSPAIRA(_ZTI9S20678C22),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20678C22),57, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20678C22),30, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20678C1  : virtual S20678C2 , virtual S20678C7 , virtual S20678C10 , virtual S20678C18 {
  int s20678c1f0[2];
  char s20678c1f1;
  void *s20678c1f2;
  int s20678c1f3;
  ::S20678C22 s20678c1f4;
  virtual  ~S20678C1(); // _ZN8S20678C1D2Ev
  virtual void  v1(); // _ZN8S20678C12v1Ev
  S20678C1(); // tgen
};
//SIG(1 S20678C1) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v5 v6 v7 FL FC6{} Fp Fc[2] FC3 Fl FC6} VBC7{ VBC8{ v8 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} BC5 BC9{ BC3 FC3 Fi FD Fi FL Fl} v9 Fp FC9 Fp Fi[2] FD Fi[2]} VBC10{ BC11{ VBC4 VBC2 VBC12{ VBC3 VBC5 v10 v11 Fi FC5 FL Fi Fp} v12 v13 FC6 FC6 Fi FC5 FC6 FC6 FC8 FC2 Fp FC6} v14 Fi[2] FC6 FC6 FC6 FC6 FC6 FC13{ VBC5 BC11 BC12 Fi Fc:2 FC6 Fi} FL[4] FC6 FC14{ BC15{ BC4 VBC12 BC5 VBC8 VBC16{ BC5 v15 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v16 Fl FL FD FC6} BC17{ VBC8 v22 FC15 FC6 FL Fi[2]} BC13 Fp FL Fi Fp Fi[3] Fc FL Fp FD}[2] Fc FC6} VBC18{ VBC11 VBC19{ BC9 BC12 VBC15 v17 v18 v19 v20 Fp Fc[4] FC4 Fi[8] FC6 FC7 FC6 FD FC5[9] FD[10] Fs} v21 Fp FC20{ BC13 v23 Fi FC6 Fs FL FC5 FL} Fp FL Fi FC6 Fp FC21{ v24 FL FC16 FC6 Fi} FL} vd v1 Fi[2] Fc Fp Fi FC22{ BC10 BC5 VBC11 vd Fp FC6 FL}}


 S20678C1 ::~S20678C1(){ note_dtor("S20678C1", this);}
void  S20678C1 ::v1(){vfunc_called(this, "_ZN8S20678C12v1Ev");}
S20678C1 ::S20678C1(){ note_ctor("S20678C1", this);} // tgen

static void Test_S20678C1()
{
  extern Class_Descriptor cd_S20678C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2447,6845)];
    init_test(&cd_S20678C1, buf);
    S20678C1 *dp, &lv = *(dp=new (buf) S20678C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(39136,27376), "sizeof(S20678C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20678C1)");
    check_base_class_offset(lv, (S20677C3*)(S20678C2*), ABISELECT(15720,10964), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C4*), ABISELECT(15720,10964), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*), ABISELECT(15720,10964), "S20678C1");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C7*), ABISELECT(15720,10964), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*), ABISELECT(15720,10964), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*), ABISELECT(15720,10964), "S20678C1");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C12*)(S20678C19*), ABISELECT(15720,10964), "S20678C1");
    check_base_class_offset(lv, (S20677C3*)(S20678C4*)(S20678C15*), ABISELECT(15720,10964), "S20678C1");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C4*)(S20678C15*), ABISELECT(15720,10964), "S20678C1");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C15*), ABISELECT(15720,10964), "S20678C1");
    check_base_class_offset(lv, (S20677C3*)(S20678C5*)(S20678C16*), ABISELECT(15720,10964), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C4 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C4*), ABISELECT(15776,11004), "S20678C1");
    check_base_class_offset(lv, (S20678C4*)(S20678C2*), ABISELECT(15776,11004), "S20678C1");
    check_base_class_offset(lv, (S20678C4*)(S20678C11*)(S20678C10*), ABISELECT(15776,11004), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C11 */ AMB_check_base_class_offset(lv, (S20678C4*)(S20678C11*), ABISELECT(15776,11004), "S20678C1");
    check_base_class_offset(lv, (S20678C2*), ABISELECT(15616,10892), "S20678C1");
    check_base_class_offset(lv, (S20678C2*)(S20678C11*)(S20678C10*), ABISELECT(15616,10892), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C11 */ AMB_check_base_class_offset(lv, (S20678C2*)(S20678C11*), ABISELECT(15616,10892), "S20678C1");
    check_base_class_offset(lv, (S20678C8*)(S20678C7*), ABISELECT(16704,11656), "S20678C1");
    check_base_class_offset(lv, (S20678C8*)(S20678C15*), ABISELECT(16704,11656), "S20678C1");
    check_base_class_offset(lv, (S20678C5*)(S20678C7*), ABISELECT(16192,11296), "S20678C1");
    check_base_class_offset(lv, (S20677C3*)(S20678C9*)(S20678C7*), ABISELECT(16336,11396), "S20678C1");
    check_base_class_offset(lv, (S20678C9*)(S20678C7*), ABISELECT(16336,11396), "S20678C1");
    check_base_class_offset(lv, (S20678C7*), ABISELECT(16192,11296), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*), ABISELECT(30592,21336), "S20678C1");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C12*)(S20678C19*), ABISELECT(30592,21336), "S20678C1");
    check_base_class_offset(lv, (S20678C12*)(S20678C11*)(S20678C10*), ABISELECT(30352,21172), "S20678C1");
    /*is_ambiguous_... S20678C1::S20678C11 */ AMB_check_base_class_offset(lv, (S20678C12*)(S20678C11*), ABISELECT(30352,21172), "S20678C1");
    check_base_class_offset(lv, (S20678C12*)(S20678C15*), ABISELECT(30352,21172), "S20678C1");
    check_base_class_offset(lv, (S20678C11*)(S20678C10*), ABISELECT(16976,11840), "S20678C1");
    check_base_class_offset(lv, (S20678C10*), ABISELECT(16976,11840), "S20678C1");
    check_base_class_offset(lv, (S20678C11*)(S20678C18*), ABISELECT(33568,23432), "S20678C1");
    check_base_class_offset(lv, (S20677C3*)(S20678C9*)(S20678C19*), ABISELECT(34896,24348), "S20678C1");
    check_base_class_offset(lv, (S20678C9*)(S20678C19*), ABISELECT(34896,24348), "S20678C1");
    /*is_ambiguous_... S20678C19::S20678C12 */ AMB_check_base_class_offset(lv, (S20678C12*)(S20678C19*), ABISELECT(34656,24184), "S20678C1");
    check_base_class_offset(lv, (S20678C5*)(S20678C4*)(S20678C15*), ABISELECT(38352,26820), "S20678C1");
    check_base_class_offset(lv, (S20678C4*)(S20678C15*), ABISELECT(38352,26820), "S20678C1");
    /*is_ambiguous_... S20678C15::S20678C5 */ AMB_check_base_class_offset(lv, (S20678C5*)(S20678C15*), ABISELECT(38768,27112), "S20678C1");
    check_base_class_offset(lv, (S20678C5*)(S20678C16*), ABISELECT(38960,27240), "S20678C1");
    check_base_class_offset(lv, (S20678C16*)(S20678C15*), ABISELECT(38960,27240), "S20678C1");
    check_base_class_offset(lv, (S20678C15*)(S20678C19*), ABISELECT(38352,26820), "S20678C1");
    check_base_class_offset(lv, (S20678C19*)(S20678C18*), ABISELECT(34656,24184), "S20678C1");
    check_base_class_offset(lv, (S20678C18*), ABISELECT(30736,21436), "S20678C1");
    check_field_offset(lv, s20678c1f0, ABISELECT(8,4), "S20678C1.s20678c1f0");
    check_field_offset(lv, s20678c1f1, ABISELECT(16,12), "S20678C1.s20678c1f1");
    check_field_offset(lv, s20678c1f2, ABISELECT(24,16), "S20678C1.s20678c1f2");
    check_field_offset(lv, s20678c1f3, ABISELECT(32,20), "S20678C1.s20678c1f3");
    check_field_offset(lv, s20678c1f4, ABISELECT(48,24), "S20678C1.s20678c1f4");
    test_class_info(&lv, &cd_S20678C1);
    dp->~S20678C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20678C1(Test_S20678C1, "S20678C1", ABISELECT(39136,27376));

#else // __cplusplus

extern void _ZN8S20678C1C1Ev();
extern void _ZN8S20678C1D2Ev();
Name_Map name_map_S20678C1[] = {
  NSPAIR(_ZN8S20678C1C1Ev),
  NSPAIR(_ZN8S20678C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C2;
extern VTBL_ENTRY _ZTI8S20678C2[];
extern  VTBL_ENTRY _ZTV8S20678C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C2[];
extern Class_Descriptor cd_S20678C8;
extern VTBL_ENTRY _ZTI8S20678C8[];
extern  VTBL_ENTRY _ZTV8S20678C8[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C9;
extern VTBL_ENTRY _ZTI8S20678C9[];
extern Class_Descriptor cd_S20678C7;
extern VTBL_ENTRY _ZTI8S20678C7[];
extern  VTBL_ENTRY _ZTV8S20678C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C7[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
extern Class_Descriptor cd_S20678C10;
extern VTBL_ENTRY _ZTI9S20678C10[];
extern  VTBL_ENTRY _ZTV9S20678C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C10[];
extern Class_Descriptor cd_S20678C11;
extern VTBL_ENTRY _ZTI9S20678C11[];
extern  VTBL_ENTRY _ZTV9S20678C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C11[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20678C9;
extern VTBL_ENTRY _ZTI8S20678C9[];
extern Class_Descriptor cd_S20678C12;
extern VTBL_ENTRY _ZTI9S20678C12[];
extern  VTBL_ENTRY _ZTV9S20678C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C12[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C4;
extern VTBL_ENTRY _ZTI8S20678C4[];
extern  VTBL_ENTRY _ZTV8S20678C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C4[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C5;
extern VTBL_ENTRY _ZTI8S20678C5[];
extern  VTBL_ENTRY _ZTV8S20678C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C5[];
extern Class_Descriptor cd_S20678C16;
extern VTBL_ENTRY _ZTI9S20678C16[];
extern  VTBL_ENTRY _ZTV9S20678C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C16[];
extern Class_Descriptor cd_S20678C15;
extern VTBL_ENTRY _ZTI9S20678C15[];
extern  VTBL_ENTRY _ZTV9S20678C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C15[];
extern Class_Descriptor cd_S20678C19;
extern VTBL_ENTRY _ZTI9S20678C19[];
extern  VTBL_ENTRY _ZTV9S20678C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C19[];
extern Class_Descriptor cd_S20678C18;
extern VTBL_ENTRY _ZTI9S20678C18[];
extern  VTBL_ENTRY _ZTV9S20678C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20678C18[];
static Base_Class bases_S20678C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(15720,10964), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20678C5,    ABISELECT(15776,11004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(15776,11004), //bcp->offset
    28, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20678C2,    ABISELECT(15616,10892), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C8,    ABISELECT(16704,11656), //bcp->offset
    43, //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_S20678C5,    ABISELECT(16192,11296), //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
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20677C3,    ABISELECT(16336,11396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20678C9,    ABISELECT(16336,11396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20678C7,    ABISELECT(16192,11296), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C5,    ABISELECT(30592,21336), //bcp->offset
    68, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20678C12,    ABISELECT(30352,21172), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20678C11,    ABISELECT(16976,11840), //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
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20678C10,    ABISELECT(16976,11840), //bcp->offset
    47, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20678C11,    ABISELECT(33568,23432), //bcp->offset
    85, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20677C3,    ABISELECT(34896,24348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20678C9,    ABISELECT(34896,24348), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20678C12,    ABISELECT(34656,24184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20678C5,    ABISELECT(38352,26820), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20678C4,    ABISELECT(38352,26820), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20678C5,    ABISELECT(38768,27112), //bcp->offset
    131, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20678C5,    ABISELECT(38960,27240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20678C16,    ABISELECT(38960,27240), //bcp->offset
    134, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S20678C15,    ABISELECT(38352,26820), //bcp->offset
    116, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S20678C19,    ABISELECT(34656,24184), //bcp->offset
    96, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20678C18,    ABISELECT(30736,21436), //bcp->offset
    71, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20678C1[];
extern void _ZN8S20678C1D1Ev();
extern void _ZN8S20678C1D0Ev();
extern void _ZN8S20678C12v1Ev();
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN8S20678C72v9Ev();
extern void _ZN8S20678C82v8Ev();
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C103v14Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C183v21Ev();
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C193v17Ev();
extern void _ZN9S20678C193v18Ev();
extern void _ZN9S20678C193v19Ev();
extern void _ZN9S20678C193v20Ev();
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY vtc_S20678C1[] = {
  ABISELECT(38960,27240),
  ABISELECT(38352,26820),
  ABISELECT(34656,24184),
  ABISELECT(33568,23432),
  ABISELECT(30736,21436),
  ABISELECT(30592,21336),
  ABISELECT(30352,21172),
  ABISELECT(16976,11840),
  ABISELECT(16704,11656),
  ABISELECT(16192,11296),
  ABISELECT(15776,11004),
  ABISELECT(15720,10964),
  ABISELECT(15616,10892),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN8S20678C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20678C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20678C12v1Ev,
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-15616,-10892),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-15776,-11004),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  0,
  ABISELECT(512,360),
  ABISELECT(-472,-332),
  ABISELECT(-16192,-11296),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN8S20678C72v9Ev,
  0,
  ABISELECT(-16704,-11656),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
  0,
  0,
  0,
  ABISELECT(13616,9496),
  ABISELECT(13376,9332),
  ABISELECT(-1360,-948),
  ABISELECT(-1256,-876),
  ABISELECT(-1200,-836),
  ABISELECT(-16976,-11840),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20678C103v14Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10208),
  ABISELECT(-30352,-21172),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  ABISELECT(-14872,-10372),
  ABISELECT(-30592,-21336),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  0,
  ABISELECT(8224,5804),
  ABISELECT(-14032,-9780),
  ABISELECT(7616,5384),
  ABISELECT(3920,2748),
  ABISELECT(-144,-100),
  ABISELECT(-384,-264),
  ABISELECT(-15120,-10544),
  ABISELECT(-15016,-10472),
  ABISELECT(-14960,-10432),
  ABISELECT(2832,1996),
  ABISELECT(-30736,-21436),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN9S20678C183v21Ev,
  0,
  0,
  ABISELECT(-2976,-2096),
  ABISELECT(-3216,-2260),
  ABISELECT(-17952,-12540),
  ABISELECT(-17848,-12468),
  ABISELECT(-17792,-12428),
  ABISELECT(-33568,-23432),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(4304,3056),
  ABISELECT(-17952,-12528),
  ABISELECT(-4304,-3012),
  ABISELECT(3696,2636),
  ABISELECT(-4064,-2848),
  ABISELECT(-18936,-13220),
  ABISELECT(-34656,-24184),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v20Ev,
  0,
  0,
  0,
  0,
  ABISELECT(608,420),
  ABISELECT(-21648,-15164),
  ABISELECT(-7760,-5484),
  ABISELECT(-8000,-5648),
  ABISELECT(-22632,-15856),
  ABISELECT(-38352,-26820),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
  ABISELECT(-23048,-16148),
  ABISELECT(-38768,-27112),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  0,
  ABISELECT(-23240,-16276),
  ABISELECT(-38960,-27240),
  (VTBL_ENTRY)&(_ZTI8S20678C1[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern VTBL_ENTRY _ZTV8S20678C1[];
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__8S20678C1[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C2__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20678C2[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__8S20678C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C4__8S20678C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C72v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C7__8S20678C1[] = {
  ABISELECT(512,360),
  ABISELECT(-472,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C7[0]),
  (VTBL_ENTRY)&_ZN8S20678C72v9Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C7__A1__8S20678C1[] = {
  ABISELECT(-472,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__8S20678C7__8S20678C1[] = {
  0,
  ABISELECT(-512,-360),
  (VTBL_ENTRY)&(_ZTI8S20678C7[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
extern void _ZN9S20678C103v14Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C10__8S20678C1[] = {
  ABISELECT(13616,9496),
  ABISELECT(13376,9332),
  ABISELECT(-1360,-948),
  ABISELECT(-1256,-876),
  ABISELECT(-1200,-836),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
  (VTBL_ENTRY)&_ZN9S20678C103v14Ev,
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C119S20678C10__8S20678C1[] = {
  ABISELECT(13616,9496),
  ABISELECT(13376,9332),
  ABISELECT(-1360,-948),
  ABISELECT(-1256,-876),
  ABISELECT(-1200,-836),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C119S20678C10__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(1200,836),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C119S20678C10__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(1360,948),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C119S20678C10__8S20678C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10208),
  ABISELECT(-13376,-9332),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C119S20678C10__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  ABISELECT(-13616,-9496),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C10__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(1200,836),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C10__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(1360,948),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C10__8S20678C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10208),
  ABISELECT(-13376,-9332),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C10__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  ABISELECT(-13616,-9496),
  (VTBL_ENTRY)&(_ZTI9S20678C10[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__8S20678C1[] = {
  ABISELECT(240,164),
  ABISELECT(-14632,-10208),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C12__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A2__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C183v21Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C18__8S20678C1[] = {
  ABISELECT(8224,5804),
  ABISELECT(-14032,-9780),
  ABISELECT(7616,5384),
  ABISELECT(3920,2748),
  ABISELECT(-144,-100),
  ABISELECT(-384,-264),
  ABISELECT(-15120,-10544),
  ABISELECT(-15016,-10472),
  ABISELECT(-14960,-10432),
  ABISELECT(2832,1996),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C183v21Ev,
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C11__9S20678C18__8S20678C1[] = {
  0,
  0,
  ABISELECT(-2976,-2096),
  ABISELECT(-3216,-2260),
  ABISELECT(-17952,-12540),
  ABISELECT(-17848,-12468),
  ABISELECT(-17792,-12428),
  ABISELECT(-2832,-1996),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C18__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(14960,10432),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C18__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(15120,10544),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C18__8S20678C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10208),
  ABISELECT(384,264),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C18__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C193v17Ev();
extern void _ZN9S20678C193v18Ev();
extern void _ZN9S20678C193v19Ev();
extern void _ZN9S20678C193v20Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C19__9S20678C18__8S20678C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(4304,3056),
  ABISELECT(-17952,-12528),
  ABISELECT(-4304,-3012),
  ABISELECT(3696,2636),
  ABISELECT(-4064,-2848),
  ABISELECT(-18936,-13220),
  ABISELECT(-3920,-2748),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v20Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C15__9S20678C18__8S20678C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(608,420),
  ABISELECT(-21648,-15164),
  ABISELECT(-7760,-5484),
  ABISELECT(-8000,-5648),
  ABISELECT(-22632,-15856),
  ABISELECT(-7616,-5384),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C15__A3__9S20678C18__8S20678C1[] = {
  ABISELECT(-23048,-16148),
  ABISELECT(-8032,-5676),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__9S20678C18__8S20678C1[] = {
  0,
  ABISELECT(14032,9780),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C18__8S20678C1[] = {
  0,
  ABISELECT(-23240,-16276),
  ABISELECT(-8224,-5804),
  (VTBL_ENTRY)&(_ZTI9S20678C18[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern void _ZN9S20678C113v12Ev();
extern void _ZN9S20678C113v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C11__A1__8S20678C1[] = {
  ABISELECT(-2976,-2096),
  ABISELECT(-3216,-2260),
  ABISELECT(-17952,-12540),
  ABISELECT(-17848,-12468),
  ABISELECT(-17792,-12428),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C113v12Ev,
  (VTBL_ENTRY)&_ZN9S20678C113v13Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C4__9S20678C11__A1__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(17792,12428),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
extern void _ZN8S20678C22v5Ev();
extern void _ZN8S20678C22v6Ev();
extern void _ZN8S20678C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C2__9S20678C11__A1__8S20678C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(17952,12540),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN8S20678C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20678C22v7Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C11__A1__8S20678C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10208),
  ABISELECT(3216,2260),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C11__A1__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  ABISELECT(2976,2096),
  (VTBL_ENTRY)&(_ZTI9S20678C11[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
extern void _ZN9S20678C193v17Ev();
extern void _ZN9S20678C193v18Ev();
extern void _ZN9S20678C193v19Ev();
extern void _ZN9S20678C193v20Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C19__8S20678C1[] = {
  ABISELECT(4304,3056),
  ABISELECT(-17952,-12528),
  ABISELECT(-4304,-3012),
  ABISELECT(3696,2636),
  ABISELECT(-4064,-2848),
  ABISELECT(-18936,-13220),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v17Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v18Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v19Ev,
  (VTBL_ENTRY)&_ZN9S20678C193v20Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C129S20678C19__A1__8S20678C1[] = {
  ABISELECT(-4064,-2848),
  ABISELECT(-18936,-13220),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C129S20678C19__A1__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  ABISELECT(4064,2848),
  (VTBL_ENTRY)&(_ZTI9S20678C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__9S20678C19__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  ABISELECT(4064,2848),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C15__9S20678C19__8S20678C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(608,420),
  ABISELECT(-21648,-15164),
  ABISELECT(-7760,-5484),
  ABISELECT(-8000,-5648),
  ABISELECT(-22632,-15856),
  ABISELECT(-3696,-2636),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__A1__9S20678C19__8S20678C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10208),
  ABISELECT(4304,3012),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C15__A2__9S20678C19__8S20678C1[] = {
  ABISELECT(-23048,-16148),
  ABISELECT(-4112,-2928),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__9S20678C19__8S20678C1[] = {
  0,
  ABISELECT(17952,12528),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C19__8S20678C1[] = {
  0,
  ABISELECT(-23240,-16276),
  ABISELECT(-4304,-3056),
  (VTBL_ENTRY)&(_ZTI9S20678C19[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
extern void _ZN9S20678C153v16Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C15__8S20678C1[] = {
  ABISELECT(608,420),
  ABISELECT(-21648,-15164),
  ABISELECT(-7760,-5484),
  ABISELECT(-8000,-5648),
  ABISELECT(-22632,-15856),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
  (VTBL_ENTRY)&_ZN9S20678C153v16Ev,
};
extern void _ZN8S20678C42v2Ev();
extern void _ZN8S20678C42v3Ev();
extern void _ZN8S20678C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C49S20678C15__A1__8S20678C1[] = {
  ABISELECT(-22632,-15856),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C4[0]),
  (VTBL_ENTRY)&_ZN8S20678C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20678C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C58S20678C49S20678C15__A3__8S20678C1[] = {
  ABISELECT(-22632,-15856),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C15__A4__8S20678C1[] = {
  ABISELECT(-23048,-16148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
extern void _ZN9S20678C123v10Ev();
extern void _ZN9S20678C123v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C12__9S20678C15__8S20678C1[] = {
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-14632,-10208),
  ABISELECT(8000,5648),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C123v10Ev,
  (VTBL_ENTRY)&_ZN9S20678C123v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A1__9S20678C15__8S20678C1[] = {
  ABISELECT(-14872,-10372),
  ABISELECT(7760,5484),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20678C5__A__9S20678C15__8S20678C1[] = {
  ABISELECT(-23048,-16148),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
};
extern void _ZN8S20678C82v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20678C8__9S20678C15__8S20678C1[] = {
  0,
  ABISELECT(21648,15164),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN8S20678C82v8Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__9S20678C15__8S20678C1[] = {
  0,
  ABISELECT(-23240,-16276),
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI9S20678C15[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
extern void _ZN9S20678C163v15Ev();
static  VTBL_ENTRY _tg__ZTV9S20678C16__8S20678C1[] = {
  ABISELECT(-23240,-16276),
  0,
  (VTBL_ENTRY)&(_ZTI9S20678C16[0]),
  (VTBL_ENTRY)&_ZN9S20678C163v15Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20678C59S20678C16__A5__8S20678C1[] = {
  ABISELECT(-23240,-16276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20678C5[0]),
};
static  VTT_ENTRY vtt_S20678C1[] = {
  {&(_ZTV8S20678C1[15]),  15,139},
  {&(_ZTV8S20678C1[25]),  25,139},
  {&(_ZTV8S20678C1[34]),  34,139},
  {&(_ZTV8S20678C1[42]),  42,139},
  {&(_ZTV8S20678C1[46]),  46,139},
  {&(_ZTV8S20678C1[57]),  57,139},
  {&(_ZTV8S20678C1[66]),  66,139},
  {&(_ZTV8S20678C1[71]),  71,139},
  {&(_ZTV8S20678C1[84]),  84,139},
  {&(_ZTV8S20678C1[94]),  94,139},
  {&(_ZTV8S20678C1[110]),  110,139},
  {&(_ZTV8S20678C1[127]),  127,139},
  {&(_ZTV8S20678C1[134]),  134,139},
  {&(_ZTV8S20678C1[138]),  138,139},
  {&(_tg__ZTV8S20678C2__8S20678C1[4]),  4,7},
  {&(_tg__ZTV8S20678C4__8S20678C2__8S20678C1[6]),  6,9},
  {&(_tg__ZTV8S20678C4__8S20678C1[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C4__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C7__8S20678C1[4]),  4,5},
  {&(_tg__ZTV8S20678C58S20678C7__A1__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C8__8S20678C7__8S20678C1[3]),  3,4},
  {&(_tg__ZTV9S20678C10__8S20678C1[7]),  7,10},
  {&(_tg__ZTV9S20678C119S20678C10__8S20678C1[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C119S20678C10__8S20678C1[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C119S20678C10__8S20678C1[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C119S20678C10__8S20678C1[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C119S20678C10__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C4__9S20678C10__8S20678C1[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C10__8S20678C1[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C10__8S20678C1[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C10__8S20678C1[3]),  3,3},
  {&(_tg__ZTV9S20678C12__8S20678C1[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C12__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A2__8S20678C1[3]),  3,3},
  {&(_tg__ZTV9S20678C18__8S20678C1[12]),  12,13},
  {&(_tg__ZTV9S20678C11__9S20678C18__8S20678C1[9]),  9,11},
  {&(_tg__ZTV8S20678C4__9S20678C18__8S20678C1[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C18__8S20678C1[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C18__8S20678C1[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C18__8S20678C1[3]),  3,3},
  {&(_tg__ZTV9S20678C19__9S20678C18__8S20678C1[14]),  14,20},
  {&(_tg__ZTV9S20678C15__9S20678C18__8S20678C1[11]),  11,15},
  {&(_tg__ZTV8S20678C59S20678C15__A3__9S20678C18__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C8__9S20678C18__8S20678C1[3]),  3,4},
  {&(_tg__ZTV9S20678C16__9S20678C18__8S20678C1[4]),  4,5},
  {&(_tg__ZTV9S20678C11__A1__8S20678C1[7]),  7,9},
  {&(_tg__ZTV8S20678C4__9S20678C11__A1__8S20678C1[6]),  6,9},
  {&(_tg__ZTV8S20678C2__9S20678C11__A1__8S20678C1[7]),  7,10},
  {&(_tg__ZTV9S20678C12__9S20678C11__A1__8S20678C1[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C11__A1__8S20678C1[3]),  3,3},
  {&(_tg__ZTV9S20678C19__8S20678C1[8]),  8,14},
  {&(_tg__ZTV9S20678C129S20678C19__A1__8S20678C1[4]),  4,6},
  {&(_tg__ZTV8S20678C5__9S20678C129S20678C19__A1__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C5__9S20678C19__8S20678C1[3]),  3,3},
  {&(_tg__ZTV9S20678C15__9S20678C19__8S20678C1[11]),  11,15},
  {&(_tg__ZTV9S20678C12__A1__9S20678C19__8S20678C1[6]),  6,8},
  {&(_tg__ZTV8S20678C59S20678C15__A2__9S20678C19__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C8__9S20678C19__8S20678C1[3]),  3,4},
  {&(_tg__ZTV9S20678C16__9S20678C19__8S20678C1[4]),  4,5},
  {&(_tg__ZTV9S20678C15__8S20678C1[7]),  7,11},
  {&(_tg__ZTV8S20678C49S20678C15__A1__8S20678C1[3]),  3,6},
  {&(_tg__ZTV8S20678C58S20678C49S20678C15__A3__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C59S20678C15__A4__8S20678C1[3]),  3,3},
  {&(_tg__ZTV9S20678C12__9S20678C15__8S20678C1[6]),  6,8},
  {&(_tg__ZTV8S20678C5__A1__9S20678C15__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C5__A__9S20678C15__8S20678C1[3]),  3,3},
  {&(_tg__ZTV8S20678C8__9S20678C15__8S20678C1[3]),  3,4},
  {&(_tg__ZTV9S20678C16__9S20678C15__8S20678C1[4]),  4,5},
  {&(_tg__ZTV9S20678C16__8S20678C1[3]),  3,4},
  {&(_tg__ZTV8S20678C59S20678C16__A5__8S20678C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20678C1[];
extern  VTBL_ENTRY _ZTV8S20678C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20678C1[];
Class_Descriptor cd_S20678C1 = {  "S20678C1", // class name
  bases_S20678C1, 25,
  &(vtc_S20678C1[0]), // expected_vtbl_contents
  &(vtt_S20678C1[0]), // expected_vtt_contents
  ABISELECT(39136,27376), // object size
  NSPAIRA(_ZTI8S20678C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20678C1),139, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20678C1),70, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S210C6  {
  int s210c6f0;
  __tsi64 s210c6f1;
  void *s210c6f2[4];
  int s210c6f3[2];
  void *s210c6f4;
  ::S1503C5_nt s210c6f5;
  void *s210c6f6[2];
  virtual  ~S210C6(); // _ZN6S210C6D1Ev
  virtual void  v4(); // _ZN6S210C62v4Ev
  virtual void  v5(); // _ZN6S210C62v5Ev
  virtual void  v6(); // _ZN6S210C62v6Ev
  virtual void  v7(); // _ZN6S210C62v7Ev
  virtual void  v8(); // _ZN6S210C62v8Ev
  virtual void  v9(); // _ZN6S210C62v9Ev
  virtual void  v10(); // _ZN6S210C63v10Ev
  virtual void  v11(); // _ZN6S210C63v11Ev
  virtual void  v12(); // _ZN6S210C63v12Ev
  virtual void  v13(); // _ZN6S210C63v13Ev
  virtual void  v14(); // _ZN6S210C63v14Ev
  virtual void  v15(); // _ZN6S210C63v15Ev
  virtual void  v16(); // _ZN6S210C63v16Ev
  virtual void  v17(); // _ZN6S210C63v17Ev
  virtual void  v18(); // _ZN6S210C63v18Ev
  virtual void  v19(); // _ZN6S210C63v19Ev
  virtual void  v20(); // _ZN6S210C63v20Ev
  virtual void  v21(); // _ZN6S210C63v21Ev
  virtual void  v22(); // _ZN6S210C63v22Ev
  virtual void  v23(); // _ZN6S210C63v23Ev
  virtual void  v24(); // _ZN6S210C63v24Ev
  virtual void  v25(); // _ZN6S210C63v25Ev
  virtual void  v26(); // _ZN6S210C63v26Ev
  virtual void  v27(); // _ZN6S210C63v27Ev
  virtual void  v28(); // _ZN6S210C63v28Ev
  virtual void  v29(); // _ZN6S210C63v29Ev
  virtual void  v30(); // _ZN6S210C63v30Ev
  virtual void  v31(); // _ZN6S210C63v31Ev
  virtual void  v32(); // _ZN6S210C63v32Ev
  virtual void  v33(); // _ZN6S210C63v33Ev
  virtual void  v34(); // _ZN6S210C63v34Ev
  virtual void  v35(); // _ZN6S210C63v35Ev
  virtual void  v36(); // _ZN6S210C63v36Ev
  virtual void  v37(); // _ZN6S210C63v37Ev
  virtual void  v38(); // _ZN6S210C63v38Ev
  virtual void  v39(); // _ZN6S210C63v39Ev
  virtual void  v40(); // _ZN6S210C63v40Ev
  virtual void  v41(); // _ZN6S210C63v41Ev
  virtual void  v42(); // _ZN6S210C63v42Ev
  virtual void  v43(); // _ZN6S210C63v43Ev
  virtual void  v44(); // _ZN6S210C63v44Ev
  virtual void  v45(); // _ZN6S210C63v45Ev
  virtual void  v46(); // _ZN6S210C63v46Ev
  virtual void  v47(); // _ZN6S210C63v47Ev
  virtual void  v48(); // _ZN6S210C63v48Ev
  virtual void  v49(); // _ZN6S210C63v49Ev
  virtual void  v50(); // _ZN6S210C63v50Ev
  virtual void  v51(); // _ZN6S210C63v51Ev
  virtual void  v52(); // _ZN6S210C63v52Ev
  virtual void  v53(); // _ZN6S210C63v53Ev
  virtual void  v54(); // _ZN6S210C63v54Ev
  virtual void  v55(); // _ZN6S210C63v55Ev
  virtual void  v56(); // _ZN6S210C63v56Ev
  virtual void  v57(); // _ZN6S210C63v57Ev
  virtual void  v58(); // _ZN6S210C63v58Ev
  virtual void  v59(); // _ZN6S210C63v59Ev
  virtual void  v60(); // _ZN6S210C63v60Ev
  virtual void  v61(); // _ZN6S210C63v61Ev
  virtual void  v62(); // _ZN6S210C63v62Ev
  virtual void  v63(); // _ZN6S210C63v63Ev
  virtual void  v64(); // _ZN6S210C63v64Ev
  virtual void  v65(); // _ZN6S210C63v65Ev
  virtual void  v66(); // _ZN6S210C63v66Ev
  virtual void  v67(); // _ZN6S210C63v67Ev
  S210C6(); // tgen
};
//SIG(-1 S210C6) 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]}


 S210C6 ::~S210C6(){ note_dtor("S210C6", this);}
void  S210C6 ::v4(){vfunc_called(this, "_ZN6S210C62v4Ev");}
void  S210C6 ::v5(){vfunc_called(this, "_ZN6S210C62v5Ev");}
void  S210C6 ::v6(){vfunc_called(this, "_ZN6S210C62v6Ev");}
void  S210C6 ::v7(){vfunc_called(this, "_ZN6S210C62v7Ev");}
void  S210C6 ::v8(){vfunc_called(this, "_ZN6S210C62v8Ev");}
void  S210C6 ::v9(){vfunc_called(this, "_ZN6S210C62v9Ev");}
void  S210C6 ::v10(){vfunc_called(this, "_ZN6S210C63v10Ev");}
void  S210C6 ::v11(){vfunc_called(this, "_ZN6S210C63v11Ev");}
void  S210C6 ::v12(){vfunc_called(this, "_ZN6S210C63v12Ev");}
void  S210C6 ::v13(){vfunc_called(this, "_ZN6S210C63v13Ev");}
void  S210C6 ::v14(){vfunc_called(this, "_ZN6S210C63v14Ev");}
void  S210C6 ::v15(){vfunc_called(this, "_ZN6S210C63v15Ev");}
void  S210C6 ::v16(){vfunc_called(this, "_ZN6S210C63v16Ev");}
void  S210C6 ::v17(){vfunc_called(this, "_ZN6S210C63v17Ev");}
void  S210C6 ::v18(){vfunc_called(this, "_ZN6S210C63v18Ev");}
void  S210C6 ::v19(){vfunc_called(this, "_ZN6S210C63v19Ev");}
void  S210C6 ::v20(){vfunc_called(this, "_ZN6S210C63v20Ev");}
void  S210C6 ::v21(){vfunc_called(this, "_ZN6S210C63v21Ev");}
void  S210C6 ::v22(){vfunc_called(this, "_ZN6S210C63v22Ev");}
void  S210C6 ::v23(){vfunc_called(this, "_ZN6S210C63v23Ev");}
void  S210C6 ::v24(){vfunc_called(this, "_ZN6S210C63v24Ev");}
void  S210C6 ::v25(){vfunc_called(this, "_ZN6S210C63v25Ev");}
void  S210C6 ::v26(){vfunc_called(this, "_ZN6S210C63v26Ev");}
void  S210C6 ::v27(){vfunc_called(this, "_ZN6S210C63v27Ev");}
void  S210C6 ::v28(){vfunc_called(this, "_ZN6S210C63v28Ev");}
void  S210C6 ::v29(){vfunc_called(this, "_ZN6S210C63v29Ev");}
void  S210C6 ::v30(){vfunc_called(this, "_ZN6S210C63v30Ev");}
void  S210C6 ::v31(){vfunc_called(this, "_ZN6S210C63v31Ev");}
void  S210C6 ::v32(){vfunc_called(this, "_ZN6S210C63v32Ev");}
void  S210C6 ::v33(){vfunc_called(this, "_ZN6S210C63v33Ev");}
void  S210C6 ::v34(){vfunc_called(this, "_ZN6S210C63v34Ev");}
void  S210C6 ::v35(){vfunc_called(this, "_ZN6S210C63v35Ev");}
void  S210C6 ::v36(){vfunc_called(this, "_ZN6S210C63v36Ev");}
void  S210C6 ::v37(){vfunc_called(this, "_ZN6S210C63v37Ev");}
void  S210C6 ::v38(){vfunc_called(this, "_ZN6S210C63v38Ev");}
void  S210C6 ::v39(){vfunc_called(this, "_ZN6S210C63v39Ev");}
void  S210C6 ::v40(){vfunc_called(this, "_ZN6S210C63v40Ev");}
void  S210C6 ::v41(){vfunc_called(this, "_ZN6S210C63v41Ev");}
void  S210C6 ::v42(){vfunc_called(this, "_ZN6S210C63v42Ev");}
void  S210C6 ::v43(){vfunc_called(this, "_ZN6S210C63v43Ev");}
void  S210C6 ::v44(){vfunc_called(this, "_ZN6S210C63v44Ev");}
void  S210C6 ::v45(){vfunc_called(this, "_ZN6S210C63v45Ev");}
void  S210C6 ::v46(){vfunc_called(this, "_ZN6S210C63v46Ev");}
void  S210C6 ::v47(){vfunc_called(this, "_ZN6S210C63v47Ev");}
void  S210C6 ::v48(){vfunc_called(this, "_ZN6S210C63v48Ev");}
void  S210C6 ::v49(){vfunc_called(this, "_ZN6S210C63v49Ev");}
void  S210C6 ::v50(){vfunc_called(this, "_ZN6S210C63v50Ev");}
void  S210C6 ::v51(){vfunc_called(this, "_ZN6S210C63v51Ev");}
void  S210C6 ::v52(){vfunc_called(this, "_ZN6S210C63v52Ev");}
void  S210C6 ::v53(){vfunc_called(this, "_ZN6S210C63v53Ev");}
void  S210C6 ::v54(){vfunc_called(this, "_ZN6S210C63v54Ev");}
void  S210C6 ::v55(){vfunc_called(this, "_ZN6S210C63v55Ev");}
void  S210C6 ::v56(){vfunc_called(this, "_ZN6S210C63v56Ev");}
void  S210C6 ::v57(){vfunc_called(this, "_ZN6S210C63v57Ev");}
void  S210C6 ::v58(){vfunc_called(this, "_ZN6S210C63v58Ev");}
void  S210C6 ::v59(){vfunc_called(this, "_ZN6S210C63v59Ev");}
void  S210C6 ::v60(){vfunc_called(this, "_ZN6S210C63v60Ev");}
void  S210C6 ::v61(){vfunc_called(this, "_ZN6S210C63v61Ev");}
void  S210C6 ::v62(){vfunc_called(this, "_ZN6S210C63v62Ev");}
void  S210C6 ::v63(){vfunc_called(this, "_ZN6S210C63v63Ev");}
void  S210C6 ::v64(){vfunc_called(this, "_ZN6S210C63v64Ev");}
void  S210C6 ::v65(){vfunc_called(this, "_ZN6S210C63v65Ev");}
void  S210C6 ::v66(){vfunc_called(this, "_ZN6S210C63v66Ev");}
void  S210C6 ::v67(){vfunc_called(this, "_ZN6S210C63v67Ev");}
S210C6 ::S210C6(){ note_ctor("S210C6", this);} // tgen

static void Test_S210C6()
{
  extern Class_Descriptor cd_S210C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S210C6, buf);
    S210C6 *dp, &lv = *(dp=new (buf) S210C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S210C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S210C6)");
    check_field_offset(lv, s210c6f0, ABISELECT(8,4), "S210C6.s210c6f0");
    check_field_offset(lv, s210c6f1, ABISELECT(16,8), "S210C6.s210c6f1");
    check_field_offset(lv, s210c6f2, ABISELECT(24,16), "S210C6.s210c6f2");
    check_field_offset(lv, s210c6f3, ABISELECT(56,32), "S210C6.s210c6f3");
    check_field_offset(lv, s210c6f4, ABISELECT(64,40), "S210C6.s210c6f4");
    check_field_offset(lv, s210c6f5, ABISELECT(72,44), "S210C6.s210c6f5");
    check_field_offset(lv, s210c6f6, ABISELECT(80,52), "S210C6.s210c6f6");
    test_class_info(&lv, &cd_S210C6);
    dp->~S210C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS210C6(Test_S210C6, "S210C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S210C6C1Ev();
extern void _ZN6S210C6D1Ev();
Name_Map name_map_S210C6[] = {
  NSPAIR(_ZN6S210C6C1Ev),
  NSPAIR(_ZN6S210C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S210C6[];
extern void _ZN6S210C6D1Ev();
extern void _ZN6S210C6D0Ev();
extern void _ZN6S210C62v4Ev();
extern void _ZN6S210C62v5Ev();
extern void _ZN6S210C62v6Ev();
extern void _ZN6S210C62v7Ev();
extern void _ZN6S210C62v8Ev();
extern void _ZN6S210C62v9Ev();
extern void _ZN6S210C63v10Ev();
extern void _ZN6S210C63v11Ev();
extern void _ZN6S210C63v12Ev();
extern void _ZN6S210C63v13Ev();
extern void _ZN6S210C63v14Ev();
extern void _ZN6S210C63v15Ev();
extern void _ZN6S210C63v16Ev();
extern void _ZN6S210C63v17Ev();
extern void _ZN6S210C63v18Ev();
extern void _ZN6S210C63v19Ev();
extern void _ZN6S210C63v20Ev();
extern void _ZN6S210C63v21Ev();
extern void _ZN6S210C63v22Ev();
extern void _ZN6S210C63v23Ev();
extern void _ZN6S210C63v24Ev();
extern void _ZN6S210C63v25Ev();
extern void _ZN6S210C63v26Ev();
extern void _ZN6S210C63v27Ev();
extern void _ZN6S210C63v28Ev();
extern void _ZN6S210C63v29Ev();
extern void _ZN6S210C63v30Ev();
extern void _ZN6S210C63v31Ev();
extern void _ZN6S210C63v32Ev();
extern void _ZN6S210C63v33Ev();
extern void _ZN6S210C63v34Ev();
extern void _ZN6S210C63v35Ev();
extern void _ZN6S210C63v36Ev();
extern void _ZN6S210C63v37Ev();
extern void _ZN6S210C63v38Ev();
extern void _ZN6S210C63v39Ev();
extern void _ZN6S210C63v40Ev();
extern void _ZN6S210C63v41Ev();
extern void _ZN6S210C63v42Ev();
extern void _ZN6S210C63v43Ev();
extern void _ZN6S210C63v44Ev();
extern void _ZN6S210C63v45Ev();
extern void _ZN6S210C63v46Ev();
extern void _ZN6S210C63v47Ev();
extern void _ZN6S210C63v48Ev();
extern void _ZN6S210C63v49Ev();
extern void _ZN6S210C63v50Ev();
extern void _ZN6S210C63v51Ev();
extern void _ZN6S210C63v52Ev();
extern void _ZN6S210C63v53Ev();
extern void _ZN6S210C63v54Ev();
extern void _ZN6S210C63v55Ev();
extern void _ZN6S210C63v56Ev();
extern void _ZN6S210C63v57Ev();
extern void _ZN6S210C63v58Ev();
extern void _ZN6S210C63v59Ev();
extern void _ZN6S210C63v60Ev();
extern void _ZN6S210C63v61Ev();
extern void _ZN6S210C63v62Ev();
extern void _ZN6S210C63v63Ev();
extern void _ZN6S210C63v64Ev();
extern void _ZN6S210C63v65Ev();
extern void _ZN6S210C63v66Ev();
extern void _ZN6S210C63v67Ev();
static  VTBL_ENTRY vtc_S210C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S210C6[0]),
  (VTBL_ENTRY)&_ZN6S210C6D1Ev,
  (VTBL_ENTRY)&_ZN6S210C6D0Ev,
  (VTBL_ENTRY)&_ZN6S210C62v4Ev,
  (VTBL_ENTRY)&_ZN6S210C62v5Ev,
  (VTBL_ENTRY)&_ZN6S210C62v6Ev,
  (VTBL_ENTRY)&_ZN6S210C62v7Ev,
  (VTBL_ENTRY)&_ZN6S210C62v8Ev,
  (VTBL_ENTRY)&_ZN6S210C62v9Ev,
  (VTBL_ENTRY)&_ZN6S210C63v10Ev,
  (VTBL_ENTRY)&_ZN6S210C63v11Ev,
  (VTBL_ENTRY)&_ZN6S210C63v12Ev,
  (VTBL_ENTRY)&_ZN6S210C63v13Ev,
  (VTBL_ENTRY)&_ZN6S210C63v14Ev,
  (VTBL_ENTRY)&_ZN6S210C63v15Ev,
  (VTBL_ENTRY)&_ZN6S210C63v16Ev,
  (VTBL_ENTRY)&_ZN6S210C63v17Ev,
  (VTBL_ENTRY)&_ZN6S210C63v18Ev,
  (VTBL_ENTRY)&_ZN6S210C63v19Ev,
  (VTBL_ENTRY)&_ZN6S210C63v20Ev,
  (VTBL_ENTRY)&_ZN6S210C63v21Ev,
  (VTBL_ENTRY)&_ZN6S210C63v22Ev,
  (VTBL_ENTRY)&_ZN6S210C63v23Ev,
  (VTBL_ENTRY)&_ZN6S210C63v24Ev,
  (VTBL_ENTRY)&_ZN6S210C63v25Ev,
  (VTBL_ENTRY)&_ZN6S210C63v26Ev,
  (VTBL_ENTRY)&_ZN6S210C63v27Ev,
  (VTBL_ENTRY)&_ZN6S210C63v28Ev,
  (VTBL_ENTRY)&_ZN6S210C63v29Ev,
  (VTBL_ENTRY)&_ZN6S210C63v30Ev,
  (VTBL_ENTRY)&_ZN6S210C63v31Ev,
  (VTBL_ENTRY)&_ZN6S210C63v32Ev,
  (VTBL_ENTRY)&_ZN6S210C63v33Ev,
  (VTBL_ENTRY)&_ZN6S210C63v34Ev,
  (VTBL_ENTRY)&_ZN6S210C63v35Ev,
  (VTBL_ENTRY)&_ZN6S210C63v36Ev,
  (VTBL_ENTRY)&_ZN6S210C63v37Ev,
  (VTBL_ENTRY)&_ZN6S210C63v38Ev,
  (VTBL_ENTRY)&_ZN6S210C63v39Ev,
  (VTBL_ENTRY)&_ZN6S210C63v40Ev,
  (VTBL_ENTRY)&_ZN6S210C63v41Ev,
  (VTBL_ENTRY)&_ZN6S210C63v42Ev,
  (VTBL_ENTRY)&_ZN6S210C63v43Ev,
  (VTBL_ENTRY)&_ZN6S210C63v44Ev,
  (VTBL_ENTRY)&_ZN6S210C63v45Ev,
  (VTBL_ENTRY)&_ZN6S210C63v46Ev,
  (VTBL_ENTRY)&_ZN6S210C63v47Ev,
  (VTBL_ENTRY)&_ZN6S210C63v48Ev,
  (VTBL_ENTRY)&_ZN6S210C63v49Ev,
  (VTBL_ENTRY)&_ZN6S210C63v50Ev,
  (VTBL_ENTRY)&_ZN6S210C63v51Ev,
  (VTBL_ENTRY)&_ZN6S210C63v52Ev,
  (VTBL_ENTRY)&_ZN6S210C63v53Ev,
  (VTBL_ENTRY)&_ZN6S210C63v54Ev,
  (VTBL_ENTRY)&_ZN6S210C63v55Ev,
  (VTBL_ENTRY)&_ZN6S210C63v56Ev,
  (VTBL_ENTRY)&_ZN6S210C63v57Ev,
  (VTBL_ENTRY)&_ZN6S210C63v58Ev,
  (VTBL_ENTRY)&_ZN6S210C63v59Ev,
  (VTBL_ENTRY)&_ZN6S210C63v60Ev,
  (VTBL_ENTRY)&_ZN6S210C63v61Ev,
  (VTBL_ENTRY)&_ZN6S210C63v62Ev,
  (VTBL_ENTRY)&_ZN6S210C63v63Ev,
  (VTBL_ENTRY)&_ZN6S210C63v64Ev,
  (VTBL_ENTRY)&_ZN6S210C63v65Ev,
  (VTBL_ENTRY)&_ZN6S210C63v66Ev,
  (VTBL_ENTRY)&_ZN6S210C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S210C6[];
extern  VTBL_ENTRY _ZTV6S210C6[];
Class_Descriptor cd_S210C6 = {  "S210C6", // class name
  0,0,//no base classes
  &(vtc_S210C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S210C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S210C6),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  S210C10  : S1503C8_nt {
};
//SIG(-1 S210C10) C1{ BC2{ m Fp Fi[2]}}



static void Test_S210C10()
{
  extern Class_Descriptor cd_S210C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S210C10, buf);
    S210C10 &lv = *(new (buf) S210C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S210C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S210C10)");
    check_base_class_offset(lv, (S1503C8_nt*), 0, "S210C10");
    test_class_info(&lv, &cd_S210C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS210C10(Test_S210C10, "S210C10", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
static Base_Class bases_S210C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_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_S210C10 = {  "S210C10", // class name
  bases_S210C10, 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  S210C9  : S210C10 {
};
//SIG(-1 S210C9) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S210C9()
{
  extern Class_Descriptor cd_S210C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S210C9, buf);
    S210C9 &lv = *(new (buf) S210C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S210C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S210C9)");
    check_base_class_offset(lv, (S1503C8_nt*)(S210C10*), 0, "S210C9");
    check_base_class_offset(lv, (S210C10*), 0, "S210C9");
    test_class_info(&lv, &cd_S210C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS210C9(Test_S210C9, "S210C9", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
extern Class_Descriptor cd_S210C10;
static Base_Class bases_S210C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_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_S210C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S210C9 = {  "S210C9", // class name
  bases_S210C9, 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  S210C8_nt  : S210C9 {
};
//SIG(-1 S210C8_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S210C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S1503C8_nt;
extern Class_Descriptor cd_S210C10;
extern Class_Descriptor cd_S210C9;
static Base_Class bases_S210C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1503C8_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_S210C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S210C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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  S210C5_nt  : S210C6 {
  int s210c5f0[2];
  void *s210c5f1;
  int s210c5f2[2];
  ::S210C8_nt s210c5f3;
  ::S210C8_nt s210c5f4;
  ::S629C14 s210c5f5;
  ::S210C8_nt s210c5f6;
  unsigned int s210c5f7:1;
  unsigned int s210c5f8:1;
  unsigned int s210c5f9:1;
  unsigned int s210c5f10:1;
  unsigned int s210c5f11:1;
  int s210c5f12[2];
  virtual  ~S210C5_nt(); // _ZN9S210C5_ntD1Ev
  virtual void  v68(); // _ZN9S210C5_nt3v68Ev
  virtual void  v69(); // _ZN9S210C5_nt3v69Ev
  virtual void  v70(); // _ZN9S210C5_nt3v70Ev
  virtual void  v71(); // _ZN9S210C5_nt3v71Ev
  virtual void  v72(); // _ZN9S210C5_nt3v72Ev
  virtual void  v73(); // _ZN9S210C5_nt3v73Ev
  virtual void  v74(); // _ZN9S210C5_nt3v74Ev
  virtual void  v75(); // _ZN9S210C5_nt3v75Ev
  virtual void  v76(); // _ZN9S210C5_nt3v76Ev
  virtual void  v77(); // _ZN9S210C5_nt3v77Ev
  virtual void  v78(); // _ZN9S210C5_nt3v78Ev
  virtual void  v79(); // _ZN9S210C5_nt3v79Ev
  virtual void  v80(); // _ZN9S210C5_nt3v80Ev
  virtual void  v81(); // _ZN9S210C5_nt3v81Ev
  virtual void  v82(); // _ZN9S210C5_nt3v82Ev
  virtual void  v83(); // _ZN9S210C5_nt3v83Ev
  virtual void  v84(); // _ZN9S210C5_nt3v84Ev
  virtual void  v85(); // _ZN9S210C5_nt3v85Ev
  virtual void  v86(); // _ZN9S210C5_nt3v86Ev
  virtual void  v87(); // _ZN9S210C5_nt3v87Ev
  virtual void  v88(); // _ZN9S210C5_nt3v88Ev
  virtual void  v89(); // _ZN9S210C5_nt3v89Ev
  S210C5_nt(); // tgen
};
//SIG(-1 S210C5_nt) 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]}


 S210C5_nt ::~S210C5_nt(){ note_dtor("S210C5_nt", this);}
void  S210C5_nt ::v68(){vfunc_called(this, "_ZN9S210C5_nt3v68Ev");}
void  S210C5_nt ::v69(){vfunc_called(this, "_ZN9S210C5_nt3v69Ev");}
void  S210C5_nt ::v70(){vfunc_called(this, "_ZN9S210C5_nt3v70Ev");}
void  S210C5_nt ::v71(){vfunc_called(this, "_ZN9S210C5_nt3v71Ev");}
void  S210C5_nt ::v72(){vfunc_called(this, "_ZN9S210C5_nt3v72Ev");}
void  S210C5_nt ::v73(){vfunc_called(this, "_ZN9S210C5_nt3v73Ev");}
void  S210C5_nt ::v74(){vfunc_called(this, "_ZN9S210C5_nt3v74Ev");}
void  S210C5_nt ::v75(){vfunc_called(this, "_ZN9S210C5_nt3v75Ev");}
void  S210C5_nt ::v76(){vfunc_called(this, "_ZN9S210C5_nt3v76Ev");}
void  S210C5_nt ::v77(){vfunc_called(this, "_ZN9S210C5_nt3v77Ev");}
void  S210C5_nt ::v78(){vfunc_called(this, "_ZN9S210C5_nt3v78Ev");}
void  S210C5_nt ::v79(){vfunc_called(this, "_ZN9S210C5_nt3v79Ev");}
void  S210C5_nt ::v80(){vfunc_called(this, "_ZN9S210C5_nt3v80Ev");}
void  S210C5_nt ::v81(){vfunc_called(this, "_ZN9S210C5_nt3v81Ev");}
void  S210C5_nt ::v82(){vfunc_called(this, "_ZN9S210C5_nt3v82Ev");}
void  S210C5_nt ::v83(){vfunc_called(this, "_ZN9S210C5_nt3v83Ev");}
void  S210C5_nt ::v84(){vfunc_called(this, "_ZN9S210C5_nt3v84Ev");}
void  S210C5_nt ::v85(){vfunc_called(this, "_ZN9S210C5_nt3v85Ev");}
void  S210C5_nt ::v86(){vfunc_called(this, "_ZN9S210C5_nt3v86Ev");}
void  S210C5_nt ::v87(){vfunc_called(this, "_ZN9S210C5_nt3v87Ev");}
void  S210C5_nt ::v88(){vfunc_called(this, "_ZN9S210C5_nt3v88Ev");}
void  S210C5_nt ::v89(){vfunc_called(this, "_ZN9S210C5_nt3v89Ev");}
S210C5_nt ::S210C5_nt(){ note_ctor("S210C5_nt", this);} // tgen

//skip512 S210C5_nt

#else // __cplusplus

extern void _ZN9S210C5_ntC1Ev();
extern void _ZN9S210C5_ntD1Ev();
Name_Map name_map_S210C5_nt[] = {
  NSPAIR(_ZN9S210C5_ntC1Ev),
  NSPAIR(_ZN9S210C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S210C6;
extern VTBL_ENTRY _ZTI6S210C6[];
extern  VTBL_ENTRY _ZTV6S210C6[];
static Base_Class bases_S210C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S210C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S210C5_nt[];
extern void _ZN9S210C5_ntD1Ev();
extern void _ZN9S210C5_ntD0Ev();
extern void _ZN6S210C62v4Ev();
extern void _ZN6S210C62v5Ev();
extern void _ZN6S210C62v6Ev();
extern void _ZN6S210C62v7Ev();
extern void _ZN6S210C62v8Ev();
extern void _ZN6S210C62v9Ev();
extern void _ZN6S210C63v10Ev();
extern void _ZN6S210C63v11Ev();
extern void _ZN6S210C63v12Ev();
extern void _ZN6S210C63v13Ev();
extern void _ZN6S210C63v14Ev();
extern void _ZN6S210C63v15Ev();
extern void _ZN6S210C63v16Ev();
extern void _ZN6S210C63v17Ev();
extern void _ZN6S210C63v18Ev();
extern void _ZN6S210C63v19Ev();
extern void _ZN6S210C63v20Ev();
extern void _ZN6S210C63v21Ev();
extern void _ZN6S210C63v22Ev();
extern void _ZN6S210C63v23Ev();
extern void _ZN6S210C63v24Ev();
extern void _ZN6S210C63v25Ev();
extern void _ZN6S210C63v26Ev();
extern void _ZN6S210C63v27Ev();
extern void _ZN6S210C63v28Ev();
extern void _ZN6S210C63v29Ev();
extern void _ZN6S210C63v30Ev();
extern void _ZN6S210C63v31Ev();
extern void _ZN6S210C63v32Ev();
extern void _ZN6S210C63v33Ev();
extern void _ZN6S210C63v34Ev();
extern void _ZN6S210C63v35Ev();
extern void _ZN6S210C63v36Ev();
extern void _ZN6S210C63v37Ev();
extern void _ZN6S210C63v38Ev();
extern void _ZN6S210C63v39Ev();
extern void _ZN6S210C63v40Ev();
extern void _ZN6S210C63v41Ev();
extern void _ZN6S210C63v42Ev();
extern void _ZN6S210C63v43Ev();
extern void _ZN6S210C63v44Ev();
extern void _ZN6S210C63v45Ev();
extern void _ZN6S210C63v46Ev();
extern void _ZN6S210C63v47Ev();
extern void _ZN6S210C63v48Ev();
extern void _ZN6S210C63v49Ev();
extern void _ZN6S210C63v50Ev();
extern void _ZN6S210C63v51Ev();
extern void _ZN6S210C63v52Ev();
extern void _ZN6S210C63v53Ev();
extern void _ZN6S210C63v54Ev();
extern void _ZN6S210C63v55Ev();
extern void _ZN6S210C63v56Ev();
extern void _ZN6S210C63v57Ev();
extern void _ZN6S210C63v58Ev();
extern void _ZN6S210C63v59Ev();
extern void _ZN6S210C63v60Ev();
extern void _ZN6S210C63v61Ev();
extern void _ZN6S210C63v62Ev();
extern void _ZN6S210C63v63Ev();
extern void _ZN6S210C63v64Ev();
extern void _ZN6S210C63v65Ev();
extern void _ZN6S210C63v66Ev();
extern void _ZN6S210C63v67Ev();
extern void _ZN9S210C5_nt3v68Ev();
extern void _ZN9S210C5_nt3v69Ev();
extern void _ZN9S210C5_nt3v70Ev();
extern void _ZN9S210C5_nt3v71Ev();
extern void _ZN9S210C5_nt3v72Ev();
extern void _ZN9S210C5_nt3v73Ev();
extern void _ZN9S210C5_nt3v74Ev();
extern void _ZN9S210C5_nt3v75Ev();
extern void _ZN9S210C5_nt3v76Ev();
extern void _ZN9S210C5_nt3v77Ev();
extern void _ZN9S210C5_nt3v78Ev();
extern void _ZN9S210C5_nt3v79Ev();
extern void _ZN9S210C5_nt3v80Ev();
extern void _ZN9S210C5_nt3v81Ev();
extern void _ZN9S210C5_nt3v82Ev();
extern void _ZN9S210C5_nt3v83Ev();
extern void _ZN9S210C5_nt3v84Ev();
extern void _ZN9S210C5_nt3v85Ev();
extern void _ZN9S210C5_nt3v86Ev();
extern void _ZN9S210C5_nt3v87Ev();
extern void _ZN9S210C5_nt3v88Ev();
extern void _ZN9S210C5_nt3v89Ev();
static  VTBL_ENTRY vtc_S210C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S210C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S210C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S210C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S210C62v4Ev,
  (VTBL_ENTRY)&_ZN6S210C62v5Ev,
  (VTBL_ENTRY)&_ZN6S210C62v6Ev,
  (VTBL_ENTRY)&_ZN6S210C62v7Ev,
  (VTBL_ENTRY)&_ZN6S210C62v8Ev,
  (VTBL_ENTRY)&_ZN6S210C62v9Ev,
  (VTBL_ENTRY)&_ZN6S210C63v10Ev,
  (VTBL_ENTRY)&_ZN6S210C63v11Ev,
  (VTBL_ENTRY)&_ZN6S210C63v12Ev,
  (VTBL_ENTRY)&_ZN6S210C63v13Ev,
  (VTBL_ENTRY)&_ZN6S210C63v14Ev,
  (VTBL_ENTRY)&_ZN6S210C63v15Ev,
  (VTBL_ENTRY)&_ZN6S210C63v16Ev,
  (VTBL_ENTRY)&_ZN6S210C63v17Ev,
  (VTBL_ENTRY)&_ZN6S210C63v18Ev,
  (VTBL_ENTRY)&_ZN6S210C63v19Ev,
  (VTBL_ENTRY)&_ZN6S210C63v20Ev,
  (VTBL_ENTRY)&_ZN6S210C63v21Ev,
  (VTBL_ENTRY)&_ZN6S210C63v22Ev,
  (VTBL_ENTRY)&_ZN6S210C63v23Ev,
  (VTBL_ENTRY)&_ZN6S210C63v24Ev,
  (VTBL_ENTRY)&_ZN6S210C63v25Ev,
  (VTBL_ENTRY)&_ZN6S210C63v26Ev,
  (VTBL_ENTRY)&_ZN6S210C63v27Ev,
  (VTBL_ENTRY)&_ZN6S210C63v28Ev,
  (VTBL_ENTRY)&_ZN6S210C63v29Ev,
  (VTBL_ENTRY)&_ZN6S210C63v30Ev,
  (VTBL_ENTRY)&_ZN6S210C63v31Ev,
  (VTBL_ENTRY)&_ZN6S210C63v32Ev,
  (VTBL_ENTRY)&_ZN6S210C63v33Ev,
  (VTBL_ENTRY)&_ZN6S210C63v34Ev,
  (VTBL_ENTRY)&_ZN6S210C63v35Ev,
  (VTBL_ENTRY)&_ZN6S210C63v36Ev,
  (VTBL_ENTRY)&_ZN6S210C63v37Ev,
  (VTBL_ENTRY)&_ZN6S210C63v38Ev,
  (VTBL_ENTRY)&_ZN6S210C63v39Ev,
  (VTBL_ENTRY)&_ZN6S210C63v40Ev,
  (VTBL_ENTRY)&_ZN6S210C63v41Ev,
  (VTBL_ENTRY)&_ZN6S210C63v42Ev,
  (VTBL_ENTRY)&_ZN6S210C63v43Ev,
  (VTBL_ENTRY)&_ZN6S210C63v44Ev,
  (VTBL_ENTRY)&_ZN6S210C63v45Ev,
  (VTBL_ENTRY)&_ZN6S210C63v46Ev,
  (VTBL_ENTRY)&_ZN6S210C63v47Ev,
  (VTBL_ENTRY)&_ZN6S210C63v48Ev,
  (VTBL_ENTRY)&_ZN6S210C63v49Ev,
  (VTBL_ENTRY)&_ZN6S210C63v50Ev,
  (VTBL_ENTRY)&_ZN6S210C63v51Ev,
  (VTBL_ENTRY)&_ZN6S210C63v52Ev,
  (VTBL_ENTRY)&_ZN6S210C63v53Ev,
  (VTBL_ENTRY)&_ZN6S210C63v54Ev,
  (VTBL_ENTRY)&_ZN6S210C63v55Ev,
  (VTBL_ENTRY)&_ZN6S210C63v56Ev,
  (VTBL_ENTRY)&_ZN6S210C63v57Ev,
  (VTBL_ENTRY)&_ZN6S210C63v58Ev,
  (VTBL_ENTRY)&_ZN6S210C63v59Ev,
  (VTBL_ENTRY)&_ZN6S210C63v60Ev,
  (VTBL_ENTRY)&_ZN6S210C63v61Ev,
  (VTBL_ENTRY)&_ZN6S210C63v62Ev,
  (VTBL_ENTRY)&_ZN6S210C63v63Ev,
  (VTBL_ENTRY)&_ZN6S210C63v64Ev,
  (VTBL_ENTRY)&_ZN6S210C63v65Ev,
  (VTBL_ENTRY)&_ZN6S210C63v66Ev,
  (VTBL_ENTRY)&_ZN6S210C63v67Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v89Ev,
};
extern VTBL_ENTRY _ZTI9S210C5_nt[];
VTBL_ENTRY *P__ZTI9S210C5_nt = _ZTI9S210C5_nt; 
extern  VTBL_ENTRY _ZTV9S210C5_nt[];
Class_Descriptor cd_S210C5_nt = {  "S210C5_nt", // class name
  bases_S210C5_nt, 1,
  &(vtc_S210C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI9S210C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S210C5_nt),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  S210C4_nt  : S210C5_nt {
  unsigned int s210c4f0:1;
  unsigned int s210c4f1:1;
  unsigned int s210c4f2:1;
  ::S1503C28 s210c4f3;
  ::S1503C24 s210c4f4;
  ::S1503C18 s210c4f5;
  ::S1503C12 s210c4f6;
  int s210c4f7[3];
  virtual  ~S210C4_nt(); // _ZN9S210C4_ntD1Ev
  virtual void  v90(); // _ZN9S210C4_nt3v90Ev
  virtual void  v91(); // _ZN9S210C4_nt3v91Ev
  virtual void  v92(); // _ZN9S210C4_nt3v92Ev
  virtual void  v93(); // _ZN9S210C4_nt3v93Ev
  virtual void  v94(); // _ZN9S210C4_nt3v94Ev
  virtual void  v95(); // _ZN9S210C4_nt3v95Ev
  virtual void  v96(); // _ZN9S210C4_nt3v96Ev
  virtual void  v97(); // _ZN9S210C4_nt3v97Ev
  virtual void  v98(); // _ZN9S210C4_nt3v98Ev
  virtual void  v99(); // _ZN9S210C4_nt3v99Ev
  virtual void  v100(); // _ZN9S210C4_nt4v100Ev
  virtual void  v101(); // _ZN9S210C4_nt4v101Ev
  virtual void  v102(); // _ZN9S210C4_nt4v102Ev
  virtual void  v103(); // _ZN9S210C4_nt4v103Ev
  virtual void  v104(); // _ZN9S210C4_nt4v104Ev
  virtual void  v105(); // _ZN9S210C4_nt4v105Ev
  virtual void  v106(); // _ZN9S210C4_nt4v106Ev
  virtual void  v107(); // _ZN9S210C4_nt4v107Ev
  virtual void  v108(); // _ZN9S210C4_nt4v108Ev
  virtual void  v109(); // _ZN9S210C4_nt4v109Ev
  S210C4_nt(); // tgen
};
//SIG(-1 S210C4_nt) 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]}


 S210C4_nt ::~S210C4_nt(){ note_dtor("S210C4_nt", this);}
void  S210C4_nt ::v90(){vfunc_called(this, "_ZN9S210C4_nt3v90Ev");}
void  S210C4_nt ::v91(){vfunc_called(this, "_ZN9S210C4_nt3v91Ev");}
void  S210C4_nt ::v92(){vfunc_called(this, "_ZN9S210C4_nt3v92Ev");}
void  S210C4_nt ::v93(){vfunc_called(this, "_ZN9S210C4_nt3v93Ev");}
void  S210C4_nt ::v94(){vfunc_called(this, "_ZN9S210C4_nt3v94Ev");}
void  S210C4_nt ::v95(){vfunc_called(this, "_ZN9S210C4_nt3v95Ev");}
void  S210C4_nt ::v96(){vfunc_called(this, "_ZN9S210C4_nt3v96Ev");}
void  S210C4_nt ::v97(){vfunc_called(this, "_ZN9S210C4_nt3v97Ev");}
void  S210C4_nt ::v98(){vfunc_called(this, "_ZN9S210C4_nt3v98Ev");}
void  S210C4_nt ::v99(){vfunc_called(this, "_ZN9S210C4_nt3v99Ev");}
void  S210C4_nt ::v100(){vfunc_called(this, "_ZN9S210C4_nt4v100Ev");}
void  S210C4_nt ::v101(){vfunc_called(this, "_ZN9S210C4_nt4v101Ev");}
void  S210C4_nt ::v102(){vfunc_called(this, "_ZN9S210C4_nt4v102Ev");}
void  S210C4_nt ::v103(){vfunc_called(this, "_ZN9S210C4_nt4v103Ev");}
void  S210C4_nt ::v104(){vfunc_called(this, "_ZN9S210C4_nt4v104Ev");}
void  S210C4_nt ::v105(){vfunc_called(this, "_ZN9S210C4_nt4v105Ev");}
void  S210C4_nt ::v106(){vfunc_called(this, "_ZN9S210C4_nt4v106Ev");}
void  S210C4_nt ::v107(){vfunc_called(this, "_ZN9S210C4_nt4v107Ev");}
void  S210C4_nt ::v108(){vfunc_called(this, "_ZN9S210C4_nt4v108Ev");}
void  S210C4_nt ::v109(){vfunc_called(this, "_ZN9S210C4_nt4v109Ev");}
S210C4_nt ::S210C4_nt(){ note_ctor("S210C4_nt", this);} // tgen

//skip512 S210C4_nt

#else // __cplusplus

extern void _ZN9S210C4_ntC1Ev();
extern void _ZN9S210C4_ntD1Ev();
Name_Map name_map_S210C4_nt[] = {
  NSPAIR(_ZN9S210C4_ntC1Ev),
  NSPAIR(_ZN9S210C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S210C6;
extern VTBL_ENTRY _ZTI6S210C6[];
extern  VTBL_ENTRY _ZTV6S210C6[];
extern Class_Descriptor cd_S210C5_nt;
extern VTBL_ENTRY _ZTI9S210C5_nt[];
extern  VTBL_ENTRY _ZTV9S210C5_nt[];
static Base_Class bases_S210C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S210C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S210C5_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 _ZTI9S210C4_nt[];
extern void _ZN9S210C4_ntD1Ev();
extern void _ZN9S210C4_ntD0Ev();
extern void _ZN6S210C62v4Ev();
extern void _ZN6S210C62v5Ev();
extern void _ZN6S210C62v6Ev();
extern void _ZN6S210C62v7Ev();
extern void _ZN6S210C62v8Ev();
extern void _ZN6S210C62v9Ev();
extern void _ZN6S210C63v10Ev();
extern void _ZN6S210C63v11Ev();
extern void _ZN6S210C63v12Ev();
extern void _ZN6S210C63v13Ev();
extern void _ZN6S210C63v14Ev();
extern void _ZN6S210C63v15Ev();
extern void _ZN6S210C63v16Ev();
extern void _ZN6S210C63v17Ev();
extern void _ZN6S210C63v18Ev();
extern void _ZN6S210C63v19Ev();
extern void _ZN6S210C63v20Ev();
extern void _ZN6S210C63v21Ev();
extern void _ZN6S210C63v22Ev();
extern void _ZN6S210C63v23Ev();
extern void _ZN6S210C63v24Ev();
extern void _ZN6S210C63v25Ev();
extern void _ZN6S210C63v26Ev();
extern void _ZN6S210C63v27Ev();
extern void _ZN6S210C63v28Ev();
extern void _ZN6S210C63v29Ev();
extern void _ZN6S210C63v30Ev();
extern void _ZN6S210C63v31Ev();
extern void _ZN6S210C63v32Ev();
extern void _ZN6S210C63v33Ev();
extern void _ZN6S210C63v34Ev();
extern void _ZN6S210C63v35Ev();
extern void _ZN6S210C63v36Ev();
extern void _ZN6S210C63v37Ev();
extern void _ZN6S210C63v38Ev();
extern void _ZN6S210C63v39Ev();
extern void _ZN6S210C63v40Ev();
extern void _ZN6S210C63v41Ev();
extern void _ZN6S210C63v42Ev();
extern void _ZN6S210C63v43Ev();
extern void _ZN6S210C63v44Ev();
extern void _ZN6S210C63v45Ev();
extern void _ZN6S210C63v46Ev();
extern void _ZN6S210C63v47Ev();
extern void _ZN6S210C63v48Ev();
extern void _ZN6S210C63v49Ev();
extern void _ZN6S210C63v50Ev();
extern void _ZN6S210C63v51Ev();
extern void _ZN6S210C63v52Ev();
extern void _ZN6S210C63v53Ev();
extern void _ZN6S210C63v54Ev();
extern void _ZN6S210C63v55Ev();
extern void _ZN6S210C63v56Ev();
extern void _ZN6S210C63v57Ev();
extern void _ZN6S210C63v58Ev();
extern void _ZN6S210C63v59Ev();
extern void _ZN6S210C63v60Ev();
extern void _ZN6S210C63v61Ev();
extern void _ZN6S210C63v62Ev();
extern void _ZN6S210C63v63Ev();
extern void _ZN6S210C63v64Ev();
extern void _ZN6S210C63v65Ev();
extern void _ZN6S210C63v66Ev();
extern void _ZN6S210C63v67Ev();
extern void _ZN9S210C5_nt3v68Ev();
extern void _ZN9S210C5_nt3v69Ev();
extern void _ZN9S210C5_nt3v70Ev();
extern void _ZN9S210C5_nt3v71Ev();
extern void _ZN9S210C5_nt3v72Ev();
extern void _ZN9S210C5_nt3v73Ev();
extern void _ZN9S210C5_nt3v74Ev();
extern void _ZN9S210C5_nt3v75Ev();
extern void _ZN9S210C5_nt3v76Ev();
extern void _ZN9S210C5_nt3v77Ev();
extern void _ZN9S210C5_nt3v78Ev();
extern void _ZN9S210C5_nt3v79Ev();
extern void _ZN9S210C5_nt3v80Ev();
extern void _ZN9S210C5_nt3v81Ev();
extern void _ZN9S210C5_nt3v82Ev();
extern void _ZN9S210C5_nt3v83Ev();
extern void _ZN9S210C5_nt3v84Ev();
extern void _ZN9S210C5_nt3v85Ev();
extern void _ZN9S210C5_nt3v86Ev();
extern void _ZN9S210C5_nt3v87Ev();
extern void _ZN9S210C5_nt3v88Ev();
extern void _ZN9S210C5_nt3v89Ev();
extern void _ZN9S210C4_nt3v90Ev();
extern void _ZN9S210C4_nt3v91Ev();
extern void _ZN9S210C4_nt3v92Ev();
extern void _ZN9S210C4_nt3v93Ev();
extern void _ZN9S210C4_nt3v94Ev();
extern void _ZN9S210C4_nt3v95Ev();
extern void _ZN9S210C4_nt3v96Ev();
extern void _ZN9S210C4_nt3v97Ev();
extern void _ZN9S210C4_nt3v98Ev();
extern void _ZN9S210C4_nt3v99Ev();
extern void _ZN9S210C4_nt4v100Ev();
extern void _ZN9S210C4_nt4v101Ev();
extern void _ZN9S210C4_nt4v102Ev();
extern void _ZN9S210C4_nt4v103Ev();
extern void _ZN9S210C4_nt4v104Ev();
extern void _ZN9S210C4_nt4v105Ev();
extern void _ZN9S210C4_nt4v106Ev();
extern void _ZN9S210C4_nt4v107Ev();
extern void _ZN9S210C4_nt4v108Ev();
extern void _ZN9S210C4_nt4v109Ev();
static  VTBL_ENTRY vtc_S210C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S210C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S210C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S210C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S210C62v4Ev,
  (VTBL_ENTRY)&_ZN6S210C62v5Ev,
  (VTBL_ENTRY)&_ZN6S210C62v6Ev,
  (VTBL_ENTRY)&_ZN6S210C62v7Ev,
  (VTBL_ENTRY)&_ZN6S210C62v8Ev,
  (VTBL_ENTRY)&_ZN6S210C62v9Ev,
  (VTBL_ENTRY)&_ZN6S210C63v10Ev,
  (VTBL_ENTRY)&_ZN6S210C63v11Ev,
  (VTBL_ENTRY)&_ZN6S210C63v12Ev,
  (VTBL_ENTRY)&_ZN6S210C63v13Ev,
  (VTBL_ENTRY)&_ZN6S210C63v14Ev,
  (VTBL_ENTRY)&_ZN6S210C63v15Ev,
  (VTBL_ENTRY)&_ZN6S210C63v16Ev,
  (VTBL_ENTRY)&_ZN6S210C63v17Ev,
  (VTBL_ENTRY)&_ZN6S210C63v18Ev,
  (VTBL_ENTRY)&_ZN6S210C63v19Ev,
  (VTBL_ENTRY)&_ZN6S210C63v20Ev,
  (VTBL_ENTRY)&_ZN6S210C63v21Ev,
  (VTBL_ENTRY)&_ZN6S210C63v22Ev,
  (VTBL_ENTRY)&_ZN6S210C63v23Ev,
  (VTBL_ENTRY)&_ZN6S210C63v24Ev,
  (VTBL_ENTRY)&_ZN6S210C63v25Ev,
  (VTBL_ENTRY)&_ZN6S210C63v26Ev,
  (VTBL_ENTRY)&_ZN6S210C63v27Ev,
  (VTBL_ENTRY)&_ZN6S210C63v28Ev,
  (VTBL_ENTRY)&_ZN6S210C63v29Ev,
  (VTBL_ENTRY)&_ZN6S210C63v30Ev,
  (VTBL_ENTRY)&_ZN6S210C63v31Ev,
  (VTBL_ENTRY)&_ZN6S210C63v32Ev,
  (VTBL_ENTRY)&_ZN6S210C63v33Ev,
  (VTBL_ENTRY)&_ZN6S210C63v34Ev,
  (VTBL_ENTRY)&_ZN6S210C63v35Ev,
  (VTBL_ENTRY)&_ZN6S210C63v36Ev,
  (VTBL_ENTRY)&_ZN6S210C63v37Ev,
  (VTBL_ENTRY)&_ZN6S210C63v38Ev,
  (VTBL_ENTRY)&_ZN6S210C63v39Ev,
  (VTBL_ENTRY)&_ZN6S210C63v40Ev,
  (VTBL_ENTRY)&_ZN6S210C63v41Ev,
  (VTBL_ENTRY)&_ZN6S210C63v42Ev,
  (VTBL_ENTRY)&_ZN6S210C63v43Ev,
  (VTBL_ENTRY)&_ZN6S210C63v44Ev,
  (VTBL_ENTRY)&_ZN6S210C63v45Ev,
  (VTBL_ENTRY)&_ZN6S210C63v46Ev,
  (VTBL_ENTRY)&_ZN6S210C63v47Ev,
  (VTBL_ENTRY)&_ZN6S210C63v48Ev,
  (VTBL_ENTRY)&_ZN6S210C63v49Ev,
  (VTBL_ENTRY)&_ZN6S210C63v50Ev,
  (VTBL_ENTRY)&_ZN6S210C63v51Ev,
  (VTBL_ENTRY)&_ZN6S210C63v52Ev,
  (VTBL_ENTRY)&_ZN6S210C63v53Ev,
  (VTBL_ENTRY)&_ZN6S210C63v54Ev,
  (VTBL_ENTRY)&_ZN6S210C63v55Ev,
  (VTBL_ENTRY)&_ZN6S210C63v56Ev,
  (VTBL_ENTRY)&_ZN6S210C63v57Ev,
  (VTBL_ENTRY)&_ZN6S210C63v58Ev,
  (VTBL_ENTRY)&_ZN6S210C63v59Ev,
  (VTBL_ENTRY)&_ZN6S210C63v60Ev,
  (VTBL_ENTRY)&_ZN6S210C63v61Ev,
  (VTBL_ENTRY)&_ZN6S210C63v62Ev,
  (VTBL_ENTRY)&_ZN6S210C63v63Ev,
  (VTBL_ENTRY)&_ZN6S210C63v64Ev,
  (VTBL_ENTRY)&_ZN6S210C63v65Ev,
  (VTBL_ENTRY)&_ZN6S210C63v66Ev,
  (VTBL_ENTRY)&_ZN6S210C63v67Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v109Ev,
};
extern VTBL_ENTRY _ZTI9S210C4_nt[];
VTBL_ENTRY *P__ZTI9S210C4_nt = _ZTI9S210C4_nt; 
extern  VTBL_ENTRY _ZTV9S210C4_nt[];
Class_Descriptor cd_S210C4_nt = {  "S210C4_nt", // class name
  bases_S210C4_nt, 2,
  &(vtc_S210C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI9S210C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S210C4_nt),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  S210C3_nt  : S210C4_nt {
  ::S1503C5_nt s210c3f0;
  unsigned int s210c3f1:1;
  ::S1503C6_nt s210c3f2;
  virtual  ~S210C3_nt(); // _ZN9S210C3_ntD1Ev
  virtual void  v110(); // _ZN9S210C3_nt4v110Ev
  virtual void  v111(); // _ZN9S210C3_nt4v111Ev
  virtual void  v112(); // _ZN9S210C3_nt4v112Ev
  virtual void  v113(); // _ZN9S210C3_nt4v113Ev
  S210C3_nt(); // tgen
};
//SIG(-1 S210C3_nt) 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}}}


 S210C3_nt ::~S210C3_nt(){ note_dtor("S210C3_nt", this);}
void  S210C3_nt ::v110(){vfunc_called(this, "_ZN9S210C3_nt4v110Ev");}
void  S210C3_nt ::v111(){vfunc_called(this, "_ZN9S210C3_nt4v111Ev");}
void  S210C3_nt ::v112(){vfunc_called(this, "_ZN9S210C3_nt4v112Ev");}
void  S210C3_nt ::v113(){vfunc_called(this, "_ZN9S210C3_nt4v113Ev");}
S210C3_nt ::S210C3_nt(){ note_ctor("S210C3_nt", this);} // tgen

//skip512 S210C3_nt

#else // __cplusplus

extern void _ZN9S210C3_ntC1Ev();
extern void _ZN9S210C3_ntD1Ev();
Name_Map name_map_S210C3_nt[] = {
  NSPAIR(_ZN9S210C3_ntC1Ev),
  NSPAIR(_ZN9S210C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S210C6;
extern VTBL_ENTRY _ZTI6S210C6[];
extern  VTBL_ENTRY _ZTV6S210C6[];
extern Class_Descriptor cd_S210C5_nt;
extern VTBL_ENTRY _ZTI9S210C5_nt[];
extern  VTBL_ENTRY _ZTV9S210C5_nt[];
extern Class_Descriptor cd_S210C4_nt;
extern VTBL_ENTRY _ZTI9S210C4_nt[];
extern  VTBL_ENTRY _ZTV9S210C4_nt[];
static Base_Class bases_S210C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S210C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S210C5_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_S210C4_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 _ZTI9S210C3_nt[];
extern void _ZN9S210C3_ntD1Ev();
extern void _ZN9S210C3_ntD0Ev();
extern void _ZN6S210C62v4Ev();
extern void _ZN6S210C62v5Ev();
extern void _ZN6S210C62v6Ev();
extern void _ZN6S210C62v7Ev();
extern void _ZN6S210C62v8Ev();
extern void _ZN6S210C62v9Ev();
extern void _ZN6S210C63v10Ev();
extern void _ZN6S210C63v11Ev();
extern void _ZN6S210C63v12Ev();
extern void _ZN6S210C63v13Ev();
extern void _ZN6S210C63v14Ev();
extern void _ZN6S210C63v15Ev();
extern void _ZN6S210C63v16Ev();
extern void _ZN6S210C63v17Ev();
extern void _ZN6S210C63v18Ev();
extern void _ZN6S210C63v19Ev();
extern void _ZN6S210C63v20Ev();
extern void _ZN6S210C63v21Ev();
extern void _ZN6S210C63v22Ev();
extern void _ZN6S210C63v23Ev();
extern void _ZN6S210C63v24Ev();
extern void _ZN6S210C63v25Ev();
extern void _ZN6S210C63v26Ev();
extern void _ZN6S210C63v27Ev();
extern void _ZN6S210C63v28Ev();
extern void _ZN6S210C63v29Ev();
extern void _ZN6S210C63v30Ev();
extern void _ZN6S210C63v31Ev();
extern void _ZN6S210C63v32Ev();
extern void _ZN6S210C63v33Ev();
extern void _ZN6S210C63v34Ev();
extern void _ZN6S210C63v35Ev();
extern void _ZN6S210C63v36Ev();
extern void _ZN6S210C63v37Ev();
extern void _ZN6S210C63v38Ev();
extern void _ZN6S210C63v39Ev();
extern void _ZN6S210C63v40Ev();
extern void _ZN6S210C63v41Ev();
extern void _ZN6S210C63v42Ev();
extern void _ZN6S210C63v43Ev();
extern void _ZN6S210C63v44Ev();
extern void _ZN6S210C63v45Ev();
extern void _ZN6S210C63v46Ev();
extern void _ZN6S210C63v47Ev();
extern void _ZN6S210C63v48Ev();
extern void _ZN6S210C63v49Ev();
extern void _ZN6S210C63v50Ev();
extern void _ZN6S210C63v51Ev();
extern void _ZN6S210C63v52Ev();
extern void _ZN6S210C63v53Ev();
extern void _ZN6S210C63v54Ev();
extern void _ZN6S210C63v55Ev();
extern void _ZN6S210C63v56Ev();
extern void _ZN6S210C63v57Ev();
extern void _ZN6S210C63v58Ev();
extern void _ZN6S210C63v59Ev();
extern void _ZN6S210C63v60Ev();
extern void _ZN6S210C63v61Ev();
extern void _ZN6S210C63v62Ev();
extern void _ZN6S210C63v63Ev();
extern void _ZN6S210C63v64Ev();
extern void _ZN6S210C63v65Ev();
extern void _ZN6S210C63v66Ev();
extern void _ZN6S210C63v67Ev();
extern void _ZN9S210C5_nt3v68Ev();
extern void _ZN9S210C5_nt3v69Ev();
extern void _ZN9S210C5_nt3v70Ev();
extern void _ZN9S210C5_nt3v71Ev();
extern void _ZN9S210C5_nt3v72Ev();
extern void _ZN9S210C5_nt3v73Ev();
extern void _ZN9S210C5_nt3v74Ev();
extern void _ZN9S210C5_nt3v75Ev();
extern void _ZN9S210C5_nt3v76Ev();
extern void _ZN9S210C5_nt3v77Ev();
extern void _ZN9S210C5_nt3v78Ev();
extern void _ZN9S210C5_nt3v79Ev();
extern void _ZN9S210C5_nt3v80Ev();
extern void _ZN9S210C5_nt3v81Ev();
extern void _ZN9S210C5_nt3v82Ev();
extern void _ZN9S210C5_nt3v83Ev();
extern void _ZN9S210C5_nt3v84Ev();
extern void _ZN9S210C5_nt3v85Ev();
extern void _ZN9S210C5_nt3v86Ev();
extern void _ZN9S210C5_nt3v87Ev();
extern void _ZN9S210C5_nt3v88Ev();
extern void _ZN9S210C5_nt3v89Ev();
extern void _ZN9S210C4_nt3v90Ev();
extern void _ZN9S210C4_nt3v91Ev();
extern void _ZN9S210C4_nt3v92Ev();
extern void _ZN9S210C4_nt3v93Ev();
extern void _ZN9S210C4_nt3v94Ev();
extern void _ZN9S210C4_nt3v95Ev();
extern void _ZN9S210C4_nt3v96Ev();
extern void _ZN9S210C4_nt3v97Ev();
extern void _ZN9S210C4_nt3v98Ev();
extern void _ZN9S210C4_nt3v99Ev();
extern void _ZN9S210C4_nt4v100Ev();
extern void _ZN9S210C4_nt4v101Ev();
extern void _ZN9S210C4_nt4v102Ev();
extern void _ZN9S210C4_nt4v103Ev();
extern void _ZN9S210C4_nt4v104Ev();
extern void _ZN9S210C4_nt4v105Ev();
extern void _ZN9S210C4_nt4v106Ev();
extern void _ZN9S210C4_nt4v107Ev();
extern void _ZN9S210C4_nt4v108Ev();
extern void _ZN9S210C4_nt4v109Ev();
extern void _ZN9S210C3_nt4v110Ev();
extern void _ZN9S210C3_nt4v111Ev();
extern void _ZN9S210C3_nt4v112Ev();
extern void _ZN9S210C3_nt4v113Ev();
static  VTBL_ENTRY vtc_S210C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S210C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S210C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S210C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S210C62v4Ev,
  (VTBL_ENTRY)&_ZN6S210C62v5Ev,
  (VTBL_ENTRY)&_ZN6S210C62v6Ev,
  (VTBL_ENTRY)&_ZN6S210C62v7Ev,
  (VTBL_ENTRY)&_ZN6S210C62v8Ev,
  (VTBL_ENTRY)&_ZN6S210C62v9Ev,
  (VTBL_ENTRY)&_ZN6S210C63v10Ev,
  (VTBL_ENTRY)&_ZN6S210C63v11Ev,
  (VTBL_ENTRY)&_ZN6S210C63v12Ev,
  (VTBL_ENTRY)&_ZN6S210C63v13Ev,
  (VTBL_ENTRY)&_ZN6S210C63v14Ev,
  (VTBL_ENTRY)&_ZN6S210C63v15Ev,
  (VTBL_ENTRY)&_ZN6S210C63v16Ev,
  (VTBL_ENTRY)&_ZN6S210C63v17Ev,
  (VTBL_ENTRY)&_ZN6S210C63v18Ev,
  (VTBL_ENTRY)&_ZN6S210C63v19Ev,
  (VTBL_ENTRY)&_ZN6S210C63v20Ev,
  (VTBL_ENTRY)&_ZN6S210C63v21Ev,
  (VTBL_ENTRY)&_ZN6S210C63v22Ev,
  (VTBL_ENTRY)&_ZN6S210C63v23Ev,
  (VTBL_ENTRY)&_ZN6S210C63v24Ev,
  (VTBL_ENTRY)&_ZN6S210C63v25Ev,
  (VTBL_ENTRY)&_ZN6S210C63v26Ev,
  (VTBL_ENTRY)&_ZN6S210C63v27Ev,
  (VTBL_ENTRY)&_ZN6S210C63v28Ev,
  (VTBL_ENTRY)&_ZN6S210C63v29Ev,
  (VTBL_ENTRY)&_ZN6S210C63v30Ev,
  (VTBL_ENTRY)&_ZN6S210C63v31Ev,
  (VTBL_ENTRY)&_ZN6S210C63v32Ev,
  (VTBL_ENTRY)&_ZN6S210C63v33Ev,
  (VTBL_ENTRY)&_ZN6S210C63v34Ev,
  (VTBL_ENTRY)&_ZN6S210C63v35Ev,
  (VTBL_ENTRY)&_ZN6S210C63v36Ev,
  (VTBL_ENTRY)&_ZN6S210C63v37Ev,
  (VTBL_ENTRY)&_ZN6S210C63v38Ev,
  (VTBL_ENTRY)&_ZN6S210C63v39Ev,
  (VTBL_ENTRY)&_ZN6S210C63v40Ev,
  (VTBL_ENTRY)&_ZN6S210C63v41Ev,
  (VTBL_ENTRY)&_ZN6S210C63v42Ev,
  (VTBL_ENTRY)&_ZN6S210C63v43Ev,
  (VTBL_ENTRY)&_ZN6S210C63v44Ev,
  (VTBL_ENTRY)&_ZN6S210C63v45Ev,
  (VTBL_ENTRY)&_ZN6S210C63v46Ev,
  (VTBL_ENTRY)&_ZN6S210C63v47Ev,
  (VTBL_ENTRY)&_ZN6S210C63v48Ev,
  (VTBL_ENTRY)&_ZN6S210C63v49Ev,
  (VTBL_ENTRY)&_ZN6S210C63v50Ev,
  (VTBL_ENTRY)&_ZN6S210C63v51Ev,
  (VTBL_ENTRY)&_ZN6S210C63v52Ev,
  (VTBL_ENTRY)&_ZN6S210C63v53Ev,
  (VTBL_ENTRY)&_ZN6S210C63v54Ev,
  (VTBL_ENTRY)&_ZN6S210C63v55Ev,
  (VTBL_ENTRY)&_ZN6S210C63v56Ev,
  (VTBL_ENTRY)&_ZN6S210C63v57Ev,
  (VTBL_ENTRY)&_ZN6S210C63v58Ev,
  (VTBL_ENTRY)&_ZN6S210C63v59Ev,
  (VTBL_ENTRY)&_ZN6S210C63v60Ev,
  (VTBL_ENTRY)&_ZN6S210C63v61Ev,
  (VTBL_ENTRY)&_ZN6S210C63v62Ev,
  (VTBL_ENTRY)&_ZN6S210C63v63Ev,
  (VTBL_ENTRY)&_ZN6S210C63v64Ev,
  (VTBL_ENTRY)&_ZN6S210C63v65Ev,
  (VTBL_ENTRY)&_ZN6S210C63v66Ev,
  (VTBL_ENTRY)&_ZN6S210C63v67Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v113Ev,
};
extern VTBL_ENTRY _ZTI9S210C3_nt[];
VTBL_ENTRY *P__ZTI9S210C3_nt = _ZTI9S210C3_nt; 
extern  VTBL_ENTRY _ZTV9S210C3_nt[];
Class_Descriptor cd_S210C3_nt = {  "S210C3_nt", // class name
  bases_S210C3_nt, 3,
  &(vtc_S210C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI9S210C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S210C3_nt),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  S210C2  : S210C3_nt {
  virtual  ~S210C2(); // _ZN6S210C2D1Ev
  virtual void  v114(); // _ZN6S210C24v114Ev
  virtual void  v115(); // _ZN6S210C24v115Ev
  S210C2(); // tgen
};
//SIG(-1 S210C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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] 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 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 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v109 v110 v111 v112 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2}


 S210C2 ::~S210C2(){ note_dtor("S210C2", this);}
void  S210C2 ::v114(){vfunc_called(this, "_ZN6S210C24v114Ev");}
void  S210C2 ::v115(){vfunc_called(this, "_ZN6S210C24v115Ev");}
S210C2 ::S210C2(){ note_ctor("S210C2", this);} // tgen

static void Test_S210C2()
{
  extern Class_Descriptor cd_S210C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S210C2, buf);
    S210C2 *dp, &lv = *(dp=new (buf) S210C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S210C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S210C2)");
    check_base_class_offset(lv, (S210C6*)(S210C5_nt*)(S210C4_nt*)(S210C3_nt*), 0, "S210C2");
    check_base_class_offset(lv, (S210C5_nt*)(S210C4_nt*)(S210C3_nt*), 0, "S210C2");
    check_base_class_offset(lv, (S210C4_nt*)(S210C3_nt*), 0, "S210C2");
    check_base_class_offset(lv, (S210C3_nt*), 0, "S210C2");
    test_class_info(&lv, &cd_S210C2);
    dp->~S210C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS210C2(Test_S210C2, "S210C2", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S210C2C1Ev();
extern void _ZN6S210C2D1Ev();
Name_Map name_map_S210C2[] = {
  NSPAIR(_ZN6S210C2C1Ev),
  NSPAIR(_ZN6S210C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S210C6;
extern VTBL_ENTRY _ZTI6S210C6[];
extern  VTBL_ENTRY _ZTV6S210C6[];
extern Class_Descriptor cd_S210C5_nt;
extern VTBL_ENTRY _ZTI9S210C5_nt[];
extern  VTBL_ENTRY _ZTV9S210C5_nt[];
extern Class_Descriptor cd_S210C4_nt;
extern VTBL_ENTRY _ZTI9S210C4_nt[];
extern  VTBL_ENTRY _ZTV9S210C4_nt[];
extern Class_Descriptor cd_S210C3_nt;
extern VTBL_ENTRY _ZTI9S210C3_nt[];
extern  VTBL_ENTRY _ZTV9S210C3_nt[];
static Base_Class bases_S210C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S210C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S210C5_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_S210C4_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
    3, //immediately_derived
  0, 0},
  {&cd_S210C3_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 _ZTI6S210C2[];
extern void _ZN6S210C2D1Ev();
extern void _ZN6S210C2D0Ev();
extern void _ZN6S210C62v4Ev();
extern void _ZN6S210C62v5Ev();
extern void _ZN6S210C62v6Ev();
extern void _ZN6S210C62v7Ev();
extern void _ZN6S210C62v8Ev();
extern void _ZN6S210C62v9Ev();
extern void _ZN6S210C63v10Ev();
extern void _ZN6S210C63v11Ev();
extern void _ZN6S210C63v12Ev();
extern void _ZN6S210C63v13Ev();
extern void _ZN6S210C63v14Ev();
extern void _ZN6S210C63v15Ev();
extern void _ZN6S210C63v16Ev();
extern void _ZN6S210C63v17Ev();
extern void _ZN6S210C63v18Ev();
extern void _ZN6S210C63v19Ev();
extern void _ZN6S210C63v20Ev();
extern void _ZN6S210C63v21Ev();
extern void _ZN6S210C63v22Ev();
extern void _ZN6S210C63v23Ev();
extern void _ZN6S210C63v24Ev();
extern void _ZN6S210C63v25Ev();
extern void _ZN6S210C63v26Ev();
extern void _ZN6S210C63v27Ev();
extern void _ZN6S210C63v28Ev();
extern void _ZN6S210C63v29Ev();
extern void _ZN6S210C63v30Ev();
extern void _ZN6S210C63v31Ev();
extern void _ZN6S210C63v32Ev();
extern void _ZN6S210C63v33Ev();
extern void _ZN6S210C63v34Ev();
extern void _ZN6S210C63v35Ev();
extern void _ZN6S210C63v36Ev();
extern void _ZN6S210C63v37Ev();
extern void _ZN6S210C63v38Ev();
extern void _ZN6S210C63v39Ev();
extern void _ZN6S210C63v40Ev();
extern void _ZN6S210C63v41Ev();
extern void _ZN6S210C63v42Ev();
extern void _ZN6S210C63v43Ev();
extern void _ZN6S210C63v44Ev();
extern void _ZN6S210C63v45Ev();
extern void _ZN6S210C63v46Ev();
extern void _ZN6S210C63v47Ev();
extern void _ZN6S210C63v48Ev();
extern void _ZN6S210C63v49Ev();
extern void _ZN6S210C63v50Ev();
extern void _ZN6S210C63v51Ev();
extern void _ZN6S210C63v52Ev();
extern void _ZN6S210C63v53Ev();
extern void _ZN6S210C63v54Ev();
extern void _ZN6S210C63v55Ev();
extern void _ZN6S210C63v56Ev();
extern void _ZN6S210C63v57Ev();
extern void _ZN6S210C63v58Ev();
extern void _ZN6S210C63v59Ev();
extern void _ZN6S210C63v60Ev();
extern void _ZN6S210C63v61Ev();
extern void _ZN6S210C63v62Ev();
extern void _ZN6S210C63v63Ev();
extern void _ZN6S210C63v64Ev();
extern void _ZN6S210C63v65Ev();
extern void _ZN6S210C63v66Ev();
extern void _ZN6S210C63v67Ev();
extern void _ZN9S210C5_nt3v68Ev();
extern void _ZN9S210C5_nt3v69Ev();
extern void _ZN9S210C5_nt3v70Ev();
extern void _ZN9S210C5_nt3v71Ev();
extern void _ZN9S210C5_nt3v72Ev();
extern void _ZN9S210C5_nt3v73Ev();
extern void _ZN9S210C5_nt3v74Ev();
extern void _ZN9S210C5_nt3v75Ev();
extern void _ZN9S210C5_nt3v76Ev();
extern void _ZN9S210C5_nt3v77Ev();
extern void _ZN9S210C5_nt3v78Ev();
extern void _ZN9S210C5_nt3v79Ev();
extern void _ZN9S210C5_nt3v80Ev();
extern void _ZN9S210C5_nt3v81Ev();
extern void _ZN9S210C5_nt3v82Ev();
extern void _ZN9S210C5_nt3v83Ev();
extern void _ZN9S210C5_nt3v84Ev();
extern void _ZN9S210C5_nt3v85Ev();
extern void _ZN9S210C5_nt3v86Ev();
extern void _ZN9S210C5_nt3v87Ev();
extern void _ZN9S210C5_nt3v88Ev();
extern void _ZN9S210C5_nt3v89Ev();
extern void _ZN9S210C4_nt3v90Ev();
extern void _ZN9S210C4_nt3v91Ev();
extern void _ZN9S210C4_nt3v92Ev();
extern void _ZN9S210C4_nt3v93Ev();
extern void _ZN9S210C4_nt3v94Ev();
extern void _ZN9S210C4_nt3v95Ev();
extern void _ZN9S210C4_nt3v96Ev();
extern void _ZN9S210C4_nt3v97Ev();
extern void _ZN9S210C4_nt3v98Ev();
extern void _ZN9S210C4_nt3v99Ev();
extern void _ZN9S210C4_nt4v100Ev();
extern void _ZN9S210C4_nt4v101Ev();
extern void _ZN9S210C4_nt4v102Ev();
extern void _ZN9S210C4_nt4v103Ev();
extern void _ZN9S210C4_nt4v104Ev();
extern void _ZN9S210C4_nt4v105Ev();
extern void _ZN9S210C4_nt4v106Ev();
extern void _ZN9S210C4_nt4v107Ev();
extern void _ZN9S210C4_nt4v108Ev();
extern void _ZN9S210C4_nt4v109Ev();
extern void _ZN9S210C3_nt4v110Ev();
extern void _ZN9S210C3_nt4v111Ev();
extern void _ZN9S210C3_nt4v112Ev();
extern void _ZN9S210C3_nt4v113Ev();
extern void _ZN6S210C24v114Ev();
extern void _ZN6S210C24v115Ev();
static  VTBL_ENTRY vtc_S210C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S210C2[0]),
  (VTBL_ENTRY)&_ZN6S210C2D1Ev,
  (VTBL_ENTRY)&_ZN6S210C2D0Ev,
  (VTBL_ENTRY)&_ZN6S210C62v4Ev,
  (VTBL_ENTRY)&_ZN6S210C62v5Ev,
  (VTBL_ENTRY)&_ZN6S210C62v6Ev,
  (VTBL_ENTRY)&_ZN6S210C62v7Ev,
  (VTBL_ENTRY)&_ZN6S210C62v8Ev,
  (VTBL_ENTRY)&_ZN6S210C62v9Ev,
  (VTBL_ENTRY)&_ZN6S210C63v10Ev,
  (VTBL_ENTRY)&_ZN6S210C63v11Ev,
  (VTBL_ENTRY)&_ZN6S210C63v12Ev,
  (VTBL_ENTRY)&_ZN6S210C63v13Ev,
  (VTBL_ENTRY)&_ZN6S210C63v14Ev,
  (VTBL_ENTRY)&_ZN6S210C63v15Ev,
  (VTBL_ENTRY)&_ZN6S210C63v16Ev,
  (VTBL_ENTRY)&_ZN6S210C63v17Ev,
  (VTBL_ENTRY)&_ZN6S210C63v18Ev,
  (VTBL_ENTRY)&_ZN6S210C63v19Ev,
  (VTBL_ENTRY)&_ZN6S210C63v20Ev,
  (VTBL_ENTRY)&_ZN6S210C63v21Ev,
  (VTBL_ENTRY)&_ZN6S210C63v22Ev,
  (VTBL_ENTRY)&_ZN6S210C63v23Ev,
  (VTBL_ENTRY)&_ZN6S210C63v24Ev,
  (VTBL_ENTRY)&_ZN6S210C63v25Ev,
  (VTBL_ENTRY)&_ZN6S210C63v26Ev,
  (VTBL_ENTRY)&_ZN6S210C63v27Ev,
  (VTBL_ENTRY)&_ZN6S210C63v28Ev,
  (VTBL_ENTRY)&_ZN6S210C63v29Ev,
  (VTBL_ENTRY)&_ZN6S210C63v30Ev,
  (VTBL_ENTRY)&_ZN6S210C63v31Ev,
  (VTBL_ENTRY)&_ZN6S210C63v32Ev,
  (VTBL_ENTRY)&_ZN6S210C63v33Ev,
  (VTBL_ENTRY)&_ZN6S210C63v34Ev,
  (VTBL_ENTRY)&_ZN6S210C63v35Ev,
  (VTBL_ENTRY)&_ZN6S210C63v36Ev,
  (VTBL_ENTRY)&_ZN6S210C63v37Ev,
  (VTBL_ENTRY)&_ZN6S210C63v38Ev,
  (VTBL_ENTRY)&_ZN6S210C63v39Ev,
  (VTBL_ENTRY)&_ZN6S210C63v40Ev,
  (VTBL_ENTRY)&_ZN6S210C63v41Ev,
  (VTBL_ENTRY)&_ZN6S210C63v42Ev,
  (VTBL_ENTRY)&_ZN6S210C63v43Ev,
  (VTBL_ENTRY)&_ZN6S210C63v44Ev,
  (VTBL_ENTRY)&_ZN6S210C63v45Ev,
  (VTBL_ENTRY)&_ZN6S210C63v46Ev,
  (VTBL_ENTRY)&_ZN6S210C63v47Ev,
  (VTBL_ENTRY)&_ZN6S210C63v48Ev,
  (VTBL_ENTRY)&_ZN6S210C63v49Ev,
  (VTBL_ENTRY)&_ZN6S210C63v50Ev,
  (VTBL_ENTRY)&_ZN6S210C63v51Ev,
  (VTBL_ENTRY)&_ZN6S210C63v52Ev,
  (VTBL_ENTRY)&_ZN6S210C63v53Ev,
  (VTBL_ENTRY)&_ZN6S210C63v54Ev,
  (VTBL_ENTRY)&_ZN6S210C63v55Ev,
  (VTBL_ENTRY)&_ZN6S210C63v56Ev,
  (VTBL_ENTRY)&_ZN6S210C63v57Ev,
  (VTBL_ENTRY)&_ZN6S210C63v58Ev,
  (VTBL_ENTRY)&_ZN6S210C63v59Ev,
  (VTBL_ENTRY)&_ZN6S210C63v60Ev,
  (VTBL_ENTRY)&_ZN6S210C63v61Ev,
  (VTBL_ENTRY)&_ZN6S210C63v62Ev,
  (VTBL_ENTRY)&_ZN6S210C63v63Ev,
  (VTBL_ENTRY)&_ZN6S210C63v64Ev,
  (VTBL_ENTRY)&_ZN6S210C63v65Ev,
  (VTBL_ENTRY)&_ZN6S210C63v66Ev,
  (VTBL_ENTRY)&_ZN6S210C63v67Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN6S210C24v114Ev,
  (VTBL_ENTRY)&_ZN6S210C24v115Ev,
};
extern VTBL_ENTRY _ZTI6S210C2[];
extern  VTBL_ENTRY _ZTV6S210C2[];
Class_Descriptor cd_S210C2 = {  "S210C2", // class name
  bases_S210C2, 4,
  &(vtc_S210C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S210C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S210C2),116, //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  S210C1  : S210C2 {
  unsigned int s210c1f0:1;
  int s210c1f1[2];
  virtual  ~S210C1(); // _ZN6S210C1D1Ev
  virtual void  v1(); // _ZN6S210C12v1Ev
  virtual void  v2(); // _ZN6S210C12v2Ev
  virtual void  v3(); // _ZN6S210C12v3Ev
  S210C1(); // tgen
};
//SIG(1 S210C1) 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 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v114 v115} vd v1 v2 v3 Fi:1 Fi[2]}


 S210C1 ::~S210C1(){ note_dtor("S210C1", this);}
void  S210C1 ::v1(){vfunc_called(this, "_ZN6S210C12v1Ev");}
void  S210C1 ::v2(){vfunc_called(this, "_ZN6S210C12v2Ev");}
void  S210C1 ::v3(){vfunc_called(this, "_ZN6S210C12v3Ev");}
S210C1 ::S210C1(){ note_ctor("S210C1", this);} // tgen

static void Test_S210C1()
{
  extern Class_Descriptor cd_S210C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,59)];
    init_test(&cd_S210C1, buf);
    S210C1 *dp, &lv = *(dp=new (buf) S210C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,232), "sizeof(S210C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S210C1)");
    check_base_class_offset(lv, (S210C6*)(S210C5_nt*)(S210C4_nt*)(S210C3_nt*)(S210C2*), 0, "S210C1");
    check_base_class_offset(lv, (S210C5_nt*)(S210C4_nt*)(S210C3_nt*)(S210C2*), 0, "S210C1");
    check_base_class_offset(lv, (S210C4_nt*)(S210C3_nt*)(S210C2*), 0, "S210C1");
    check_base_class_offset(lv, (S210C3_nt*)(S210C2*), 0, "S210C1");
    check_base_class_offset(lv, (S210C2*), 0, "S210C1");
    set_bf_and_test(lv, s210c1f0, ABISELECT(296,220), 0, 1, 1, "S210C1");
    check_field_offset(lv, s210c1f1, ABISELECT(300,224), "S210C1.s210c1f1");
    test_class_info(&lv, &cd_S210C1);
    dp->~S210C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS210C1(Test_S210C1, "S210C1", ABISELECT(312,232));

#else // __cplusplus

extern void _ZN6S210C1C1Ev();
extern void _ZN6S210C1D1Ev();
Name_Map name_map_S210C1[] = {
  NSPAIR(_ZN6S210C1C1Ev),
  NSPAIR(_ZN6S210C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S210C6;
extern VTBL_ENTRY _ZTI6S210C6[];
extern  VTBL_ENTRY _ZTV6S210C6[];
extern Class_Descriptor cd_S210C5_nt;
extern VTBL_ENTRY _ZTI9S210C5_nt[];
extern  VTBL_ENTRY _ZTV9S210C5_nt[];
extern Class_Descriptor cd_S210C4_nt;
extern VTBL_ENTRY _ZTI9S210C4_nt[];
extern  VTBL_ENTRY _ZTV9S210C4_nt[];
extern Class_Descriptor cd_S210C3_nt;
extern VTBL_ENTRY _ZTI9S210C3_nt[];
extern  VTBL_ENTRY _ZTV9S210C3_nt[];
extern Class_Descriptor cd_S210C2;
extern VTBL_ENTRY _ZTI6S210C2[];
extern  VTBL_ENTRY _ZTV6S210C2[];
static Base_Class bases_S210C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S210C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S210C5_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_S210C4_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
    3, //immediately_derived
  0, 0},
  {&cd_S210C3_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
    4, //immediately_derived
  0, 0},
  {&cd_S210C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S210C1[];
extern void _ZN6S210C1D1Ev();
extern void _ZN6S210C1D0Ev();
extern void _ZN6S210C62v4Ev();
extern void _ZN6S210C62v5Ev();
extern void _ZN6S210C62v6Ev();
extern void _ZN6S210C62v7Ev();
extern void _ZN6S210C62v8Ev();
extern void _ZN6S210C62v9Ev();
extern void _ZN6S210C63v10Ev();
extern void _ZN6S210C63v11Ev();
extern void _ZN6S210C63v12Ev();
extern void _ZN6S210C63v13Ev();
extern void _ZN6S210C63v14Ev();
extern void _ZN6S210C63v15Ev();
extern void _ZN6S210C63v16Ev();
extern void _ZN6S210C63v17Ev();
extern void _ZN6S210C63v18Ev();
extern void _ZN6S210C63v19Ev();
extern void _ZN6S210C63v20Ev();
extern void _ZN6S210C63v21Ev();
extern void _ZN6S210C63v22Ev();
extern void _ZN6S210C63v23Ev();
extern void _ZN6S210C63v24Ev();
extern void _ZN6S210C63v25Ev();
extern void _ZN6S210C63v26Ev();
extern void _ZN6S210C63v27Ev();
extern void _ZN6S210C63v28Ev();
extern void _ZN6S210C63v29Ev();
extern void _ZN6S210C63v30Ev();
extern void _ZN6S210C63v31Ev();
extern void _ZN6S210C63v32Ev();
extern void _ZN6S210C63v33Ev();
extern void _ZN6S210C63v34Ev();
extern void _ZN6S210C63v35Ev();
extern void _ZN6S210C63v36Ev();
extern void _ZN6S210C63v37Ev();
extern void _ZN6S210C63v38Ev();
extern void _ZN6S210C63v39Ev();
extern void _ZN6S210C63v40Ev();
extern void _ZN6S210C63v41Ev();
extern void _ZN6S210C63v42Ev();
extern void _ZN6S210C63v43Ev();
extern void _ZN6S210C63v44Ev();
extern void _ZN6S210C63v45Ev();
extern void _ZN6S210C63v46Ev();
extern void _ZN6S210C63v47Ev();
extern void _ZN6S210C63v48Ev();
extern void _ZN6S210C63v49Ev();
extern void _ZN6S210C63v50Ev();
extern void _ZN6S210C63v51Ev();
extern void _ZN6S210C63v52Ev();
extern void _ZN6S210C63v53Ev();
extern void _ZN6S210C63v54Ev();
extern void _ZN6S210C63v55Ev();
extern void _ZN6S210C63v56Ev();
extern void _ZN6S210C63v57Ev();
extern void _ZN6S210C63v58Ev();
extern void _ZN6S210C63v59Ev();
extern void _ZN6S210C63v60Ev();
extern void _ZN6S210C63v61Ev();
extern void _ZN6S210C63v62Ev();
extern void _ZN6S210C63v63Ev();
extern void _ZN6S210C63v64Ev();
extern void _ZN6S210C63v65Ev();
extern void _ZN6S210C63v66Ev();
extern void _ZN6S210C63v67Ev();
extern void _ZN9S210C5_nt3v68Ev();
extern void _ZN9S210C5_nt3v69Ev();
extern void _ZN9S210C5_nt3v70Ev();
extern void _ZN9S210C5_nt3v71Ev();
extern void _ZN9S210C5_nt3v72Ev();
extern void _ZN9S210C5_nt3v73Ev();
extern void _ZN9S210C5_nt3v74Ev();
extern void _ZN9S210C5_nt3v75Ev();
extern void _ZN9S210C5_nt3v76Ev();
extern void _ZN9S210C5_nt3v77Ev();
extern void _ZN9S210C5_nt3v78Ev();
extern void _ZN9S210C5_nt3v79Ev();
extern void _ZN9S210C5_nt3v80Ev();
extern void _ZN9S210C5_nt3v81Ev();
extern void _ZN9S210C5_nt3v82Ev();
extern void _ZN9S210C5_nt3v83Ev();
extern void _ZN9S210C5_nt3v84Ev();
extern void _ZN9S210C5_nt3v85Ev();
extern void _ZN9S210C5_nt3v86Ev();
extern void _ZN9S210C5_nt3v87Ev();
extern void _ZN9S210C5_nt3v88Ev();
extern void _ZN9S210C5_nt3v89Ev();
extern void _ZN9S210C4_nt3v90Ev();
extern void _ZN9S210C4_nt3v91Ev();
extern void _ZN9S210C4_nt3v92Ev();
extern void _ZN9S210C4_nt3v93Ev();
extern void _ZN9S210C4_nt3v94Ev();
extern void _ZN9S210C4_nt3v95Ev();
extern void _ZN9S210C4_nt3v96Ev();
extern void _ZN9S210C4_nt3v97Ev();
extern void _ZN9S210C4_nt3v98Ev();
extern void _ZN9S210C4_nt3v99Ev();
extern void _ZN9S210C4_nt4v100Ev();
extern void _ZN9S210C4_nt4v101Ev();
extern void _ZN9S210C4_nt4v102Ev();
extern void _ZN9S210C4_nt4v103Ev();
extern void _ZN9S210C4_nt4v104Ev();
extern void _ZN9S210C4_nt4v105Ev();
extern void _ZN9S210C4_nt4v106Ev();
extern void _ZN9S210C4_nt4v107Ev();
extern void _ZN9S210C4_nt4v108Ev();
extern void _ZN9S210C4_nt4v109Ev();
extern void _ZN9S210C3_nt4v110Ev();
extern void _ZN9S210C3_nt4v111Ev();
extern void _ZN9S210C3_nt4v112Ev();
extern void _ZN9S210C3_nt4v113Ev();
extern void _ZN6S210C24v114Ev();
extern void _ZN6S210C24v115Ev();
extern void _ZN6S210C12v1Ev();
extern void _ZN6S210C12v2Ev();
extern void _ZN6S210C12v3Ev();
static  VTBL_ENTRY vtc_S210C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S210C1[0]),
  (VTBL_ENTRY)&_ZN6S210C1D1Ev,
  (VTBL_ENTRY)&_ZN6S210C1D0Ev,
  (VTBL_ENTRY)&_ZN6S210C62v4Ev,
  (VTBL_ENTRY)&_ZN6S210C62v5Ev,
  (VTBL_ENTRY)&_ZN6S210C62v6Ev,
  (VTBL_ENTRY)&_ZN6S210C62v7Ev,
  (VTBL_ENTRY)&_ZN6S210C62v8Ev,
  (VTBL_ENTRY)&_ZN6S210C62v9Ev,
  (VTBL_ENTRY)&_ZN6S210C63v10Ev,
  (VTBL_ENTRY)&_ZN6S210C63v11Ev,
  (VTBL_ENTRY)&_ZN6S210C63v12Ev,
  (VTBL_ENTRY)&_ZN6S210C63v13Ev,
  (VTBL_ENTRY)&_ZN6S210C63v14Ev,
  (VTBL_ENTRY)&_ZN6S210C63v15Ev,
  (VTBL_ENTRY)&_ZN6S210C63v16Ev,
  (VTBL_ENTRY)&_ZN6S210C63v17Ev,
  (VTBL_ENTRY)&_ZN6S210C63v18Ev,
  (VTBL_ENTRY)&_ZN6S210C63v19Ev,
  (VTBL_ENTRY)&_ZN6S210C63v20Ev,
  (VTBL_ENTRY)&_ZN6S210C63v21Ev,
  (VTBL_ENTRY)&_ZN6S210C63v22Ev,
  (VTBL_ENTRY)&_ZN6S210C63v23Ev,
  (VTBL_ENTRY)&_ZN6S210C63v24Ev,
  (VTBL_ENTRY)&_ZN6S210C63v25Ev,
  (VTBL_ENTRY)&_ZN6S210C63v26Ev,
  (VTBL_ENTRY)&_ZN6S210C63v27Ev,
  (VTBL_ENTRY)&_ZN6S210C63v28Ev,
  (VTBL_ENTRY)&_ZN6S210C63v29Ev,
  (VTBL_ENTRY)&_ZN6S210C63v30Ev,
  (VTBL_ENTRY)&_ZN6S210C63v31Ev,
  (VTBL_ENTRY)&_ZN6S210C63v32Ev,
  (VTBL_ENTRY)&_ZN6S210C63v33Ev,
  (VTBL_ENTRY)&_ZN6S210C63v34Ev,
  (VTBL_ENTRY)&_ZN6S210C63v35Ev,
  (VTBL_ENTRY)&_ZN6S210C63v36Ev,
  (VTBL_ENTRY)&_ZN6S210C63v37Ev,
  (VTBL_ENTRY)&_ZN6S210C63v38Ev,
  (VTBL_ENTRY)&_ZN6S210C63v39Ev,
  (VTBL_ENTRY)&_ZN6S210C63v40Ev,
  (VTBL_ENTRY)&_ZN6S210C63v41Ev,
  (VTBL_ENTRY)&_ZN6S210C63v42Ev,
  (VTBL_ENTRY)&_ZN6S210C63v43Ev,
  (VTBL_ENTRY)&_ZN6S210C63v44Ev,
  (VTBL_ENTRY)&_ZN6S210C63v45Ev,
  (VTBL_ENTRY)&_ZN6S210C63v46Ev,
  (VTBL_ENTRY)&_ZN6S210C63v47Ev,
  (VTBL_ENTRY)&_ZN6S210C63v48Ev,
  (VTBL_ENTRY)&_ZN6S210C63v49Ev,
  (VTBL_ENTRY)&_ZN6S210C63v50Ev,
  (VTBL_ENTRY)&_ZN6S210C63v51Ev,
  (VTBL_ENTRY)&_ZN6S210C63v52Ev,
  (VTBL_ENTRY)&_ZN6S210C63v53Ev,
  (VTBL_ENTRY)&_ZN6S210C63v54Ev,
  (VTBL_ENTRY)&_ZN6S210C63v55Ev,
  (VTBL_ENTRY)&_ZN6S210C63v56Ev,
  (VTBL_ENTRY)&_ZN6S210C63v57Ev,
  (VTBL_ENTRY)&_ZN6S210C63v58Ev,
  (VTBL_ENTRY)&_ZN6S210C63v59Ev,
  (VTBL_ENTRY)&_ZN6S210C63v60Ev,
  (VTBL_ENTRY)&_ZN6S210C63v61Ev,
  (VTBL_ENTRY)&_ZN6S210C63v62Ev,
  (VTBL_ENTRY)&_ZN6S210C63v63Ev,
  (VTBL_ENTRY)&_ZN6S210C63v64Ev,
  (VTBL_ENTRY)&_ZN6S210C63v65Ev,
  (VTBL_ENTRY)&_ZN6S210C63v66Ev,
  (VTBL_ENTRY)&_ZN6S210C63v67Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S210C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S210C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S210C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN6S210C24v114Ev,
  (VTBL_ENTRY)&_ZN6S210C24v115Ev,
  (VTBL_ENTRY)&_ZN6S210C12v1Ev,
  (VTBL_ENTRY)&_ZN6S210C12v2Ev,
  (VTBL_ENTRY)&_ZN6S210C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S210C1[];
extern  VTBL_ENTRY _ZTV6S210C1[];
Class_Descriptor cd_S210C1 = {  "S210C1", // class name
  bases_S210C1, 5,
  &(vtc_S210C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,232), // object size
  NSPAIRA(_ZTI6S210C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S210C1),119, //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  S209C6  {
  int s209c6f0;
  __tsi64 s209c6f1;
  void *s209c6f2[4];
  int s209c6f3[2];
  void *s209c6f4;
  ::S1503C5_nt s209c6f5;
  void *s209c6f6[2];
  virtual  ~S209C6(); // _ZN6S209C6D1Ev
  virtual void  v4(); // _ZN6S209C62v4Ev
  virtual void  v5(); // _ZN6S209C62v5Ev
  virtual void  v6(); // _ZN6S209C62v6Ev
  virtual void  v7(); // _ZN6S209C62v7Ev
  virtual void  v8(); // _ZN6S209C62v8Ev
  virtual void  v9(); // _ZN6S209C62v9Ev
  virtual void  v10(); // _ZN6S209C63v10Ev
  virtual void  v11(); // _ZN6S209C63v11Ev
  virtual void  v12(); // _ZN6S209C63v12Ev
  virtual void  v13(); // _ZN6S209C63v13Ev
  virtual void  v14(); // _ZN6S209C63v14Ev
  virtual void  v15(); // _ZN6S209C63v15Ev
  virtual void  v16(); // _ZN6S209C63v16Ev
  virtual void  v17(); // _ZN6S209C63v17Ev
  virtual void  v18(); // _ZN6S209C63v18Ev
  virtual void  v19(); // _ZN6S209C63v19Ev
  virtual void  v20(); // _ZN6S209C63v20Ev
  virtual void  v21(); // _ZN6S209C63v21Ev
  virtual void  v22(); // _ZN6S209C63v22Ev
  virtual void  v23(); // _ZN6S209C63v23Ev
  virtual void  v24(); // _ZN6S209C63v24Ev
  virtual void  v25(); // _ZN6S209C63v25Ev
  virtual void  v26(); // _ZN6S209C63v26Ev
  virtual void  v27(); // _ZN6S209C63v27Ev
  virtual void  v28(); // _ZN6S209C63v28Ev
  virtual void  v29(); // _ZN6S209C63v29Ev
  virtual void  v30(); // _ZN6S209C63v30Ev
  virtual void  v31(); // _ZN6S209C63v31Ev
  virtual void  v32(); // _ZN6S209C63v32Ev
  virtual void  v33(); // _ZN6S209C63v33Ev
  virtual void  v34(); // _ZN6S209C63v34Ev
  virtual void  v35(); // _ZN6S209C63v35Ev
  virtual void  v36(); // _ZN6S209C63v36Ev
  virtual void  v37(); // _ZN6S209C63v37Ev
  virtual void  v38(); // _ZN6S209C63v38Ev
  virtual void  v39(); // _ZN6S209C63v39Ev
  virtual void  v40(); // _ZN6S209C63v40Ev
  virtual void  v41(); // _ZN6S209C63v41Ev
  virtual void  v42(); // _ZN6S209C63v42Ev
  virtual void  v43(); // _ZN6S209C63v43Ev
  virtual void  v44(); // _ZN6S209C63v44Ev
  virtual void  v45(); // _ZN6S209C63v45Ev
  virtual void  v46(); // _ZN6S209C63v46Ev
  virtual void  v47(); // _ZN6S209C63v47Ev
  virtual void  v48(); // _ZN6S209C63v48Ev
  virtual void  v49(); // _ZN6S209C63v49Ev
  virtual void  v50(); // _ZN6S209C63v50Ev
  virtual void  v51(); // _ZN6S209C63v51Ev
  virtual void  v52(); // _ZN6S209C63v52Ev
  virtual void  v53(); // _ZN6S209C63v53Ev
  virtual void  v54(); // _ZN6S209C63v54Ev
  virtual void  v55(); // _ZN6S209C63v55Ev
  virtual void  v56(); // _ZN6S209C63v56Ev
  virtual void  v57(); // _ZN6S209C63v57Ev
  virtual void  v58(); // _ZN6S209C63v58Ev
  virtual void  v59(); // _ZN6S209C63v59Ev
  virtual void  v60(); // _ZN6S209C63v60Ev
  virtual void  v61(); // _ZN6S209C63v61Ev
  virtual void  v62(); // _ZN6S209C63v62Ev
  virtual void  v63(); // _ZN6S209C63v63Ev
  virtual void  v64(); // _ZN6S209C63v64Ev
  virtual void  v65(); // _ZN6S209C63v65Ev
  virtual void  v66(); // _ZN6S209C63v66Ev
  virtual void  v67(); // _ZN6S209C63v67Ev
  S209C6(); // tgen
};
//SIG(-1 S209C6) 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]}


 S209C6 ::~S209C6(){ note_dtor("S209C6", this);}
void  S209C6 ::v4(){vfunc_called(this, "_ZN6S209C62v4Ev");}
void  S209C6 ::v5(){vfunc_called(this, "_ZN6S209C62v5Ev");}
void  S209C6 ::v6(){vfunc_called(this, "_ZN6S209C62v6Ev");}
void  S209C6 ::v7(){vfunc_called(this, "_ZN6S209C62v7Ev");}
void  S209C6 ::v8(){vfunc_called(this, "_ZN6S209C62v8Ev");}
void  S209C6 ::v9(){vfunc_called(this, "_ZN6S209C62v9Ev");}
void  S209C6 ::v10(){vfunc_called(this, "_ZN6S209C63v10Ev");}
void  S209C6 ::v11(){vfunc_called(this, "_ZN6S209C63v11Ev");}
void  S209C6 ::v12(){vfunc_called(this, "_ZN6S209C63v12Ev");}
void  S209C6 ::v13(){vfunc_called(this, "_ZN6S209C63v13Ev");}
void  S209C6 ::v14(){vfunc_called(this, "_ZN6S209C63v14Ev");}
void  S209C6 ::v15(){vfunc_called(this, "_ZN6S209C63v15Ev");}
void  S209C6 ::v16(){vfunc_called(this, "_ZN6S209C63v16Ev");}
void  S209C6 ::v17(){vfunc_called(this, "_ZN6S209C63v17Ev");}
void  S209C6 ::v18(){vfunc_called(this, "_ZN6S209C63v18Ev");}
void  S209C6 ::v19(){vfunc_called(this, "_ZN6S209C63v19Ev");}
void  S209C6 ::v20(){vfunc_called(this, "_ZN6S209C63v20Ev");}
void  S209C6 ::v21(){vfunc_called(this, "_ZN6S209C63v21Ev");}
void  S209C6 ::v22(){vfunc_called(this, "_ZN6S209C63v22Ev");}
void  S209C6 ::v23(){vfunc_called(this, "_ZN6S209C63v23Ev");}
void  S209C6 ::v24(){vfunc_called(this, "_ZN6S209C63v24Ev");}
void  S209C6 ::v25(){vfunc_called(this, "_ZN6S209C63v25Ev");}
void  S209C6 ::v26(){vfunc_called(this, "_ZN6S209C63v26Ev");}
void  S209C6 ::v27(){vfunc_called(this, "_ZN6S209C63v27Ev");}
void  S209C6 ::v28(){vfunc_called(this, "_ZN6S209C63v28Ev");}
void  S209C6 ::v29(){vfunc_called(this, "_ZN6S209C63v29Ev");}
void  S209C6 ::v30(){vfunc_called(this, "_ZN6S209C63v30Ev");}
void  S209C6 ::v31(){vfunc_called(this, "_ZN6S209C63v31Ev");}
void  S209C6 ::v32(){vfunc_called(this, "_ZN6S209C63v32Ev");}
void  S209C6 ::v33(){vfunc_called(this, "_ZN6S209C63v33Ev");}
void  S209C6 ::v34(){vfunc_called(this, "_ZN6S209C63v34Ev");}
void  S209C6 ::v35(){vfunc_called(this, "_ZN6S209C63v35Ev");}
void  S209C6 ::v36(){vfunc_called(this, "_ZN6S209C63v36Ev");}
void  S209C6 ::v37(){vfunc_called(this, "_ZN6S209C63v37Ev");}
void  S209C6 ::v38(){vfunc_called(this, "_ZN6S209C63v38Ev");}
void  S209C6 ::v39(){vfunc_called(this, "_ZN6S209C63v39Ev");}
void  S209C6 ::v40(){vfunc_called(this, "_ZN6S209C63v40Ev");}
void  S209C6 ::v41(){vfunc_called(this, "_ZN6S209C63v41Ev");}
void  S209C6 ::v42(){vfunc_called(this, "_ZN6S209C63v42Ev");}
void  S209C6 ::v43(){vfunc_called(this, "_ZN6S209C63v43Ev");}
void  S209C6 ::v44(){vfunc_called(this, "_ZN6S209C63v44Ev");}
void  S209C6 ::v45(){vfunc_called(this, "_ZN6S209C63v45Ev");}
void  S209C6 ::v46(){vfunc_called(this, "_ZN6S209C63v46Ev");}
void  S209C6 ::v47(){vfunc_called(this, "_ZN6S209C63v47Ev");}
void  S209C6 ::v48(){vfunc_called(this, "_ZN6S209C63v48Ev");}
void  S209C6 ::v49(){vfunc_called(this, "_ZN6S209C63v49Ev");}
void  S209C6 ::v50(){vfunc_called(this, "_ZN6S209C63v50Ev");}
void  S209C6 ::v51(){vfunc_called(this, "_ZN6S209C63v51Ev");}
void  S209C6 ::v52(){vfunc_called(this, "_ZN6S209C63v52Ev");}
void  S209C6 ::v53(){vfunc_called(this, "_ZN6S209C63v53Ev");}
void  S209C6 ::v54(){vfunc_called(this, "_ZN6S209C63v54Ev");}
void  S209C6 ::v55(){vfunc_called(this, "_ZN6S209C63v55Ev");}
void  S209C6 ::v56(){vfunc_called(this, "_ZN6S209C63v56Ev");}
void  S209C6 ::v57(){vfunc_called(this, "_ZN6S209C63v57Ev");}
void  S209C6 ::v58(){vfunc_called(this, "_ZN6S209C63v58Ev");}
void  S209C6 ::v59(){vfunc_called(this, "_ZN6S209C63v59Ev");}
void  S209C6 ::v60(){vfunc_called(this, "_ZN6S209C63v60Ev");}
void  S209C6 ::v61(){vfunc_called(this, "_ZN6S209C63v61Ev");}
void  S209C6 ::v62(){vfunc_called(this, "_ZN6S209C63v62Ev");}
void  S209C6 ::v63(){vfunc_called(this, "_ZN6S209C63v63Ev");}
void  S209C6 ::v64(){vfunc_called(this, "_ZN6S209C63v64Ev");}
void  S209C6 ::v65(){vfunc_called(this, "_ZN6S209C63v65Ev");}
void  S209C6 ::v66(){vfunc_called(this, "_ZN6S209C63v66Ev");}
void  S209C6 ::v67(){vfunc_called(this, "_ZN6S209C63v67Ev");}
S209C6 ::S209C6(){ note_ctor("S209C6", this);} // tgen

static void Test_S209C6()
{
  extern Class_Descriptor cd_S209C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S209C6, buf);
    S209C6 *dp, &lv = *(dp=new (buf) S209C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S209C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S209C6)");
    check_field_offset(lv, s209c6f0, ABISELECT(8,4), "S209C6.s209c6f0");
    check_field_offset(lv, s209c6f1, ABISELECT(16,8), "S209C6.s209c6f1");
    check_field_offset(lv, s209c6f2, ABISELECT(24,16), "S209C6.s209c6f2");
    check_field_offset(lv, s209c6f3, ABISELECT(56,32), "S209C6.s209c6f3");
    check_field_offset(lv, s209c6f4, ABISELECT(64,40), "S209C6.s209c6f4");
    check_field_offset(lv, s209c6f5, ABISELECT(72,44), "S209C6.s209c6f5");
    check_field_offset(lv, s209c6f6, ABISELECT(80,52), "S209C6.s209c6f6");
    test_class_info(&lv, &cd_S209C6);
    dp->~S209C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS209C6(Test_S209C6, "S209C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S209C6C1Ev();
extern void _ZN6S209C6D1Ev();
Name_Map name_map_S209C6[] = {
  NSPAIR(_ZN6S209C6C1Ev),
  NSPAIR(_ZN6S209C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S209C6[];
extern void _ZN6S209C6D1Ev();
extern void _ZN6S209C6D0Ev();
extern void _ZN6S209C62v4Ev();
extern void _ZN6S209C62v5Ev();
extern void _ZN6S209C62v6Ev();
extern void _ZN6S209C62v7Ev();
extern void _ZN6S209C62v8Ev();
extern void _ZN6S209C62v9Ev();
extern void _ZN6S209C63v10Ev();
extern void _ZN6S209C63v11Ev();
extern void _ZN6S209C63v12Ev();
extern void _ZN6S209C63v13Ev();
extern void _ZN6S209C63v14Ev();
extern void _ZN6S209C63v15Ev();
extern void _ZN6S209C63v16Ev();
extern void _ZN6S209C63v17Ev();
extern void _ZN6S209C63v18Ev();
extern void _ZN6S209C63v19Ev();
extern void _ZN6S209C63v20Ev();
extern void _ZN6S209C63v21Ev();
extern void _ZN6S209C63v22Ev();
extern void _ZN6S209C63v23Ev();
extern void _ZN6S209C63v24Ev();
extern void _ZN6S209C63v25Ev();
extern void _ZN6S209C63v26Ev();
extern void _ZN6S209C63v27Ev();
extern void _ZN6S209C63v28Ev();
extern void _ZN6S209C63v29Ev();
extern void _ZN6S209C63v30Ev();
extern void _ZN6S209C63v31Ev();
extern void _ZN6S209C63v32Ev();
extern void _ZN6S209C63v33Ev();
extern void _ZN6S209C63v34Ev();
extern void _ZN6S209C63v35Ev();
extern void _ZN6S209C63v36Ev();
extern void _ZN6S209C63v37Ev();
extern void _ZN6S209C63v38Ev();
extern void _ZN6S209C63v39Ev();
extern void _ZN6S209C63v40Ev();
extern void _ZN6S209C63v41Ev();
extern void _ZN6S209C63v42Ev();
extern void _ZN6S209C63v43Ev();
extern void _ZN6S209C63v44Ev();
extern void _ZN6S209C63v45Ev();
extern void _ZN6S209C63v46Ev();
extern void _ZN6S209C63v47Ev();
extern void _ZN6S209C63v48Ev();
extern void _ZN6S209C63v49Ev();
extern void _ZN6S209C63v50Ev();
extern void _ZN6S209C63v51Ev();
extern void _ZN6S209C63v52Ev();
extern void _ZN6S209C63v53Ev();
extern void _ZN6S209C63v54Ev();
extern void _ZN6S209C63v55Ev();
extern void _ZN6S209C63v56Ev();
extern void _ZN6S209C63v57Ev();
extern void _ZN6S209C63v58Ev();
extern void _ZN6S209C63v59Ev();
extern void _ZN6S209C63v60Ev();
extern void _ZN6S209C63v61Ev();
extern void _ZN6S209C63v62Ev();
extern void _ZN6S209C63v63Ev();
extern void _ZN6S209C63v64Ev();
extern void _ZN6S209C63v65Ev();
extern void _ZN6S209C63v66Ev();
extern void _ZN6S209C63v67Ev();
static  VTBL_ENTRY vtc_S209C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S209C6[0]),
  (VTBL_ENTRY)&_ZN6S209C6D1Ev,
  (VTBL_ENTRY)&_ZN6S209C6D0Ev,
  (VTBL_ENTRY)&_ZN6S209C62v4Ev,
  (VTBL_ENTRY)&_ZN6S209C62v5Ev,
  (VTBL_ENTRY)&_ZN6S209C62v6Ev,
  (VTBL_ENTRY)&_ZN6S209C62v7Ev,
  (VTBL_ENTRY)&_ZN6S209C62v8Ev,
  (VTBL_ENTRY)&_ZN6S209C62v9Ev,
  (VTBL_ENTRY)&_ZN6S209C63v10Ev,
  (VTBL_ENTRY)&_ZN6S209C63v11Ev,
  (VTBL_ENTRY)&_ZN6S209C63v12Ev,
  (VTBL_ENTRY)&_ZN6S209C63v13Ev,
  (VTBL_ENTRY)&_ZN6S209C63v14Ev,
  (VTBL_ENTRY)&_ZN6S209C63v15Ev,
  (VTBL_ENTRY)&_ZN6S209C63v16Ev,
  (VTBL_ENTRY)&_ZN6S209C63v17Ev,
  (VTBL_ENTRY)&_ZN6S209C63v18Ev,
  (VTBL_ENTRY)&_ZN6S209C63v19Ev,
  (VTBL_ENTRY)&_ZN6S209C63v20Ev,
  (VTBL_ENTRY)&_ZN6S209C63v21Ev,
  (VTBL_ENTRY)&_ZN6S209C63v22Ev,
  (VTBL_ENTRY)&_ZN6S209C63v23Ev,
  (VTBL_ENTRY)&_ZN6S209C63v24Ev,
  (VTBL_ENTRY)&_ZN6S209C63v25Ev,
  (VTBL_ENTRY)&_ZN6S209C63v26Ev,
  (VTBL_ENTRY)&_ZN6S209C63v27Ev,
  (VTBL_ENTRY)&_ZN6S209C63v28Ev,
  (VTBL_ENTRY)&_ZN6S209C63v29Ev,
  (VTBL_ENTRY)&_ZN6S209C63v30Ev,
  (VTBL_ENTRY)&_ZN6S209C63v31Ev,
  (VTBL_ENTRY)&_ZN6S209C63v32Ev,
  (VTBL_ENTRY)&_ZN6S209C63v33Ev,
  (VTBL_ENTRY)&_ZN6S209C63v34Ev,
  (VTBL_ENTRY)&_ZN6S209C63v35Ev,
  (VTBL_ENTRY)&_ZN6S209C63v36Ev,
  (VTBL_ENTRY)&_ZN6S209C63v37Ev,
  (VTBL_ENTRY)&_ZN6S209C63v38Ev,
  (VTBL_ENTRY)&_ZN6S209C63v39Ev,
  (VTBL_ENTRY)&_ZN6S209C63v40Ev,
  (VTBL_ENTRY)&_ZN6S209C63v41Ev,
  (VTBL_ENTRY)&_ZN6S209C63v42Ev,
  (VTBL_ENTRY)&_ZN6S209C63v43Ev,
  (VTBL_ENTRY)&_ZN6S209C63v44Ev,
  (VTBL_ENTRY)&_ZN6S209C63v45Ev,
  (VTBL_ENTRY)&_ZN6S209C63v46Ev,
  (VTBL_ENTRY)&_ZN6S209C63v47Ev,
  (VTBL_ENTRY)&_ZN6S209C63v48Ev,
  (VTBL_ENTRY)&_ZN6S209C63v49Ev,
  (VTBL_ENTRY)&_ZN6S209C63v50Ev,
  (VTBL_ENTRY)&_ZN6S209C63v51Ev,
  (VTBL_ENTRY)&_ZN6S209C63v52Ev,
  (VTBL_ENTRY)&_ZN6S209C63v53Ev,
  (VTBL_ENTRY)&_ZN6S209C63v54Ev,
  (VTBL_ENTRY)&_ZN6S209C63v55Ev,
  (VTBL_ENTRY)&_ZN6S209C63v56Ev,
  (VTBL_ENTRY)&_ZN6S209C63v57Ev,
  (VTBL_ENTRY)&_ZN6S209C63v58Ev,
  (VTBL_ENTRY)&_ZN6S209C63v59Ev,
  (VTBL_ENTRY)&_ZN6S209C63v60Ev,
  (VTBL_ENTRY)&_ZN6S209C63v61Ev,
  (VTBL_ENTRY)&_ZN6S209C63v62Ev,
  (VTBL_ENTRY)&_ZN6S209C63v63Ev,
  (VTBL_ENTRY)&_ZN6S209C63v64Ev,
  (VTBL_ENTRY)&_ZN6S209C63v65Ev,
  (VTBL_ENTRY)&_ZN6S209C63v66Ev,
  (VTBL_ENTRY)&_ZN6S209C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S209C6[];
extern  VTBL_ENTRY _ZTV6S209C6[];
Class_Descriptor cd_S209C6 = {  "S209C6", // class name
  0,0,//no base classes
  &(vtc_S209C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S209C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S209C6),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  S209C5  : S209C6 {
  int s209c5f0[2];
  void *s209c5f1;
  int s209c5f2[2];
  ::S210C8_nt s209c5f3;
  ::S210C8_nt s209c5f4;
  ::S629C14 s209c5f5;
  ::S210C8_nt s209c5f6;
  unsigned int s209c5f7:1;
  unsigned int s209c5f8:1;
  unsigned int s209c5f9:1;
  unsigned int s209c5f10:1;
  unsigned int s209c5f11:1;
  int s209c5f12[2];
  virtual  ~S209C5(); // _ZN6S209C5D1Ev
  virtual void  v68(); // _ZN6S209C53v68Ev
  virtual void  v69(); // _ZN6S209C53v69Ev
  virtual void  v70(); // _ZN6S209C53v70Ev
  virtual void  v71(); // _ZN6S209C53v71Ev
  virtual void  v72(); // _ZN6S209C53v72Ev
  virtual void  v73(); // _ZN6S209C53v73Ev
  virtual void  v74(); // _ZN6S209C53v74Ev
  virtual void  v75(); // _ZN6S209C53v75Ev
  virtual void  v76(); // _ZN6S209C53v76Ev
  virtual void  v77(); // _ZN6S209C53v77Ev
  virtual void  v78(); // _ZN6S209C53v78Ev
  virtual void  v79(); // _ZN6S209C53v79Ev
  virtual void  v80(); // _ZN6S209C53v80Ev
  virtual void  v81(); // _ZN6S209C53v81Ev
  virtual void  v82(); // _ZN6S209C53v82Ev
  virtual void  v83(); // _ZN6S209C53v83Ev
  virtual void  v84(); // _ZN6S209C53v84Ev
  virtual void  v85(); // _ZN6S209C53v85Ev
  virtual void  v86(); // _ZN6S209C53v86Ev
  virtual void  v87(); // _ZN6S209C53v87Ev
  virtual void  v88(); // _ZN6S209C53v88Ev
  virtual void  v89(); // _ZN6S209C53v89Ev
  S209C5(); // tgen
};
//SIG(-1 S209C5) 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]}


 S209C5 ::~S209C5(){ note_dtor("S209C5", this);}
void  S209C5 ::v68(){vfunc_called(this, "_ZN6S209C53v68Ev");}
void  S209C5 ::v69(){vfunc_called(this, "_ZN6S209C53v69Ev");}
void  S209C5 ::v70(){vfunc_called(this, "_ZN6S209C53v70Ev");}
void  S209C5 ::v71(){vfunc_called(this, "_ZN6S209C53v71Ev");}
void  S209C5 ::v72(){vfunc_called(this, "_ZN6S209C53v72Ev");}
void  S209C5 ::v73(){vfunc_called(this, "_ZN6S209C53v73Ev");}
void  S209C5 ::v74(){vfunc_called(this, "_ZN6S209C53v74Ev");}
void  S209C5 ::v75(){vfunc_called(this, "_ZN6S209C53v75Ev");}
void  S209C5 ::v76(){vfunc_called(this, "_ZN6S209C53v76Ev");}
void  S209C5 ::v77(){vfunc_called(this, "_ZN6S209C53v77Ev");}
void  S209C5 ::v78(){vfunc_called(this, "_ZN6S209C53v78Ev");}
void  S209C5 ::v79(){vfunc_called(this, "_ZN6S209C53v79Ev");}
void  S209C5 ::v80(){vfunc_called(this, "_ZN6S209C53v80Ev");}
void  S209C5 ::v81(){vfunc_called(this, "_ZN6S209C53v81Ev");}
void  S209C5 ::v82(){vfunc_called(this, "_ZN6S209C53v82Ev");}
void  S209C5 ::v83(){vfunc_called(this, "_ZN6S209C53v83Ev");}
void  S209C5 ::v84(){vfunc_called(this, "_ZN6S209C53v84Ev");}
void  S209C5 ::v85(){vfunc_called(this, "_ZN6S209C53v85Ev");}
void  S209C5 ::v86(){vfunc_called(this, "_ZN6S209C53v86Ev");}
void  S209C5 ::v87(){vfunc_called(this, "_ZN6S209C53v87Ev");}
void  S209C5 ::v88(){vfunc_called(this, "_ZN6S209C53v88Ev");}
void  S209C5 ::v89(){vfunc_called(this, "_ZN6S209C53v89Ev");}
S209C5 ::S209C5(){ note_ctor("S209C5", this);} // tgen

static void Test_S209C5()
{
  extern Class_Descriptor cd_S209C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S209C5, buf);
    S209C5 *dp, &lv = *(dp=new (buf) S209C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S209C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S209C5)");
    check_base_class_offset(lv, (S209C6*), 0, "S209C5");
    check_field_offset(lv, s209c5f0, ABISELECT(96,60), "S209C5.s209c5f0");
    check_field_offset(lv, s209c5f1, ABISELECT(104,68), "S209C5.s209c5f1");
    check_field_offset(lv, s209c5f2, ABISELECT(112,72), "S209C5.s209c5f2");
    check_field_offset(lv, s209c5f3, ABISELECT(120,80), "S209C5.s209c5f3");
    check_field_offset(lv, s209c5f4, ABISELECT(136,92), "S209C5.s209c5f4");
    check_field_offset(lv, s209c5f5, ABISELECT(152,104), "S209C5.s209c5f5");
    check_field_offset(lv, s209c5f6, ABISELECT(160,108), "S209C5.s209c5f6");
    set_bf_and_test(lv, s209c5f7, ABISELECT(176,120), 0, 1, 1, "S209C5");
    set_bf_and_test(lv, s209c5f8, ABISELECT(176,120), 1, 1, 1, "S209C5");
    set_bf_and_test(lv, s209c5f9, ABISELECT(176,120), 2, 1, 1, "S209C5");
    set_bf_and_test(lv, s209c5f10, ABISELECT(176,120), 3, 1, 1, "S209C5");
    set_bf_and_test(lv, s209c5f11, ABISELECT(176,120), 4, 1, 1, "S209C5");
    check_field_offset(lv, s209c5f12, ABISELECT(180,124), "S209C5.s209c5f12");
    test_class_info(&lv, &cd_S209C5);
    dp->~S209C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS209C5(Test_S209C5, "S209C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S209C5C1Ev();
extern void _ZN6S209C5D1Ev();
Name_Map name_map_S209C5[] = {
  NSPAIR(_ZN6S209C5C1Ev),
  NSPAIR(_ZN6S209C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S209C6;
extern VTBL_ENTRY _ZTI6S209C6[];
extern  VTBL_ENTRY _ZTV6S209C6[];
static Base_Class bases_S209C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S209C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI6S209C5[];
extern void _ZN6S209C5D1Ev();
extern void _ZN6S209C5D0Ev();
extern void _ZN6S209C62v4Ev();
extern void _ZN6S209C62v5Ev();
extern void _ZN6S209C62v6Ev();
extern void _ZN6S209C62v7Ev();
extern void _ZN6S209C62v8Ev();
extern void _ZN6S209C62v9Ev();
extern void _ZN6S209C63v10Ev();
extern void _ZN6S209C63v11Ev();
extern void _ZN6S209C63v12Ev();
extern void _ZN6S209C63v13Ev();
extern void _ZN6S209C63v14Ev();
extern void _ZN6S209C63v15Ev();
extern void _ZN6S209C63v16Ev();
extern void _ZN6S209C63v17Ev();
extern void _ZN6S209C63v18Ev();
extern void _ZN6S209C63v19Ev();
extern void _ZN6S209C63v20Ev();
extern void _ZN6S209C63v21Ev();
extern void _ZN6S209C63v22Ev();
extern void _ZN6S209C63v23Ev();
extern void _ZN6S209C63v24Ev();
extern void _ZN6S209C63v25Ev();
extern void _ZN6S209C63v26Ev();
extern void _ZN6S209C63v27Ev();
extern void _ZN6S209C63v28Ev();
extern void _ZN6S209C63v29Ev();
extern void _ZN6S209C63v30Ev();
extern void _ZN6S209C63v31Ev();
extern void _ZN6S209C63v32Ev();
extern void _ZN6S209C63v33Ev();
extern void _ZN6S209C63v34Ev();
extern void _ZN6S209C63v35Ev();
extern void _ZN6S209C63v36Ev();
extern void _ZN6S209C63v37Ev();
extern void _ZN6S209C63v38Ev();
extern void _ZN6S209C63v39Ev();
extern void _ZN6S209C63v40Ev();
extern void _ZN6S209C63v41Ev();
extern void _ZN6S209C63v42Ev();
extern void _ZN6S209C63v43Ev();
extern void _ZN6S209C63v44Ev();
extern void _ZN6S209C63v45Ev();
extern void _ZN6S209C63v46Ev();
extern void _ZN6S209C63v47Ev();
extern void _ZN6S209C63v48Ev();
extern void _ZN6S209C63v49Ev();
extern void _ZN6S209C63v50Ev();
extern void _ZN6S209C63v51Ev();
extern void _ZN6S209C63v52Ev();
extern void _ZN6S209C63v53Ev();
extern void _ZN6S209C63v54Ev();
extern void _ZN6S209C63v55Ev();
extern void _ZN6S209C63v56Ev();
extern void _ZN6S209C63v57Ev();
extern void _ZN6S209C63v58Ev();
extern void _ZN6S209C63v59Ev();
extern void _ZN6S209C63v60Ev();
extern void _ZN6S209C63v61Ev();
extern void _ZN6S209C63v62Ev();
extern void _ZN6S209C63v63Ev();
extern void _ZN6S209C63v64Ev();
extern void _ZN6S209C63v65Ev();
extern void _ZN6S209C63v66Ev();
extern void _ZN6S209C63v67Ev();
extern void _ZN6S209C53v68Ev();
extern void _ZN6S209C53v69Ev();
extern void _ZN6S209C53v70Ev();
extern void _ZN6S209C53v71Ev();
extern void _ZN6S209C53v72Ev();
extern void _ZN6S209C53v73Ev();
extern void _ZN6S209C53v74Ev();
extern void _ZN6S209C53v75Ev();
extern void _ZN6S209C53v76Ev();
extern void _ZN6S209C53v77Ev();
extern void _ZN6S209C53v78Ev();
extern void _ZN6S209C53v79Ev();
extern void _ZN6S209C53v80Ev();
extern void _ZN6S209C53v81Ev();
extern void _ZN6S209C53v82Ev();
extern void _ZN6S209C53v83Ev();
extern void _ZN6S209C53v84Ev();
extern void _ZN6S209C53v85Ev();
extern void _ZN6S209C53v86Ev();
extern void _ZN6S209C53v87Ev();
extern void _ZN6S209C53v88Ev();
extern void _ZN6S209C53v89Ev();
static  VTBL_ENTRY vtc_S209C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S209C5[0]),
  (VTBL_ENTRY)&_ZN6S209C5D1Ev,
  (VTBL_ENTRY)&_ZN6S209C5D0Ev,
  (VTBL_ENTRY)&_ZN6S209C62v4Ev,
  (VTBL_ENTRY)&_ZN6S209C62v5Ev,
  (VTBL_ENTRY)&_ZN6S209C62v6Ev,
  (VTBL_ENTRY)&_ZN6S209C62v7Ev,
  (VTBL_ENTRY)&_ZN6S209C62v8Ev,
  (VTBL_ENTRY)&_ZN6S209C62v9Ev,
  (VTBL_ENTRY)&_ZN6S209C63v10Ev,
  (VTBL_ENTRY)&_ZN6S209C63v11Ev,
  (VTBL_ENTRY)&_ZN6S209C63v12Ev,
  (VTBL_ENTRY)&_ZN6S209C63v13Ev,
  (VTBL_ENTRY)&_ZN6S209C63v14Ev,
  (VTBL_ENTRY)&_ZN6S209C63v15Ev,
  (VTBL_ENTRY)&_ZN6S209C63v16Ev,
  (VTBL_ENTRY)&_ZN6S209C63v17Ev,
  (VTBL_ENTRY)&_ZN6S209C63v18Ev,
  (VTBL_ENTRY)&_ZN6S209C63v19Ev,
  (VTBL_ENTRY)&_ZN6S209C63v20Ev,
  (VTBL_ENTRY)&_ZN6S209C63v21Ev,
  (VTBL_ENTRY)&_ZN6S209C63v22Ev,
  (VTBL_ENTRY)&_ZN6S209C63v23Ev,
  (VTBL_ENTRY)&_ZN6S209C63v24Ev,
  (VTBL_ENTRY)&_ZN6S209C63v25Ev,
  (VTBL_ENTRY)&_ZN6S209C63v26Ev,
  (VTBL_ENTRY)&_ZN6S209C63v27Ev,
  (VTBL_ENTRY)&_ZN6S209C63v28Ev,
  (VTBL_ENTRY)&_ZN6S209C63v29Ev,
  (VTBL_ENTRY)&_ZN6S209C63v30Ev,
  (VTBL_ENTRY)&_ZN6S209C63v31Ev,
  (VTBL_ENTRY)&_ZN6S209C63v32Ev,
  (VTBL_ENTRY)&_ZN6S209C63v33Ev,
  (VTBL_ENTRY)&_ZN6S209C63v34Ev,
  (VTBL_ENTRY)&_ZN6S209C63v35Ev,
  (VTBL_ENTRY)&_ZN6S209C63v36Ev,
  (VTBL_ENTRY)&_ZN6S209C63v37Ev,
  (VTBL_ENTRY)&_ZN6S209C63v38Ev,
  (VTBL_ENTRY)&_ZN6S209C63v39Ev,
  (VTBL_ENTRY)&_ZN6S209C63v40Ev,
  (VTBL_ENTRY)&_ZN6S209C63v41Ev,
  (VTBL_ENTRY)&_ZN6S209C63v42Ev,
  (VTBL_ENTRY)&_ZN6S209C63v43Ev,
  (VTBL_ENTRY)&_ZN6S209C63v44Ev,
  (VTBL_ENTRY)&_ZN6S209C63v45Ev,
  (VTBL_ENTRY)&_ZN6S209C63v46Ev,
  (VTBL_ENTRY)&_ZN6S209C63v47Ev,
  (VTBL_ENTRY)&_ZN6S209C63v48Ev,
  (VTBL_ENTRY)&_ZN6S209C63v49Ev,
  (VTBL_ENTRY)&_ZN6S209C63v50Ev,
  (VTBL_ENTRY)&_ZN6S209C63v51Ev,
  (VTBL_ENTRY)&_ZN6S209C63v52Ev,
  (VTBL_ENTRY)&_ZN6S209C63v53Ev,
  (VTBL_ENTRY)&_ZN6S209C63v54Ev,
  (VTBL_ENTRY)&_ZN6S209C63v55Ev,
  (VTBL_ENTRY)&_ZN6S209C63v56Ev,
  (VTBL_ENTRY)&_ZN6S209C63v57Ev,
  (VTBL_ENTRY)&_ZN6S209C63v58Ev,
  (VTBL_ENTRY)&_ZN6S209C63v59Ev,
  (VTBL_ENTRY)&_ZN6S209C63v60Ev,
  (VTBL_ENTRY)&_ZN6S209C63v61Ev,
  (VTBL_ENTRY)&_ZN6S209C63v62Ev,
  (VTBL_ENTRY)&_ZN6S209C63v63Ev,
  (VTBL_ENTRY)&_ZN6S209C63v64Ev,
  (VTBL_ENTRY)&_ZN6S209C63v65Ev,
  (VTBL_ENTRY)&_ZN6S209C63v66Ev,
  (VTBL_ENTRY)&_ZN6S209C63v67Ev,
  (VTBL_ENTRY)&_ZN6S209C53v68Ev,
  (VTBL_ENTRY)&_ZN6S209C53v69Ev,
  (VTBL_ENTRY)&_ZN6S209C53v70Ev,
  (VTBL_ENTRY)&_ZN6S209C53v71Ev,
  (VTBL_ENTRY)&_ZN6S209C53v72Ev,
  (VTBL_ENTRY)&_ZN6S209C53v73Ev,
  (VTBL_ENTRY)&_ZN6S209C53v74Ev,
  (VTBL_ENTRY)&_ZN6S209C53v75Ev,
  (VTBL_ENTRY)&_ZN6S209C53v76Ev,
  (VTBL_ENTRY)&_ZN6S209C53v77Ev,
  (VTBL_ENTRY)&_ZN6S209C53v78Ev,
  (VTBL_ENTRY)&_ZN6S209C53v79Ev,
  (VTBL_ENTRY)&_ZN6S209C53v80Ev,
  (VTBL_ENTRY)&_ZN6S209C53v81Ev,
  (VTBL_ENTRY)&_ZN6S209C53v82Ev,
  (VTBL_ENTRY)&_ZN6S209C53v83Ev,
  (VTBL_ENTRY)&_ZN6S209C53v84Ev,
  (VTBL_ENTRY)&_ZN6S209C53v85Ev,
  (VTBL_ENTRY)&_ZN6S209C53v86Ev,
  (VTBL_ENTRY)&_ZN6S209C53v87Ev,
  (VTBL_ENTRY)&_ZN6S209C53v88Ev,
  (VTBL_ENTRY)&_ZN6S209C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S209C5[];
extern  VTBL_ENTRY _ZTV6S209C5[];
Class_Descriptor cd_S209C5 = {  "S209C5", // class name
  bases_S209C5, 1,
  &(vtc_S209C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S209C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S209C5),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  S209C4  : S209C5 {
  unsigned int s209c4f0:1;
  unsigned int s209c4f1:1;
  unsigned int s209c4f2:1;
  ::S1503C28 s209c4f3;
  ::S1503C24 s209c4f4;
  ::S1503C18 s209c4f5;
  ::S1503C12 s209c4f6;
  int s209c4f7[3];
  virtual  ~S209C4(); // _ZN6S209C4D1Ev
  virtual void  v90(); // _ZN6S209C43v90Ev
  virtual void  v91(); // _ZN6S209C43v91Ev
  virtual void  v92(); // _ZN6S209C43v92Ev
  virtual void  v93(); // _ZN6S209C43v93Ev
  virtual void  v94(); // _ZN6S209C43v94Ev
  virtual void  v95(); // _ZN6S209C43v95Ev
  virtual void  v96(); // _ZN6S209C43v96Ev
  virtual void  v97(); // _ZN6S209C43v97Ev
  virtual void  v98(); // _ZN6S209C43v98Ev
  virtual void  v99(); // _ZN6S209C43v99Ev
  virtual void  v100(); // _ZN6S209C44v100Ev
  virtual void  v101(); // _ZN6S209C44v101Ev
  virtual void  v102(); // _ZN6S209C44v102Ev
  virtual void  v103(); // _ZN6S209C44v103Ev
  virtual void  v104(); // _ZN6S209C44v104Ev
  virtual void  v105(); // _ZN6S209C44v105Ev
  virtual void  v106(); // _ZN6S209C44v106Ev
  virtual void  v107(); // _ZN6S209C44v107Ev
  virtual void  v108(); // _ZN6S209C44v108Ev
  virtual void  v109(); // _ZN6S209C44v109Ev
  S209C4(); // tgen
};
//SIG(-1 S209C4) 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]}


 S209C4 ::~S209C4(){ note_dtor("S209C4", this);}
void  S209C4 ::v90(){vfunc_called(this, "_ZN6S209C43v90Ev");}
void  S209C4 ::v91(){vfunc_called(this, "_ZN6S209C43v91Ev");}
void  S209C4 ::v92(){vfunc_called(this, "_ZN6S209C43v92Ev");}
void  S209C4 ::v93(){vfunc_called(this, "_ZN6S209C43v93Ev");}
void  S209C4 ::v94(){vfunc_called(this, "_ZN6S209C43v94Ev");}
void  S209C4 ::v95(){vfunc_called(this, "_ZN6S209C43v95Ev");}
void  S209C4 ::v96(){vfunc_called(this, "_ZN6S209C43v96Ev");}
void  S209C4 ::v97(){vfunc_called(this, "_ZN6S209C43v97Ev");}
void  S209C4 ::v98(){vfunc_called(this, "_ZN6S209C43v98Ev");}
void  S209C4 ::v99(){vfunc_called(this, "_ZN6S209C43v99Ev");}
void  S209C4 ::v100(){vfunc_called(this, "_ZN6S209C44v100Ev");}
void  S209C4 ::v101(){vfunc_called(this, "_ZN6S209C44v101Ev");}
void  S209C4 ::v102(){vfunc_called(this, "_ZN6S209C44v102Ev");}
void  S209C4 ::v103(){vfunc_called(this, "_ZN6S209C44v103Ev");}
void  S209C4 ::v104(){vfunc_called(this, "_ZN6S209C44v104Ev");}
void  S209C4 ::v105(){vfunc_called(this, "_ZN6S209C44v105Ev");}
void  S209C4 ::v106(){vfunc_called(this, "_ZN6S209C44v106Ev");}
void  S209C4 ::v107(){vfunc_called(this, "_ZN6S209C44v107Ev");}
void  S209C4 ::v108(){vfunc_called(this, "_ZN6S209C44v108Ev");}
void  S209C4 ::v109(){vfunc_called(this, "_ZN6S209C44v109Ev");}
S209C4 ::S209C4(){ note_ctor("S209C4", this);} // tgen

static void Test_S209C4()
{
  extern Class_Descriptor cd_S209C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S209C4, buf);
    S209C4 *dp, &lv = *(dp=new (buf) S209C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S209C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S209C4)");
    check_base_class_offset(lv, (S209C6*)(S209C5*), 0, "S209C4");
    check_base_class_offset(lv, (S209C5*), 0, "S209C4");
    set_bf_and_test(lv, s209c4f0, ABISELECT(188,132), 0, 1, 1, "S209C4");
    set_bf_and_test(lv, s209c4f1, ABISELECT(188,132), 1, 1, 1, "S209C4");
    set_bf_and_test(lv, s209c4f2, ABISELECT(188,132), 2, 1, 1, "S209C4");
    check_field_offset(lv, s209c4f3, ABISELECT(192,136), "S209C4.s209c4f3");
    check_field_offset(lv, s209c4f4, ABISELECT(208,148), "S209C4.s209c4f4");
    check_field_offset(lv, s209c4f5, ABISELECT(224,160), "S209C4.s209c4f5");
    check_field_offset(lv, s209c4f6, ABISELECT(240,172), "S209C4.s209c4f6");
    check_field_offset(lv, s209c4f7, ABISELECT(256,184), "S209C4.s209c4f7");
    test_class_info(&lv, &cd_S209C4);
    dp->~S209C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS209C4(Test_S209C4, "S209C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S209C4C1Ev();
extern void _ZN6S209C4D1Ev();
Name_Map name_map_S209C4[] = {
  NSPAIR(_ZN6S209C4C1Ev),
  NSPAIR(_ZN6S209C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S209C6;
extern VTBL_ENTRY _ZTI6S209C6[];
extern  VTBL_ENTRY _ZTV6S209C6[];
extern Class_Descriptor cd_S209C5;
extern VTBL_ENTRY _ZTI6S209C5[];
extern  VTBL_ENTRY _ZTV6S209C5[];
static Base_Class bases_S209C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S209C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S209C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S209C4[];
extern void _ZN6S209C4D1Ev();
extern void _ZN6S209C4D0Ev();
extern void _ZN6S209C62v4Ev();
extern void _ZN6S209C62v5Ev();
extern void _ZN6S209C62v6Ev();
extern void _ZN6S209C62v7Ev();
extern void _ZN6S209C62v8Ev();
extern void _ZN6S209C62v9Ev();
extern void _ZN6S209C63v10Ev();
extern void _ZN6S209C63v11Ev();
extern void _ZN6S209C63v12Ev();
extern void _ZN6S209C63v13Ev();
extern void _ZN6S209C63v14Ev();
extern void _ZN6S209C63v15Ev();
extern void _ZN6S209C63v16Ev();
extern void _ZN6S209C63v17Ev();
extern void _ZN6S209C63v18Ev();
extern void _ZN6S209C63v19Ev();
extern void _ZN6S209C63v20Ev();
extern void _ZN6S209C63v21Ev();
extern void _ZN6S209C63v22Ev();
extern void _ZN6S209C63v23Ev();
extern void _ZN6S209C63v24Ev();
extern void _ZN6S209C63v25Ev();
extern void _ZN6S209C63v26Ev();
extern void _ZN6S209C63v27Ev();
extern void _ZN6S209C63v28Ev();
extern void _ZN6S209C63v29Ev();
extern void _ZN6S209C63v30Ev();
extern void _ZN6S209C63v31Ev();
extern void _ZN6S209C63v32Ev();
extern void _ZN6S209C63v33Ev();
extern void _ZN6S209C63v34Ev();
extern void _ZN6S209C63v35Ev();
extern void _ZN6S209C63v36Ev();
extern void _ZN6S209C63v37Ev();
extern void _ZN6S209C63v38Ev();
extern void _ZN6S209C63v39Ev();
extern void _ZN6S209C63v40Ev();
extern void _ZN6S209C63v41Ev();
extern void _ZN6S209C63v42Ev();
extern void _ZN6S209C63v43Ev();
extern void _ZN6S209C63v44Ev();
extern void _ZN6S209C63v45Ev();
extern void _ZN6S209C63v46Ev();
extern void _ZN6S209C63v47Ev();
extern void _ZN6S209C63v48Ev();
extern void _ZN6S209C63v49Ev();
extern void _ZN6S209C63v50Ev();
extern void _ZN6S209C63v51Ev();
extern void _ZN6S209C63v52Ev();
extern void _ZN6S209C63v53Ev();
extern void _ZN6S209C63v54Ev();
extern void _ZN6S209C63v55Ev();
extern void _ZN6S209C63v56Ev();
extern void _ZN6S209C63v57Ev();
extern void _ZN6S209C63v58Ev();
extern void _ZN6S209C63v59Ev();
extern void _ZN6S209C63v60Ev();
extern void _ZN6S209C63v61Ev();
extern void _ZN6S209C63v62Ev();
extern void _ZN6S209C63v63Ev();
extern void _ZN6S209C63v64Ev();
extern void _ZN6S209C63v65Ev();
extern void _ZN6S209C63v66Ev();
extern void _ZN6S209C63v67Ev();
extern void _ZN6S209C53v68Ev();
extern void _ZN6S209C53v69Ev();
extern void _ZN6S209C53v70Ev();
extern void _ZN6S209C53v71Ev();
extern void _ZN6S209C53v72Ev();
extern void _ZN6S209C53v73Ev();
extern void _ZN6S209C53v74Ev();
extern void _ZN6S209C53v75Ev();
extern void _ZN6S209C53v76Ev();
extern void _ZN6S209C53v77Ev();
extern void _ZN6S209C53v78Ev();
extern void _ZN6S209C53v79Ev();
extern void _ZN6S209C53v80Ev();
extern void _ZN6S209C53v81Ev();
extern void _ZN6S209C53v82Ev();
extern void _ZN6S209C53v83Ev();
extern void _ZN6S209C53v84Ev();
extern void _ZN6S209C53v85Ev();
extern void _ZN6S209C53v86Ev();
extern void _ZN6S209C53v87Ev();
extern void _ZN6S209C53v88Ev();
extern void _ZN6S209C53v89Ev();
extern void _ZN6S209C43v90Ev();
extern void _ZN6S209C43v91Ev();
extern void _ZN6S209C43v92Ev();
extern void _ZN6S209C43v93Ev();
extern void _ZN6S209C43v94Ev();
extern void _ZN6S209C43v95Ev();
extern void _ZN6S209C43v96Ev();
extern void _ZN6S209C43v97Ev();
extern void _ZN6S209C43v98Ev();
extern void _ZN6S209C43v99Ev();
extern void _ZN6S209C44v100Ev();
extern void _ZN6S209C44v101Ev();
extern void _ZN6S209C44v102Ev();
extern void _ZN6S209C44v103Ev();
extern void _ZN6S209C44v104Ev();
extern void _ZN6S209C44v105Ev();
extern void _ZN6S209C44v106Ev();
extern void _ZN6S209C44v107Ev();
extern void _ZN6S209C44v108Ev();
extern void _ZN6S209C44v109Ev();
static  VTBL_ENTRY vtc_S209C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S209C4[0]),
  (VTBL_ENTRY)&_ZN6S209C4D1Ev,
  (VTBL_ENTRY)&_ZN6S209C4D0Ev,
  (VTBL_ENTRY)&_ZN6S209C62v4Ev,
  (VTBL_ENTRY)&_ZN6S209C62v5Ev,
  (VTBL_ENTRY)&_ZN6S209C62v6Ev,
  (VTBL_ENTRY)&_ZN6S209C62v7Ev,
  (VTBL_ENTRY)&_ZN6S209C62v8Ev,
  (VTBL_ENTRY)&_ZN6S209C62v9Ev,
  (VTBL_ENTRY)&_ZN6S209C63v10Ev,
  (VTBL_ENTRY)&_ZN6S209C63v11Ev,
  (VTBL_ENTRY)&_ZN6S209C63v12Ev,
  (VTBL_ENTRY)&_ZN6S209C63v13Ev,
  (VTBL_ENTRY)&_ZN6S209C63v14Ev,
  (VTBL_ENTRY)&_ZN6S209C63v15Ev,
  (VTBL_ENTRY)&_ZN6S209C63v16Ev,
  (VTBL_ENTRY)&_ZN6S209C63v17Ev,
  (VTBL_ENTRY)&_ZN6S209C63v18Ev,
  (VTBL_ENTRY)&_ZN6S209C63v19Ev,
  (VTBL_ENTRY)&_ZN6S209C63v20Ev,
  (VTBL_ENTRY)&_ZN6S209C63v21Ev,
  (VTBL_ENTRY)&_ZN6S209C63v22Ev,
  (VTBL_ENTRY)&_ZN6S209C63v23Ev,
  (VTBL_ENTRY)&_ZN6S209C63v24Ev,
  (VTBL_ENTRY)&_ZN6S209C63v25Ev,
  (VTBL_ENTRY)&_ZN6S209C63v26Ev,
  (VTBL_ENTRY)&_ZN6S209C63v27Ev,
  (VTBL_ENTRY)&_ZN6S209C63v28Ev,
  (VTBL_ENTRY)&_ZN6S209C63v29Ev,
  (VTBL_ENTRY)&_ZN6S209C63v30Ev,
  (VTBL_ENTRY)&_ZN6S209C63v31Ev,
  (VTBL_ENTRY)&_ZN6S209C63v32Ev,
  (VTBL_ENTRY)&_ZN6S209C63v33Ev,
  (VTBL_ENTRY)&_ZN6S209C63v34Ev,
  (VTBL_ENTRY)&_ZN6S209C63v35Ev,
  (VTBL_ENTRY)&_ZN6S209C63v36Ev,
  (VTBL_ENTRY)&_ZN6S209C63v37Ev,
  (VTBL_ENTRY)&_ZN6S209C63v38Ev,
  (VTBL_ENTRY)&_ZN6S209C63v39Ev,
  (VTBL_ENTRY)&_ZN6S209C63v40Ev,
  (VTBL_ENTRY)&_ZN6S209C63v41Ev,
  (VTBL_ENTRY)&_ZN6S209C63v42Ev,
  (VTBL_ENTRY)&_ZN6S209C63v43Ev,
  (VTBL_ENTRY)&_ZN6S209C63v44Ev,
  (VTBL_ENTRY)&_ZN6S209C63v45Ev,
  (VTBL_ENTRY)&_ZN6S209C63v46Ev,
  (VTBL_ENTRY)&_ZN6S209C63v47Ev,
  (VTBL_ENTRY)&_ZN6S209C63v48Ev,
  (VTBL_ENTRY)&_ZN6S209C63v49Ev,
  (VTBL_ENTRY)&_ZN6S209C63v50Ev,
  (VTBL_ENTRY)&_ZN6S209C63v51Ev,
  (VTBL_ENTRY)&_ZN6S209C63v52Ev,
  (VTBL_ENTRY)&_ZN6S209C63v53Ev,
  (VTBL_ENTRY)&_ZN6S209C63v54Ev,
  (VTBL_ENTRY)&_ZN6S209C63v55Ev,
  (VTBL_ENTRY)&_ZN6S209C63v56Ev,
  (VTBL_ENTRY)&_ZN6S209C63v57Ev,
  (VTBL_ENTRY)&_ZN6S209C63v58Ev,
  (VTBL_ENTRY)&_ZN6S209C63v59Ev,
  (VTBL_ENTRY)&_ZN6S209C63v60Ev,
  (VTBL_ENTRY)&_ZN6S209C63v61Ev,
  (VTBL_ENTRY)&_ZN6S209C63v62Ev,
  (VTBL_ENTRY)&_ZN6S209C63v63Ev,
  (VTBL_ENTRY)&_ZN6S209C63v64Ev,
  (VTBL_ENTRY)&_ZN6S209C63v65Ev,
  (VTBL_ENTRY)&_ZN6S209C63v66Ev,
  (VTBL_ENTRY)&_ZN6S209C63v67Ev,
  (VTBL_ENTRY)&_ZN6S209C53v68Ev,
  (VTBL_ENTRY)&_ZN6S209C53v69Ev,
  (VTBL_ENTRY)&_ZN6S209C53v70Ev,
  (VTBL_ENTRY)&_ZN6S209C53v71Ev,
  (VTBL_ENTRY)&_ZN6S209C53v72Ev,
  (VTBL_ENTRY)&_ZN6S209C53v73Ev,
  (VTBL_ENTRY)&_ZN6S209C53v74Ev,
  (VTBL_ENTRY)&_ZN6S209C53v75Ev,
  (VTBL_ENTRY)&_ZN6S209C53v76Ev,
  (VTBL_ENTRY)&_ZN6S209C53v77Ev,
  (VTBL_ENTRY)&_ZN6S209C53v78Ev,
  (VTBL_ENTRY)&_ZN6S209C53v79Ev,
  (VTBL_ENTRY)&_ZN6S209C53v80Ev,
  (VTBL_ENTRY)&_ZN6S209C53v81Ev,
  (VTBL_ENTRY)&_ZN6S209C53v82Ev,
  (VTBL_ENTRY)&_ZN6S209C53v83Ev,
  (VTBL_ENTRY)&_ZN6S209C53v84Ev,
  (VTBL_ENTRY)&_ZN6S209C53v85Ev,
  (VTBL_ENTRY)&_ZN6S209C53v86Ev,
  (VTBL_ENTRY)&_ZN6S209C53v87Ev,
  (VTBL_ENTRY)&_ZN6S209C53v88Ev,
  (VTBL_ENTRY)&_ZN6S209C53v89Ev,
  (VTBL_ENTRY)&_ZN6S209C43v90Ev,
  (VTBL_ENTRY)&_ZN6S209C43v91Ev,
  (VTBL_ENTRY)&_ZN6S209C43v92Ev,
  (VTBL_ENTRY)&_ZN6S209C43v93Ev,
  (VTBL_ENTRY)&_ZN6S209C43v94Ev,
  (VTBL_ENTRY)&_ZN6S209C43v95Ev,
  (VTBL_ENTRY)&_ZN6S209C43v96Ev,
  (VTBL_ENTRY)&_ZN6S209C43v97Ev,
  (VTBL_ENTRY)&_ZN6S209C43v98Ev,
  (VTBL_ENTRY)&_ZN6S209C43v99Ev,
  (VTBL_ENTRY)&_ZN6S209C44v100Ev,
  (VTBL_ENTRY)&_ZN6S209C44v101Ev,
  (VTBL_ENTRY)&_ZN6S209C44v102Ev,
  (VTBL_ENTRY)&_ZN6S209C44v103Ev,
  (VTBL_ENTRY)&_ZN6S209C44v104Ev,
  (VTBL_ENTRY)&_ZN6S209C44v105Ev,
  (VTBL_ENTRY)&_ZN6S209C44v106Ev,
  (VTBL_ENTRY)&_ZN6S209C44v107Ev,
  (VTBL_ENTRY)&_ZN6S209C44v108Ev,
  (VTBL_ENTRY)&_ZN6S209C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S209C4[];
extern  VTBL_ENTRY _ZTV6S209C4[];
Class_Descriptor cd_S209C4 = {  "S209C4", // class name
  bases_S209C4, 2,
  &(vtc_S209C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S209C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S209C4),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  S209C3  : S209C4 {
  ::S1503C5_nt s209c3f0;
  unsigned int s209c3f1:1;
  ::S1503C6_nt s209c3f2;
  virtual  ~S209C3(); // _ZN6S209C3D1Ev
  virtual void  v110(); // _ZN6S209C34v110Ev
  virtual void  v111(); // _ZN6S209C34v111Ev
  virtual void  v112(); // _ZN6S209C34v112Ev
  virtual void  v113(); // _ZN6S209C34v113Ev
  S209C3(); // tgen
};
//SIG(-1 S209C3) 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}}}


 S209C3 ::~S209C3(){ note_dtor("S209C3", this);}
void  S209C3 ::v110(){vfunc_called(this, "_ZN6S209C34v110Ev");}
void  S209C3 ::v111(){vfunc_called(this, "_ZN6S209C34v111Ev");}
void  S209C3 ::v112(){vfunc_called(this, "_ZN6S209C34v112Ev");}
void  S209C3 ::v113(){vfunc_called(this, "_ZN6S209C34v113Ev");}
S209C3 ::S209C3(){ note_ctor("S209C3", this);} // tgen

static void Test_S209C3()
{
  extern Class_Descriptor cd_S209C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S209C3, buf);
    S209C3 *dp, &lv = *(dp=new (buf) S209C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S209C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S209C3)");
    check_base_class_offset(lv, (S209C6*)(S209C5*)(S209C4*), 0, "S209C3");
    check_base_class_offset(lv, (S209C5*)(S209C4*), 0, "S209C3");
    check_base_class_offset(lv, (S209C4*), 0, "S209C3");
    check_field_offset(lv, s209c3f0, ABISELECT(268,196), "S209C3.s209c3f0");
    set_bf_and_test(lv, s209c3f1, ABISELECT(276,204), 0, 1, 1, "S209C3");
    check_field_offset(lv, s209c3f2, ABISELECT(280,208), "S209C3.s209c3f2");
    test_class_info(&lv, &cd_S209C3);
    dp->~S209C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS209C3(Test_S209C3, "S209C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S209C3C1Ev();
extern void _ZN6S209C3D1Ev();
Name_Map name_map_S209C3[] = {
  NSPAIR(_ZN6S209C3C1Ev),
  NSPAIR(_ZN6S209C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S209C6;
extern VTBL_ENTRY _ZTI6S209C6[];
extern  VTBL_ENTRY _ZTV6S209C6[];
extern Class_Descriptor cd_S209C5;
extern VTBL_ENTRY _ZTI6S209C5[];
extern  VTBL_ENTRY _ZTV6S209C5[];
extern Class_Descriptor cd_S209C4;
extern VTBL_ENTRY _ZTI6S209C4[];
extern  VTBL_ENTRY _ZTV6S209C4[];
static Base_Class bases_S209C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S209C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S209C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S209C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S209C3[];
extern void _ZN6S209C3D1Ev();
extern void _ZN6S209C3D0Ev();
extern void _ZN6S209C62v4Ev();
extern void _ZN6S209C62v5Ev();
extern void _ZN6S209C62v6Ev();
extern void _ZN6S209C62v7Ev();
extern void _ZN6S209C62v8Ev();
extern void _ZN6S209C62v9Ev();
extern void _ZN6S209C63v10Ev();
extern void _ZN6S209C63v11Ev();
extern void _ZN6S209C63v12Ev();
extern void _ZN6S209C63v13Ev();
extern void _ZN6S209C63v14Ev();
extern void _ZN6S209C63v15Ev();
extern void _ZN6S209C63v16Ev();
extern void _ZN6S209C63v17Ev();
extern void _ZN6S209C63v18Ev();
extern void _ZN6S209C63v19Ev();
extern void _ZN6S209C63v20Ev();
extern void _ZN6S209C63v21Ev();
extern void _ZN6S209C63v22Ev();
extern void _ZN6S209C63v23Ev();
extern void _ZN6S209C63v24Ev();
extern void _ZN6S209C63v25Ev();
extern void _ZN6S209C63v26Ev();
extern void _ZN6S209C63v27Ev();
extern void _ZN6S209C63v28Ev();
extern void _ZN6S209C63v29Ev();
extern void _ZN6S209C63v30Ev();
extern void _ZN6S209C63v31Ev();
extern void _ZN6S209C63v32Ev();
extern void _ZN6S209C63v33Ev();
extern void _ZN6S209C63v34Ev();
extern void _ZN6S209C63v35Ev();
extern void _ZN6S209C63v36Ev();
extern void _ZN6S209C63v37Ev();
extern void _ZN6S209C63v38Ev();
extern void _ZN6S209C63v39Ev();
extern void _ZN6S209C63v40Ev();
extern void _ZN6S209C63v41Ev();
extern void _ZN6S209C63v42Ev();
extern void _ZN6S209C63v43Ev();
extern void _ZN6S209C63v44Ev();
extern void _ZN6S209C63v45Ev();
extern void _ZN6S209C63v46Ev();
extern void _ZN6S209C63v47Ev();
extern void _ZN6S209C63v48Ev();
extern void _ZN6S209C63v49Ev();
extern void _ZN6S209C63v50Ev();
extern void _ZN6S209C63v51Ev();
extern void _ZN6S209C63v52Ev();
extern void _ZN6S209C63v53Ev();
extern void _ZN6S209C63v54Ev();
extern void _ZN6S209C63v55Ev();
extern void _ZN6S209C63v56Ev();
extern void _ZN6S209C63v57Ev();
extern void _ZN6S209C63v58Ev();
extern void _ZN6S209C63v59Ev();
extern void _ZN6S209C63v60Ev();
extern void _ZN6S209C63v61Ev();
extern void _ZN6S209C63v62Ev();
extern void _ZN6S209C63v63Ev();
extern void _ZN6S209C63v64Ev();
extern void _ZN6S209C63v65Ev();
extern void _ZN6S209C63v66Ev();
extern void _ZN6S209C63v67Ev();
extern void _ZN6S209C53v68Ev();
extern void _ZN6S209C53v69Ev();
extern void _ZN6S209C53v70Ev();
extern void _ZN6S209C53v71Ev();
extern void _ZN6S209C53v72Ev();
extern void _ZN6S209C53v73Ev();
extern void _ZN6S209C53v74Ev();
extern void _ZN6S209C53v75Ev();
extern void _ZN6S209C53v76Ev();
extern void _ZN6S209C53v77Ev();
extern void _ZN6S209C53v78Ev();
extern void _ZN6S209C53v79Ev();
extern void _ZN6S209C53v80Ev();
extern void _ZN6S209C53v81Ev();
extern void _ZN6S209C53v82Ev();
extern void _ZN6S209C53v83Ev();
extern void _ZN6S209C53v84Ev();
extern void _ZN6S209C53v85Ev();
extern void _ZN6S209C53v86Ev();
extern void _ZN6S209C53v87Ev();
extern void _ZN6S209C53v88Ev();
extern void _ZN6S209C53v89Ev();
extern void _ZN6S209C43v90Ev();
extern void _ZN6S209C43v91Ev();
extern void _ZN6S209C43v92Ev();
extern void _ZN6S209C43v93Ev();
extern void _ZN6S209C43v94Ev();
extern void _ZN6S209C43v95Ev();
extern void _ZN6S209C43v96Ev();
extern void _ZN6S209C43v97Ev();
extern void _ZN6S209C43v98Ev();
extern void _ZN6S209C43v99Ev();
extern void _ZN6S209C44v100Ev();
extern void _ZN6S209C44v101Ev();
extern void _ZN6S209C44v102Ev();
extern void _ZN6S209C44v103Ev();
extern void _ZN6S209C44v104Ev();
extern void _ZN6S209C44v105Ev();
extern void _ZN6S209C44v106Ev();
extern void _ZN6S209C44v107Ev();
extern void _ZN6S209C44v108Ev();
extern void _ZN6S209C44v109Ev();
extern void _ZN6S209C34v110Ev();
extern void _ZN6S209C34v111Ev();
extern void _ZN6S209C34v112Ev();
extern void _ZN6S209C34v113Ev();
static  VTBL_ENTRY vtc_S209C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S209C3[0]),
  (VTBL_ENTRY)&_ZN6S209C3D1Ev,
  (VTBL_ENTRY)&_ZN6S209C3D0Ev,
  (VTBL_ENTRY)&_ZN6S209C62v4Ev,
  (VTBL_ENTRY)&_ZN6S209C62v5Ev,
  (VTBL_ENTRY)&_ZN6S209C62v6Ev,
  (VTBL_ENTRY)&_ZN6S209C62v7Ev,
  (VTBL_ENTRY)&_ZN6S209C62v8Ev,
  (VTBL_ENTRY)&_ZN6S209C62v9Ev,
  (VTBL_ENTRY)&_ZN6S209C63v10Ev,
  (VTBL_ENTRY)&_ZN6S209C63v11Ev,
  (VTBL_ENTRY)&_ZN6S209C63v12Ev,
  (VTBL_ENTRY)&_ZN6S209C63v13Ev,
  (VTBL_ENTRY)&_ZN6S209C63v14Ev,
  (VTBL_ENTRY)&_ZN6S209C63v15Ev,
  (VTBL_ENTRY)&_ZN6S209C63v16Ev,
  (VTBL_ENTRY)&_ZN6S209C63v17Ev,
  (VTBL_ENTRY)&_ZN6S209C63v18Ev,
  (VTBL_ENTRY)&_ZN6S209C63v19Ev,
  (VTBL_ENTRY)&_ZN6S209C63v20Ev,
  (VTBL_ENTRY)&_ZN6S209C63v21Ev,
  (VTBL_ENTRY)&_ZN6S209C63v22Ev,
  (VTBL_ENTRY)&_ZN6S209C63v23Ev,
  (VTBL_ENTRY)&_ZN6S209C63v24Ev,
  (VTBL_ENTRY)&_ZN6S209C63v25Ev,
  (VTBL_ENTRY)&_ZN6S209C63v26Ev,
  (VTBL_ENTRY)&_ZN6S209C63v27Ev,
  (VTBL_ENTRY)&_ZN6S209C63v28Ev,
  (VTBL_ENTRY)&_ZN6S209C63v29Ev,
  (VTBL_ENTRY)&_ZN6S209C63v30Ev,
  (VTBL_ENTRY)&_ZN6S209C63v31Ev,
  (VTBL_ENTRY)&_ZN6S209C63v32Ev,
  (VTBL_ENTRY)&_ZN6S209C63v33Ev,
  (VTBL_ENTRY)&_ZN6S209C63v34Ev,
  (VTBL_ENTRY)&_ZN6S209C63v35Ev,
  (VTBL_ENTRY)&_ZN6S209C63v36Ev,
  (VTBL_ENTRY)&_ZN6S209C63v37Ev,
  (VTBL_ENTRY)&_ZN6S209C63v38Ev,
  (VTBL_ENTRY)&_ZN6S209C63v39Ev,
  (VTBL_ENTRY)&_ZN6S209C63v40Ev,
  (VTBL_ENTRY)&_ZN6S209C63v41Ev,
  (VTBL_ENTRY)&_ZN6S209C63v42Ev,
  (VTBL_ENTRY)&_ZN6S209C63v43Ev,
  (VTBL_ENTRY)&_ZN6S209C63v44Ev,
  (VTBL_ENTRY)&_ZN6S209C63v45Ev,
  (VTBL_ENTRY)&_ZN6S209C63v46Ev,
  (VTBL_ENTRY)&_ZN6S209C63v47Ev,
  (VTBL_ENTRY)&_ZN6S209C63v48Ev,
  (VTBL_ENTRY)&_ZN6S209C63v49Ev,
  (VTBL_ENTRY)&_ZN6S209C63v50Ev,
  (VTBL_ENTRY)&_ZN6S209C63v51Ev,
  (VTBL_ENTRY)&_ZN6S209C63v52Ev,
  (VTBL_ENTRY)&_ZN6S209C63v53Ev,
  (VTBL_ENTRY)&_ZN6S209C63v54Ev,
  (VTBL_ENTRY)&_ZN6S209C63v55Ev,
  (VTBL_ENTRY)&_ZN6S209C63v56Ev,
  (VTBL_ENTRY)&_ZN6S209C63v57Ev,
  (VTBL_ENTRY)&_ZN6S209C63v58Ev,
  (VTBL_ENTRY)&_ZN6S209C63v59Ev,
  (VTBL_ENTRY)&_ZN6S209C63v60Ev,
  (VTBL_ENTRY)&_ZN6S209C63v61Ev,
  (VTBL_ENTRY)&_ZN6S209C63v62Ev,
  (VTBL_ENTRY)&_ZN6S209C63v63Ev,
  (VTBL_ENTRY)&_ZN6S209C63v64Ev,
  (VTBL_ENTRY)&_ZN6S209C63v65Ev,
  (VTBL_ENTRY)&_ZN6S209C63v66Ev,
  (VTBL_ENTRY)&_ZN6S209C63v67Ev,
  (VTBL_ENTRY)&_ZN6S209C53v68Ev,
  (VTBL_ENTRY)&_ZN6S209C53v69Ev,
  (VTBL_ENTRY)&_ZN6S209C53v70Ev,
  (VTBL_ENTRY)&_ZN6S209C53v71Ev,
  (VTBL_ENTRY)&_ZN6S209C53v72Ev,
  (VTBL_ENTRY)&_ZN6S209C53v73Ev,
  (VTBL_ENTRY)&_ZN6S209C53v74Ev,
  (VTBL_ENTRY)&_ZN6S209C53v75Ev,
  (VTBL_ENTRY)&_ZN6S209C53v76Ev,
  (VTBL_ENTRY)&_ZN6S209C53v77Ev,
  (VTBL_ENTRY)&_ZN6S209C53v78Ev,
  (VTBL_ENTRY)&_ZN6S209C53v79Ev,
  (VTBL_ENTRY)&_ZN6S209C53v80Ev,
  (VTBL_ENTRY)&_ZN6S209C53v81Ev,
  (VTBL_ENTRY)&_ZN6S209C53v82Ev,
  (VTBL_ENTRY)&_ZN6S209C53v83Ev,
  (VTBL_ENTRY)&_ZN6S209C53v84Ev,
  (VTBL_ENTRY)&_ZN6S209C53v85Ev,
  (VTBL_ENTRY)&_ZN6S209C53v86Ev,
  (VTBL_ENTRY)&_ZN6S209C53v87Ev,
  (VTBL_ENTRY)&_ZN6S209C53v88Ev,
  (VTBL_ENTRY)&_ZN6S209C53v89Ev,
  (VTBL_ENTRY)&_ZN6S209C43v90Ev,
  (VTBL_ENTRY)&_ZN6S209C43v91Ev,
  (VTBL_ENTRY)&_ZN6S209C43v92Ev,
  (VTBL_ENTRY)&_ZN6S209C43v93Ev,
  (VTBL_ENTRY)&_ZN6S209C43v94Ev,
  (VTBL_ENTRY)&_ZN6S209C43v95Ev,
  (VTBL_ENTRY)&_ZN6S209C43v96Ev,
  (VTBL_ENTRY)&_ZN6S209C43v97Ev,
  (VTBL_ENTRY)&_ZN6S209C43v98Ev,
  (VTBL_ENTRY)&_ZN6S209C43v99Ev,
  (VTBL_ENTRY)&_ZN6S209C44v100Ev,
  (VTBL_ENTRY)&_ZN6S209C44v101Ev,
  (VTBL_ENTRY)&_ZN6S209C44v102Ev,
  (VTBL_ENTRY)&_ZN6S209C44v103Ev,
  (VTBL_ENTRY)&_ZN6S209C44v104Ev,
  (VTBL_ENTRY)&_ZN6S209C44v105Ev,
  (VTBL_ENTRY)&_ZN6S209C44v106Ev,
  (VTBL_ENTRY)&_ZN6S209C44v107Ev,
  (VTBL_ENTRY)&_ZN6S209C44v108Ev,
  (VTBL_ENTRY)&_ZN6S209C44v109Ev,
  (VTBL_ENTRY)&_ZN6S209C34v110Ev,
  (VTBL_ENTRY)&_ZN6S209C34v111Ev,
  (VTBL_ENTRY)&_ZN6S209C34v112Ev,
  (VTBL_ENTRY)&_ZN6S209C34v113Ev,
};
extern VTBL_ENTRY _ZTI6S209C3[];
extern  VTBL_ENTRY _ZTV6S209C3[];
Class_Descriptor cd_S209C3 = {  "S209C3", // class name
  bases_S209C3, 3,
  &(vtc_S209C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S209C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S209C3),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  S209C2  : S209C3 {
  virtual  ~S209C2(); // _ZN6S209C2D1Ev
  virtual void  v114(); // _ZN6S209C24v114Ev
  virtual void  v115(); // _ZN6S209C24v115Ev
  S209C2(); // tgen
};
//SIG(-1 S209C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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] 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 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 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v109 v110 v111 v112 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2}


 S209C2 ::~S209C2(){ note_dtor("S209C2", this);}
void  S209C2 ::v114(){vfunc_called(this, "_ZN6S209C24v114Ev");}
void  S209C2 ::v115(){vfunc_called(this, "_ZN6S209C24v115Ev");}
S209C2 ::S209C2(){ note_ctor("S209C2", this);} // tgen

static void Test_S209C2()
{
  extern Class_Descriptor cd_S209C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S209C2, buf);
    S209C2 *dp, &lv = *(dp=new (buf) S209C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S209C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S209C2)");
    check_base_class_offset(lv, (S209C6*)(S209C5*)(S209C4*)(S209C3*), 0, "S209C2");
    check_base_class_offset(lv, (S209C5*)(S209C4*)(S209C3*), 0, "S209C2");
    check_base_class_offset(lv, (S209C4*)(S209C3*), 0, "S209C2");
    check_base_class_offset(lv, (S209C3*), 0, "S209C2");
    test_class_info(&lv, &cd_S209C2);
    dp->~S209C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS209C2(Test_S209C2, "S209C2", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S209C2C1Ev();
extern void _ZN6S209C2D1Ev();
Name_Map name_map_S209C2[] = {
  NSPAIR(_ZN6S209C2C1Ev),
  NSPAIR(_ZN6S209C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S209C6;
extern VTBL_ENTRY _ZTI6S209C6[];
extern  VTBL_ENTRY _ZTV6S209C6[];
extern Class_Descriptor cd_S209C5;
extern VTBL_ENTRY _ZTI6S209C5[];
extern  VTBL_ENTRY _ZTV6S209C5[];
extern Class_Descriptor cd_S209C4;
extern VTBL_ENTRY _ZTI6S209C4[];
extern  VTBL_ENTRY _ZTV6S209C4[];
extern Class_Descriptor cd_S209C3;
extern VTBL_ENTRY _ZTI6S209C3[];
extern  VTBL_ENTRY _ZTV6S209C3[];
static Base_Class bases_S209C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S209C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S209C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S209C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S209C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S209C2[];
extern void _ZN6S209C2D1Ev();
extern void _ZN6S209C2D0Ev();
extern void _ZN6S209C62v4Ev();
extern void _ZN6S209C62v5Ev();
extern void _ZN6S209C62v6Ev();
extern void _ZN6S209C62v7Ev();
extern void _ZN6S209C62v8Ev();
extern void _ZN6S209C62v9Ev();
extern void _ZN6S209C63v10Ev();
extern void _ZN6S209C63v11Ev();
extern void _ZN6S209C63v12Ev();
extern void _ZN6S209C63v13Ev();
extern void _ZN6S209C63v14Ev();
extern void _ZN6S209C63v15Ev();
extern void _ZN6S209C63v16Ev();
extern void _ZN6S209C63v17Ev();
extern void _ZN6S209C63v18Ev();
extern void _ZN6S209C63v19Ev();
extern void _ZN6S209C63v20Ev();
extern void _ZN6S209C63v21Ev();
extern void _ZN6S209C63v22Ev();
extern void _ZN6S209C63v23Ev();
extern void _ZN6S209C63v24Ev();
extern void _ZN6S209C63v25Ev();
extern void _ZN6S209C63v26Ev();
extern void _ZN6S209C63v27Ev();
extern void _ZN6S209C63v28Ev();
extern void _ZN6S209C63v29Ev();
extern void _ZN6S209C63v30Ev();
extern void _ZN6S209C63v31Ev();
extern void _ZN6S209C63v32Ev();
extern void _ZN6S209C63v33Ev();
extern void _ZN6S209C63v34Ev();
extern void _ZN6S209C63v35Ev();
extern void _ZN6S209C63v36Ev();
extern void _ZN6S209C63v37Ev();
extern void _ZN6S209C63v38Ev();
extern void _ZN6S209C63v39Ev();
extern void _ZN6S209C63v40Ev();
extern void _ZN6S209C63v41Ev();
extern void _ZN6S209C63v42Ev();
extern void _ZN6S209C63v43Ev();
extern void _ZN6S209C63v44Ev();
extern void _ZN6S209C63v45Ev();
extern void _ZN6S209C63v46Ev();
extern void _ZN6S209C63v47Ev();
extern void _ZN6S209C63v48Ev();
extern void _ZN6S209C63v49Ev();
extern void _ZN6S209C63v50Ev();
extern void _ZN6S209C63v51Ev();
extern void _ZN6S209C63v52Ev();
extern void _ZN6S209C63v53Ev();
extern void _ZN6S209C63v54Ev();
extern void _ZN6S209C63v55Ev();
extern void _ZN6S209C63v56Ev();
extern void _ZN6S209C63v57Ev();
extern void _ZN6S209C63v58Ev();
extern void _ZN6S209C63v59Ev();
extern void _ZN6S209C63v60Ev();
extern void _ZN6S209C63v61Ev();
extern void _ZN6S209C63v62Ev();
extern void _ZN6S209C63v63Ev();
extern void _ZN6S209C63v64Ev();
extern void _ZN6S209C63v65Ev();
extern void _ZN6S209C63v66Ev();
extern void _ZN6S209C63v67Ev();
extern void _ZN6S209C53v68Ev();
extern void _ZN6S209C53v69Ev();
extern void _ZN6S209C53v70Ev();
extern void _ZN6S209C53v71Ev();
extern void _ZN6S209C53v72Ev();
extern void _ZN6S209C53v73Ev();
extern void _ZN6S209C53v74Ev();
extern void _ZN6S209C53v75Ev();
extern void _ZN6S209C53v76Ev();
extern void _ZN6S209C53v77Ev();
extern void _ZN6S209C53v78Ev();
extern void _ZN6S209C53v79Ev();
extern void _ZN6S209C53v80Ev();
extern void _ZN6S209C53v81Ev();
extern void _ZN6S209C53v82Ev();
extern void _ZN6S209C53v83Ev();
extern void _ZN6S209C53v84Ev();
extern void _ZN6S209C53v85Ev();
extern void _ZN6S209C53v86Ev();
extern void _ZN6S209C53v87Ev();
extern void _ZN6S209C53v88Ev();
extern void _ZN6S209C53v89Ev();
extern void _ZN6S209C43v90Ev();
extern void _ZN6S209C43v91Ev();
extern void _ZN6S209C43v92Ev();
extern void _ZN6S209C43v93Ev();
extern void _ZN6S209C43v94Ev();
extern void _ZN6S209C43v95Ev();
extern void _ZN6S209C43v96Ev();
extern void _ZN6S209C43v97Ev();
extern void _ZN6S209C43v98Ev();
extern void _ZN6S209C43v99Ev();
extern void _ZN6S209C44v100Ev();
extern void _ZN6S209C44v101Ev();
extern void _ZN6S209C44v102Ev();
extern void _ZN6S209C44v103Ev();
extern void _ZN6S209C44v104Ev();
extern void _ZN6S209C44v105Ev();
extern void _ZN6S209C44v106Ev();
extern void _ZN6S209C44v107Ev();
extern void _ZN6S209C44v108Ev();
extern void _ZN6S209C44v109Ev();
extern void _ZN6S209C34v110Ev();
extern void _ZN6S209C34v111Ev();
extern void _ZN6S209C34v112Ev();
extern void _ZN6S209C34v113Ev();
extern void _ZN6S209C24v114Ev();
extern void _ZN6S209C24v115Ev();
static  VTBL_ENTRY vtc_S209C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S209C2[0]),
  (VTBL_ENTRY)&_ZN6S209C2D1Ev,
  (VTBL_ENTRY)&_ZN6S209C2D0Ev,
  (VTBL_ENTRY)&_ZN6S209C62v4Ev,
  (VTBL_ENTRY)&_ZN6S209C62v5Ev,
  (VTBL_ENTRY)&_ZN6S209C62v6Ev,
  (VTBL_ENTRY)&_ZN6S209C62v7Ev,
  (VTBL_ENTRY)&_ZN6S209C62v8Ev,
  (VTBL_ENTRY)&_ZN6S209C62v9Ev,
  (VTBL_ENTRY)&_ZN6S209C63v10Ev,
  (VTBL_ENTRY)&_ZN6S209C63v11Ev,
  (VTBL_ENTRY)&_ZN6S209C63v12Ev,
  (VTBL_ENTRY)&_ZN6S209C63v13Ev,
  (VTBL_ENTRY)&_ZN6S209C63v14Ev,
  (VTBL_ENTRY)&_ZN6S209C63v15Ev,
  (VTBL_ENTRY)&_ZN6S209C63v16Ev,
  (VTBL_ENTRY)&_ZN6S209C63v17Ev,
  (VTBL_ENTRY)&_ZN6S209C63v18Ev,
  (VTBL_ENTRY)&_ZN6S209C63v19Ev,
  (VTBL_ENTRY)&_ZN6S209C63v20Ev,
  (VTBL_ENTRY)&_ZN6S209C63v21Ev,
  (VTBL_ENTRY)&_ZN6S209C63v22Ev,
  (VTBL_ENTRY)&_ZN6S209C63v23Ev,
  (VTBL_ENTRY)&_ZN6S209C63v24Ev,
  (VTBL_ENTRY)&_ZN6S209C63v25Ev,
  (VTBL_ENTRY)&_ZN6S209C63v26Ev,
  (VTBL_ENTRY)&_ZN6S209C63v27Ev,
  (VTBL_ENTRY)&_ZN6S209C63v28Ev,
  (VTBL_ENTRY)&_ZN6S209C63v29Ev,
  (VTBL_ENTRY)&_ZN6S209C63v30Ev,
  (VTBL_ENTRY)&_ZN6S209C63v31Ev,
  (VTBL_ENTRY)&_ZN6S209C63v32Ev,
  (VTBL_ENTRY)&_ZN6S209C63v33Ev,
  (VTBL_ENTRY)&_ZN6S209C63v34Ev,
  (VTBL_ENTRY)&_ZN6S209C63v35Ev,
  (VTBL_ENTRY)&_ZN6S209C63v36Ev,
  (VTBL_ENTRY)&_ZN6S209C63v37Ev,
  (VTBL_ENTRY)&_ZN6S209C63v38Ev,
  (VTBL_ENTRY)&_ZN6S209C63v39Ev,
  (VTBL_ENTRY)&_ZN6S209C63v40Ev,
  (VTBL_ENTRY)&_ZN6S209C63v41Ev,
  (VTBL_ENTRY)&_ZN6S209C63v42Ev,
  (VTBL_ENTRY)&_ZN6S209C63v43Ev,
  (VTBL_ENTRY)&_ZN6S209C63v44Ev,
  (VTBL_ENTRY)&_ZN6S209C63v45Ev,
  (VTBL_ENTRY)&_ZN6S209C63v46Ev,
  (VTBL_ENTRY)&_ZN6S209C63v47Ev,
  (VTBL_ENTRY)&_ZN6S209C63v48Ev,
  (VTBL_ENTRY)&_ZN6S209C63v49Ev,
  (VTBL_ENTRY)&_ZN6S209C63v50Ev,
  (VTBL_ENTRY)&_ZN6S209C63v51Ev,
  (VTBL_ENTRY)&_ZN6S209C63v52Ev,
  (VTBL_ENTRY)&_ZN6S209C63v53Ev,
  (VTBL_ENTRY)&_ZN6S209C63v54Ev,
  (VTBL_ENTRY)&_ZN6S209C63v55Ev,
  (VTBL_ENTRY)&_ZN6S209C63v56Ev,
  (VTBL_ENTRY)&_ZN6S209C63v57Ev,
  (VTBL_ENTRY)&_ZN6S209C63v58Ev,
  (VTBL_ENTRY)&_ZN6S209C63v59Ev,
  (VTBL_ENTRY)&_ZN6S209C63v60Ev,
  (VTBL_ENTRY)&_ZN6S209C63v61Ev,
  (VTBL_ENTRY)&_ZN6S209C63v62Ev,
  (VTBL_ENTRY)&_ZN6S209C63v63Ev,
  (VTBL_ENTRY)&_ZN6S209C63v64Ev,
  (VTBL_ENTRY)&_ZN6S209C63v65Ev,
  (VTBL_ENTRY)&_ZN6S209C63v66Ev,
  (VTBL_ENTRY)&_ZN6S209C63v67Ev,
  (VTBL_ENTRY)&_ZN6S209C53v68Ev,
  (VTBL_ENTRY)&_ZN6S209C53v69Ev,
  (VTBL_ENTRY)&_ZN6S209C53v70Ev,
  (VTBL_ENTRY)&_ZN6S209C53v71Ev,
  (VTBL_ENTRY)&_ZN6S209C53v72Ev,
  (VTBL_ENTRY)&_ZN6S209C53v73Ev,
  (VTBL_ENTRY)&_ZN6S209C53v74Ev,
  (VTBL_ENTRY)&_ZN6S209C53v75Ev,
  (VTBL_ENTRY)&_ZN6S209C53v76Ev,
  (VTBL_ENTRY)&_ZN6S209C53v77Ev,
  (VTBL_ENTRY)&_ZN6S209C53v78Ev,
  (VTBL_ENTRY)&_ZN6S209C53v79Ev,
  (VTBL_ENTRY)&_ZN6S209C53v80Ev,
  (VTBL_ENTRY)&_ZN6S209C53v81Ev,
  (VTBL_ENTRY)&_ZN6S209C53v82Ev,
  (VTBL_ENTRY)&_ZN6S209C53v83Ev,
  (VTBL_ENTRY)&_ZN6S209C53v84Ev,
  (VTBL_ENTRY)&_ZN6S209C53v85Ev,
  (VTBL_ENTRY)&_ZN6S209C53v86Ev,
  (VTBL_ENTRY)&_ZN6S209C53v87Ev,
  (VTBL_ENTRY)&_ZN6S209C53v88Ev,
  (VTBL_ENTRY)&_ZN6S209C53v89Ev,
  (VTBL_ENTRY)&_ZN6S209C43v90Ev,
  (VTBL_ENTRY)&_ZN6S209C43v91Ev,
  (VTBL_ENTRY)&_ZN6S209C43v92Ev,
  (VTBL_ENTRY)&_ZN6S209C43v93Ev,
  (VTBL_ENTRY)&_ZN6S209C43v94Ev,
  (VTBL_ENTRY)&_ZN6S209C43v95Ev,
  (VTBL_ENTRY)&_ZN6S209C43v96Ev,
  (VTBL_ENTRY)&_ZN6S209C43v97Ev,
  (VTBL_ENTRY)&_ZN6S209C43v98Ev,
  (VTBL_ENTRY)&_ZN6S209C43v99Ev,
  (VTBL_ENTRY)&_ZN6S209C44v100Ev,
  (VTBL_ENTRY)&_ZN6S209C44v101Ev,
  (VTBL_ENTRY)&_ZN6S209C44v102Ev,
  (VTBL_ENTRY)&_ZN6S209C44v103Ev,
  (VTBL_ENTRY)&_ZN6S209C44v104Ev,
  (VTBL_ENTRY)&_ZN6S209C44v105Ev,
  (VTBL_ENTRY)&_ZN6S209C44v106Ev,
  (VTBL_ENTRY)&_ZN6S209C44v107Ev,
  (VTBL_ENTRY)&_ZN6S209C44v108Ev,
  (VTBL_ENTRY)&_ZN6S209C44v109Ev,
  (VTBL_ENTRY)&_ZN6S209C34v110Ev,
  (VTBL_ENTRY)&_ZN6S209C34v111Ev,
  (VTBL_ENTRY)&_ZN6S209C34v112Ev,
  (VTBL_ENTRY)&_ZN6S209C34v113Ev,
  (VTBL_ENTRY)&_ZN6S209C24v114Ev,
  (VTBL_ENTRY)&_ZN6S209C24v115Ev,
};
extern VTBL_ENTRY _ZTI6S209C2[];
extern  VTBL_ENTRY _ZTV6S209C2[];
Class_Descriptor cd_S209C2 = {  "S209C2", // class name
  bases_S209C2, 4,
  &(vtc_S209C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S209C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S209C2),116, //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  S209C1  : S209C2 {
  ::S210C8_nt s209c1f0;
  ::S210C8_nt s209c1f1;
  virtual  ~S209C1(); // _ZN6S209C1D1Ev
  virtual void  v1(); // _ZN6S209C12v1Ev
  virtual void  v2(); // _ZN6S209C12v2Ev
  virtual void  v3(); // _ZN6S209C12v3Ev
  S209C1(); // tgen
};
//SIG(1 S209C1) 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 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v114 v115} vd v1 v2 v3 FC8 FC8}


 S209C1 ::~S209C1(){ note_dtor("S209C1", this);}
void  S209C1 ::v1(){vfunc_called(this, "_ZN6S209C12v1Ev");}
void  S209C1 ::v2(){vfunc_called(this, "_ZN6S209C12v2Ev");}
void  S209C1 ::v3(){vfunc_called(this, "_ZN6S209C12v3Ev");}
S209C1 ::S209C1(){ note_ctor("S209C1", this);} // tgen

static void Test_S209C1()
{
  extern Class_Descriptor cd_S209C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,62)];
    init_test(&cd_S209C1, buf);
    S209C1 *dp, &lv = *(dp=new (buf) S209C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,244), "sizeof(S209C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S209C1)");
    check_base_class_offset(lv, (S209C6*)(S209C5*)(S209C4*)(S209C3*)(S209C2*), 0, "S209C1");
    check_base_class_offset(lv, (S209C5*)(S209C4*)(S209C3*)(S209C2*), 0, "S209C1");
    check_base_class_offset(lv, (S209C4*)(S209C3*)(S209C2*), 0, "S209C1");
    check_base_class_offset(lv, (S209C3*)(S209C2*), 0, "S209C1");
    check_base_class_offset(lv, (S209C2*), 0, "S209C1");
    check_field_offset(lv, s209c1f0, ABISELECT(296,220), "S209C1.s209c1f0");
    check_field_offset(lv, s209c1f1, ABISELECT(312,232), "S209C1.s209c1f1");
    test_class_info(&lv, &cd_S209C1);
    dp->~S209C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS209C1(Test_S209C1, "S209C1", ABISELECT(328,244));

#else // __cplusplus

extern void _ZN6S209C1C1Ev();
extern void _ZN6S209C1D1Ev();
Name_Map name_map_S209C1[] = {
  NSPAIR(_ZN6S209C1C1Ev),
  NSPAIR(_ZN6S209C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S209C6;
extern VTBL_ENTRY _ZTI6S209C6[];
extern  VTBL_ENTRY _ZTV6S209C6[];
extern Class_Descriptor cd_S209C5;
extern VTBL_ENTRY _ZTI6S209C5[];
extern  VTBL_ENTRY _ZTV6S209C5[];
extern Class_Descriptor cd_S209C4;
extern VTBL_ENTRY _ZTI6S209C4[];
extern  VTBL_ENTRY _ZTV6S209C4[];
extern Class_Descriptor cd_S209C3;
extern VTBL_ENTRY _ZTI6S209C3[];
extern  VTBL_ENTRY _ZTV6S209C3[];
extern Class_Descriptor cd_S209C2;
extern VTBL_ENTRY _ZTI6S209C2[];
extern  VTBL_ENTRY _ZTV6S209C2[];
static Base_Class bases_S209C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S209C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S209C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S209C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S209C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S209C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S209C1[];
extern void _ZN6S209C1D1Ev();
extern void _ZN6S209C1D0Ev();
extern void _ZN6S209C62v4Ev();
extern void _ZN6S209C62v5Ev();
extern void _ZN6S209C62v6Ev();
extern void _ZN6S209C62v7Ev();
extern void _ZN6S209C62v8Ev();
extern void _ZN6S209C62v9Ev();
extern void _ZN6S209C63v10Ev();
extern void _ZN6S209C63v11Ev();
extern void _ZN6S209C63v12Ev();
extern void _ZN6S209C63v13Ev();
extern void _ZN6S209C63v14Ev();
extern void _ZN6S209C63v15Ev();
extern void _ZN6S209C63v16Ev();
extern void _ZN6S209C63v17Ev();
extern void _ZN6S209C63v18Ev();
extern void _ZN6S209C63v19Ev();
extern void _ZN6S209C63v20Ev();
extern void _ZN6S209C63v21Ev();
extern void _ZN6S209C63v22Ev();
extern void _ZN6S209C63v23Ev();
extern void _ZN6S209C63v24Ev();
extern void _ZN6S209C63v25Ev();
extern void _ZN6S209C63v26Ev();
extern void _ZN6S209C63v27Ev();
extern void _ZN6S209C63v28Ev();
extern void _ZN6S209C63v29Ev();
extern void _ZN6S209C63v30Ev();
extern void _ZN6S209C63v31Ev();
extern void _ZN6S209C63v32Ev();
extern void _ZN6S209C63v33Ev();
extern void _ZN6S209C63v34Ev();
extern void _ZN6S209C63v35Ev();
extern void _ZN6S209C63v36Ev();
extern void _ZN6S209C63v37Ev();
extern void _ZN6S209C63v38Ev();
extern void _ZN6S209C63v39Ev();
extern void _ZN6S209C63v40Ev();
extern void _ZN6S209C63v41Ev();
extern void _ZN6S209C63v42Ev();
extern void _ZN6S209C63v43Ev();
extern void _ZN6S209C63v44Ev();
extern void _ZN6S209C63v45Ev();
extern void _ZN6S209C63v46Ev();
extern void _ZN6S209C63v47Ev();
extern void _ZN6S209C63v48Ev();
extern void _ZN6S209C63v49Ev();
extern void _ZN6S209C63v50Ev();
extern void _ZN6S209C63v51Ev();
extern void _ZN6S209C63v52Ev();
extern void _ZN6S209C63v53Ev();
extern void _ZN6S209C63v54Ev();
extern void _ZN6S209C63v55Ev();
extern void _ZN6S209C63v56Ev();
extern void _ZN6S209C63v57Ev();
extern void _ZN6S209C63v58Ev();
extern void _ZN6S209C63v59Ev();
extern void _ZN6S209C63v60Ev();
extern void _ZN6S209C63v61Ev();
extern void _ZN6S209C63v62Ev();
extern void _ZN6S209C63v63Ev();
extern void _ZN6S209C63v64Ev();
extern void _ZN6S209C63v65Ev();
extern void _ZN6S209C63v66Ev();
extern void _ZN6S209C63v67Ev();
extern void _ZN6S209C53v68Ev();
extern void _ZN6S209C53v69Ev();
extern void _ZN6S209C53v70Ev();
extern void _ZN6S209C53v71Ev();
extern void _ZN6S209C53v72Ev();
extern void _ZN6S209C53v73Ev();
extern void _ZN6S209C53v74Ev();
extern void _ZN6S209C53v75Ev();
extern void _ZN6S209C53v76Ev();
extern void _ZN6S209C53v77Ev();
extern void _ZN6S209C53v78Ev();
extern void _ZN6S209C53v79Ev();
extern void _ZN6S209C53v80Ev();
extern void _ZN6S209C53v81Ev();
extern void _ZN6S209C53v82Ev();
extern void _ZN6S209C53v83Ev();
extern void _ZN6S209C53v84Ev();
extern void _ZN6S209C53v85Ev();
extern void _ZN6S209C53v86Ev();
extern void _ZN6S209C53v87Ev();
extern void _ZN6S209C53v88Ev();
extern void _ZN6S209C53v89Ev();
extern void _ZN6S209C43v90Ev();
extern void _ZN6S209C43v91Ev();
extern void _ZN6S209C43v92Ev();
extern void _ZN6S209C43v93Ev();
extern void _ZN6S209C43v94Ev();
extern void _ZN6S209C43v95Ev();
extern void _ZN6S209C43v96Ev();
extern void _ZN6S209C43v97Ev();
extern void _ZN6S209C43v98Ev();
extern void _ZN6S209C43v99Ev();
extern void _ZN6S209C44v100Ev();
extern void _ZN6S209C44v101Ev();
extern void _ZN6S209C44v102Ev();
extern void _ZN6S209C44v103Ev();
extern void _ZN6S209C44v104Ev();
extern void _ZN6S209C44v105Ev();
extern void _ZN6S209C44v106Ev();
extern void _ZN6S209C44v107Ev();
extern void _ZN6S209C44v108Ev();
extern void _ZN6S209C44v109Ev();
extern void _ZN6S209C34v110Ev();
extern void _ZN6S209C34v111Ev();
extern void _ZN6S209C34v112Ev();
extern void _ZN6S209C34v113Ev();
extern void _ZN6S209C24v114Ev();
extern void _ZN6S209C24v115Ev();
extern void _ZN6S209C12v1Ev();
extern void _ZN6S209C12v2Ev();
extern void _ZN6S209C12v3Ev();
static  VTBL_ENTRY vtc_S209C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S209C1[0]),
  (VTBL_ENTRY)&_ZN6S209C1D1Ev,
  (VTBL_ENTRY)&_ZN6S209C1D0Ev,
  (VTBL_ENTRY)&_ZN6S209C62v4Ev,
  (VTBL_ENTRY)&_ZN6S209C62v5Ev,
  (VTBL_ENTRY)&_ZN6S209C62v6Ev,
  (VTBL_ENTRY)&_ZN6S209C62v7Ev,
  (VTBL_ENTRY)&_ZN6S209C62v8Ev,
  (VTBL_ENTRY)&_ZN6S209C62v9Ev,
  (VTBL_ENTRY)&_ZN6S209C63v10Ev,
  (VTBL_ENTRY)&_ZN6S209C63v11Ev,
  (VTBL_ENTRY)&_ZN6S209C63v12Ev,
  (VTBL_ENTRY)&_ZN6S209C63v13Ev,
  (VTBL_ENTRY)&_ZN6S209C63v14Ev,
  (VTBL_ENTRY)&_ZN6S209C63v15Ev,
  (VTBL_ENTRY)&_ZN6S209C63v16Ev,
  (VTBL_ENTRY)&_ZN6S209C63v17Ev,
  (VTBL_ENTRY)&_ZN6S209C63v18Ev,
  (VTBL_ENTRY)&_ZN6S209C63v19Ev,
  (VTBL_ENTRY)&_ZN6S209C63v20Ev,
  (VTBL_ENTRY)&_ZN6S209C63v21Ev,
  (VTBL_ENTRY)&_ZN6S209C63v22Ev,
  (VTBL_ENTRY)&_ZN6S209C63v23Ev,
  (VTBL_ENTRY)&_ZN6S209C63v24Ev,
  (VTBL_ENTRY)&_ZN6S209C63v25Ev,
  (VTBL_ENTRY)&_ZN6S209C63v26Ev,
  (VTBL_ENTRY)&_ZN6S209C63v27Ev,
  (VTBL_ENTRY)&_ZN6S209C63v28Ev,
  (VTBL_ENTRY)&_ZN6S209C63v29Ev,
  (VTBL_ENTRY)&_ZN6S209C63v30Ev,
  (VTBL_ENTRY)&_ZN6S209C63v31Ev,
  (VTBL_ENTRY)&_ZN6S209C63v32Ev,
  (VTBL_ENTRY)&_ZN6S209C63v33Ev,
  (VTBL_ENTRY)&_ZN6S209C63v34Ev,
  (VTBL_ENTRY)&_ZN6S209C63v35Ev,
  (VTBL_ENTRY)&_ZN6S209C63v36Ev,
  (VTBL_ENTRY)&_ZN6S209C63v37Ev,
  (VTBL_ENTRY)&_ZN6S209C63v38Ev,
  (VTBL_ENTRY)&_ZN6S209C63v39Ev,
  (VTBL_ENTRY)&_ZN6S209C63v40Ev,
  (VTBL_ENTRY)&_ZN6S209C63v41Ev,
  (VTBL_ENTRY)&_ZN6S209C63v42Ev,
  (VTBL_ENTRY)&_ZN6S209C63v43Ev,
  (VTBL_ENTRY)&_ZN6S209C63v44Ev,
  (VTBL_ENTRY)&_ZN6S209C63v45Ev,
  (VTBL_ENTRY)&_ZN6S209C63v46Ev,
  (VTBL_ENTRY)&_ZN6S209C63v47Ev,
  (VTBL_ENTRY)&_ZN6S209C63v48Ev,
  (VTBL_ENTRY)&_ZN6S209C63v49Ev,
  (VTBL_ENTRY)&_ZN6S209C63v50Ev,
  (VTBL_ENTRY)&_ZN6S209C63v51Ev,
  (VTBL_ENTRY)&_ZN6S209C63v52Ev,
  (VTBL_ENTRY)&_ZN6S209C63v53Ev,
  (VTBL_ENTRY)&_ZN6S209C63v54Ev,
  (VTBL_ENTRY)&_ZN6S209C63v55Ev,
  (VTBL_ENTRY)&_ZN6S209C63v56Ev,
  (VTBL_ENTRY)&_ZN6S209C63v57Ev,
  (VTBL_ENTRY)&_ZN6S209C63v58Ev,
  (VTBL_ENTRY)&_ZN6S209C63v59Ev,
  (VTBL_ENTRY)&_ZN6S209C63v60Ev,
  (VTBL_ENTRY)&_ZN6S209C63v61Ev,
  (VTBL_ENTRY)&_ZN6S209C63v62Ev,
  (VTBL_ENTRY)&_ZN6S209C63v63Ev,
  (VTBL_ENTRY)&_ZN6S209C63v64Ev,
  (VTBL_ENTRY)&_ZN6S209C63v65Ev,
  (VTBL_ENTRY)&_ZN6S209C63v66Ev,
  (VTBL_ENTRY)&_ZN6S209C63v67Ev,
  (VTBL_ENTRY)&_ZN6S209C53v68Ev,
  (VTBL_ENTRY)&_ZN6S209C53v69Ev,
  (VTBL_ENTRY)&_ZN6S209C53v70Ev,
  (VTBL_ENTRY)&_ZN6S209C53v71Ev,
  (VTBL_ENTRY)&_ZN6S209C53v72Ev,
  (VTBL_ENTRY)&_ZN6S209C53v73Ev,
  (VTBL_ENTRY)&_ZN6S209C53v74Ev,
  (VTBL_ENTRY)&_ZN6S209C53v75Ev,
  (VTBL_ENTRY)&_ZN6S209C53v76Ev,
  (VTBL_ENTRY)&_ZN6S209C53v77Ev,
  (VTBL_ENTRY)&_ZN6S209C53v78Ev,
  (VTBL_ENTRY)&_ZN6S209C53v79Ev,
  (VTBL_ENTRY)&_ZN6S209C53v80Ev,
  (VTBL_ENTRY)&_ZN6S209C53v81Ev,
  (VTBL_ENTRY)&_ZN6S209C53v82Ev,
  (VTBL_ENTRY)&_ZN6S209C53v83Ev,
  (VTBL_ENTRY)&_ZN6S209C53v84Ev,
  (VTBL_ENTRY)&_ZN6S209C53v85Ev,
  (VTBL_ENTRY)&_ZN6S209C53v86Ev,
  (VTBL_ENTRY)&_ZN6S209C53v87Ev,
  (VTBL_ENTRY)&_ZN6S209C53v88Ev,
  (VTBL_ENTRY)&_ZN6S209C53v89Ev,
  (VTBL_ENTRY)&_ZN6S209C43v90Ev,
  (VTBL_ENTRY)&_ZN6S209C43v91Ev,
  (VTBL_ENTRY)&_ZN6S209C43v92Ev,
  (VTBL_ENTRY)&_ZN6S209C43v93Ev,
  (VTBL_ENTRY)&_ZN6S209C43v94Ev,
  (VTBL_ENTRY)&_ZN6S209C43v95Ev,
  (VTBL_ENTRY)&_ZN6S209C43v96Ev,
  (VTBL_ENTRY)&_ZN6S209C43v97Ev,
  (VTBL_ENTRY)&_ZN6S209C43v98Ev,
  (VTBL_ENTRY)&_ZN6S209C43v99Ev,
  (VTBL_ENTRY)&_ZN6S209C44v100Ev,
  (VTBL_ENTRY)&_ZN6S209C44v101Ev,
  (VTBL_ENTRY)&_ZN6S209C44v102Ev,
  (VTBL_ENTRY)&_ZN6S209C44v103Ev,
  (VTBL_ENTRY)&_ZN6S209C44v104Ev,
  (VTBL_ENTRY)&_ZN6S209C44v105Ev,
  (VTBL_ENTRY)&_ZN6S209C44v106Ev,
  (VTBL_ENTRY)&_ZN6S209C44v107Ev,
  (VTBL_ENTRY)&_ZN6S209C44v108Ev,
  (VTBL_ENTRY)&_ZN6S209C44v109Ev,
  (VTBL_ENTRY)&_ZN6S209C34v110Ev,
  (VTBL_ENTRY)&_ZN6S209C34v111Ev,
  (VTBL_ENTRY)&_ZN6S209C34v112Ev,
  (VTBL_ENTRY)&_ZN6S209C34v113Ev,
  (VTBL_ENTRY)&_ZN6S209C24v114Ev,
  (VTBL_ENTRY)&_ZN6S209C24v115Ev,
  (VTBL_ENTRY)&_ZN6S209C12v1Ev,
  (VTBL_ENTRY)&_ZN6S209C12v2Ev,
  (VTBL_ENTRY)&_ZN6S209C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S209C1[];
extern  VTBL_ENTRY _ZTV6S209C1[];
Class_Descriptor cd_S209C1 = {  "S209C1", // class name
  bases_S209C1, 5,
  &(vtc_S209C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,244), // object size
  NSPAIRA(_ZTI6S209C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S209C1),119, //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  S247C6  {
  int s247c6f0;
  __tsi64 s247c6f1;
  void *s247c6f2[4];
  int s247c6f3[2];
  void *s247c6f4;
  ::S1503C5_nt s247c6f5;
  void *s247c6f6[2];
  virtual  ~S247C6(); // _ZN6S247C6D1Ev
  virtual void  v5(); // _ZN6S247C62v5Ev
  virtual void  v6(); // _ZN6S247C62v6Ev
  virtual void  v7(); // _ZN6S247C62v7Ev
  virtual void  v8(); // _ZN6S247C62v8Ev
  virtual void  v9(); // _ZN6S247C62v9Ev
  virtual void  v10(); // _ZN6S247C63v10Ev
  virtual void  v11(); // _ZN6S247C63v11Ev
  virtual void  v12(); // _ZN6S247C63v12Ev
  virtual void  v13(); // _ZN6S247C63v13Ev
  virtual void  v14(); // _ZN6S247C63v14Ev
  virtual void  v15(); // _ZN6S247C63v15Ev
  virtual void  v16(); // _ZN6S247C63v16Ev
  virtual void  v17(); // _ZN6S247C63v17Ev
  virtual void  v18(); // _ZN6S247C63v18Ev
  virtual void  v19(); // _ZN6S247C63v19Ev
  virtual void  v20(); // _ZN6S247C63v20Ev
  virtual void  v21(); // _ZN6S247C63v21Ev
  virtual void  v22(); // _ZN6S247C63v22Ev
  virtual void  v23(); // _ZN6S247C63v23Ev
  virtual void  v24(); // _ZN6S247C63v24Ev
  virtual void  v25(); // _ZN6S247C63v25Ev
  virtual void  v26(); // _ZN6S247C63v26Ev
  virtual void  v27(); // _ZN6S247C63v27Ev
  virtual void  v28(); // _ZN6S247C63v28Ev
  virtual void  v29(); // _ZN6S247C63v29Ev
  virtual void  v30(); // _ZN6S247C63v30Ev
  virtual void  v31(); // _ZN6S247C63v31Ev
  virtual void  v32(); // _ZN6S247C63v32Ev
  virtual void  v33(); // _ZN6S247C63v33Ev
  virtual void  v34(); // _ZN6S247C63v34Ev
  virtual void  v35(); // _ZN6S247C63v35Ev
  virtual void  v36(); // _ZN6S247C63v36Ev
  virtual void  v37(); // _ZN6S247C63v37Ev
  virtual void  v38(); // _ZN6S247C63v38Ev
  virtual void  v39(); // _ZN6S247C63v39Ev
  virtual void  v40(); // _ZN6S247C63v40Ev
  virtual void  v41(); // _ZN6S247C63v41Ev
  virtual void  v42(); // _ZN6S247C63v42Ev
  virtual void  v43(); // _ZN6S247C63v43Ev
  virtual void  v44(); // _ZN6S247C63v44Ev
  virtual void  v45(); // _ZN6S247C63v45Ev
  virtual void  v46(); // _ZN6S247C63v46Ev
  virtual void  v47(); // _ZN6S247C63v47Ev
  virtual void  v48(); // _ZN6S247C63v48Ev
  virtual void  v49(); // _ZN6S247C63v49Ev
  virtual void  v50(); // _ZN6S247C63v50Ev
  virtual void  v51(); // _ZN6S247C63v51Ev
  virtual void  v52(); // _ZN6S247C63v52Ev
  virtual void  v53(); // _ZN6S247C63v53Ev
  virtual void  v54(); // _ZN6S247C63v54Ev
  virtual void  v55(); // _ZN6S247C63v55Ev
  virtual void  v56(); // _ZN6S247C63v56Ev
  virtual void  v57(); // _ZN6S247C63v57Ev
  virtual void  v58(); // _ZN6S247C63v58Ev
  virtual void  v59(); // _ZN6S247C63v59Ev
  virtual void  v60(); // _ZN6S247C63v60Ev
  virtual void  v61(); // _ZN6S247C63v61Ev
  virtual void  v62(); // _ZN6S247C63v62Ev
  virtual void  v63(); // _ZN6S247C63v63Ev
  virtual void  v64(); // _ZN6S247C63v64Ev
  virtual void  v65(); // _ZN6S247C63v65Ev
  virtual void  v66(); // _ZN6S247C63v66Ev
  virtual void  v67(); // _ZN6S247C63v67Ev
  virtual void  v68(); // _ZN6S247C63v68Ev
  S247C6(); // tgen
};
//SIG(-1 S247C6) 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]}


 S247C6 ::~S247C6(){ note_dtor("S247C6", this);}
void  S247C6 ::v5(){vfunc_called(this, "_ZN6S247C62v5Ev");}
void  S247C6 ::v6(){vfunc_called(this, "_ZN6S247C62v6Ev");}
void  S247C6 ::v7(){vfunc_called(this, "_ZN6S247C62v7Ev");}
void  S247C6 ::v8(){vfunc_called(this, "_ZN6S247C62v8Ev");}
void  S247C6 ::v9(){vfunc_called(this, "_ZN6S247C62v9Ev");}
void  S247C6 ::v10(){vfunc_called(this, "_ZN6S247C63v10Ev");}
void  S247C6 ::v11(){vfunc_called(this, "_ZN6S247C63v11Ev");}
void  S247C6 ::v12(){vfunc_called(this, "_ZN6S247C63v12Ev");}
void  S247C6 ::v13(){vfunc_called(this, "_ZN6S247C63v13Ev");}
void  S247C6 ::v14(){vfunc_called(this, "_ZN6S247C63v14Ev");}
void  S247C6 ::v15(){vfunc_called(this, "_ZN6S247C63v15Ev");}
void  S247C6 ::v16(){vfunc_called(this, "_ZN6S247C63v16Ev");}
void  S247C6 ::v17(){vfunc_called(this, "_ZN6S247C63v17Ev");}
void  S247C6 ::v18(){vfunc_called(this, "_ZN6S247C63v18Ev");}
void  S247C6 ::v19(){vfunc_called(this, "_ZN6S247C63v19Ev");}
void  S247C6 ::v20(){vfunc_called(this, "_ZN6S247C63v20Ev");}
void  S247C6 ::v21(){vfunc_called(this, "_ZN6S247C63v21Ev");}
void  S247C6 ::v22(){vfunc_called(this, "_ZN6S247C63v22Ev");}
void  S247C6 ::v23(){vfunc_called(this, "_ZN6S247C63v23Ev");}
void  S247C6 ::v24(){vfunc_called(this, "_ZN6S247C63v24Ev");}
void  S247C6 ::v25(){vfunc_called(this, "_ZN6S247C63v25Ev");}
void  S247C6 ::v26(){vfunc_called(this, "_ZN6S247C63v26Ev");}
void  S247C6 ::v27(){vfunc_called(this, "_ZN6S247C63v27Ev");}
void  S247C6 ::v28(){vfunc_called(this, "_ZN6S247C63v28Ev");}
void  S247C6 ::v29(){vfunc_called(this, "_ZN6S247C63v29Ev");}
void  S247C6 ::v30(){vfunc_called(this, "_ZN6S247C63v30Ev");}
void  S247C6 ::v31(){vfunc_called(this, "_ZN6S247C63v31Ev");}
void  S247C6 ::v32(){vfunc_called(this, "_ZN6S247C63v32Ev");}
void  S247C6 ::v33(){vfunc_called(this, "_ZN6S247C63v33Ev");}
void  S247C6 ::v34(){vfunc_called(this, "_ZN6S247C63v34Ev");}
void  S247C6 ::v35(){vfunc_called(this, "_ZN6S247C63v35Ev");}
void  S247C6 ::v36(){vfunc_called(this, "_ZN6S247C63v36Ev");}
void  S247C6 ::v37(){vfunc_called(this, "_ZN6S247C63v37Ev");}
void  S247C6 ::v38(){vfunc_called(this, "_ZN6S247C63v38Ev");}
void  S247C6 ::v39(){vfunc_called(this, "_ZN6S247C63v39Ev");}
void  S247C6 ::v40(){vfunc_called(this, "_ZN6S247C63v40Ev");}
void  S247C6 ::v41(){vfunc_called(this, "_ZN6S247C63v41Ev");}
void  S247C6 ::v42(){vfunc_called(this, "_ZN6S247C63v42Ev");}
void  S247C6 ::v43(){vfunc_called(this, "_ZN6S247C63v43Ev");}
void  S247C6 ::v44(){vfunc_called(this, "_ZN6S247C63v44Ev");}
void  S247C6 ::v45(){vfunc_called(this, "_ZN6S247C63v45Ev");}
void  S247C6 ::v46(){vfunc_called(this, "_ZN6S247C63v46Ev");}
void  S247C6 ::v47(){vfunc_called(this, "_ZN6S247C63v47Ev");}
void  S247C6 ::v48(){vfunc_called(this, "_ZN6S247C63v48Ev");}
void  S247C6 ::v49(){vfunc_called(this, "_ZN6S247C63v49Ev");}
void  S247C6 ::v50(){vfunc_called(this, "_ZN6S247C63v50Ev");}
void  S247C6 ::v51(){vfunc_called(this, "_ZN6S247C63v51Ev");}
void  S247C6 ::v52(){vfunc_called(this, "_ZN6S247C63v52Ev");}
void  S247C6 ::v53(){vfunc_called(this, "_ZN6S247C63v53Ev");}
void  S247C6 ::v54(){vfunc_called(this, "_ZN6S247C63v54Ev");}
void  S247C6 ::v55(){vfunc_called(this, "_ZN6S247C63v55Ev");}
void  S247C6 ::v56(){vfunc_called(this, "_ZN6S247C63v56Ev");}
void  S247C6 ::v57(){vfunc_called(this, "_ZN6S247C63v57Ev");}
void  S247C6 ::v58(){vfunc_called(this, "_ZN6S247C63v58Ev");}
void  S247C6 ::v59(){vfunc_called(this, "_ZN6S247C63v59Ev");}
void  S247C6 ::v60(){vfunc_called(this, "_ZN6S247C63v60Ev");}
void  S247C6 ::v61(){vfunc_called(this, "_ZN6S247C63v61Ev");}
void  S247C6 ::v62(){vfunc_called(this, "_ZN6S247C63v62Ev");}
void  S247C6 ::v63(){vfunc_called(this, "_ZN6S247C63v63Ev");}
void  S247C6 ::v64(){vfunc_called(this, "_ZN6S247C63v64Ev");}
void  S247C6 ::v65(){vfunc_called(this, "_ZN6S247C63v65Ev");}
void  S247C6 ::v66(){vfunc_called(this, "_ZN6S247C63v66Ev");}
void  S247C6 ::v67(){vfunc_called(this, "_ZN6S247C63v67Ev");}
void  S247C6 ::v68(){vfunc_called(this, "_ZN6S247C63v68Ev");}
S247C6 ::S247C6(){ note_ctor("S247C6", this);} // tgen

static void Test_S247C6()
{
  extern Class_Descriptor cd_S247C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S247C6, buf);
    S247C6 *dp, &lv = *(dp=new (buf) S247C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S247C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S247C6)");
    check_field_offset(lv, s247c6f0, ABISELECT(8,4), "S247C6.s247c6f0");
    check_field_offset(lv, s247c6f1, ABISELECT(16,8), "S247C6.s247c6f1");
    check_field_offset(lv, s247c6f2, ABISELECT(24,16), "S247C6.s247c6f2");
    check_field_offset(lv, s247c6f3, ABISELECT(56,32), "S247C6.s247c6f3");
    check_field_offset(lv, s247c6f4, ABISELECT(64,40), "S247C6.s247c6f4");
    check_field_offset(lv, s247c6f5, ABISELECT(72,44), "S247C6.s247c6f5");
    check_field_offset(lv, s247c6f6, ABISELECT(80,52), "S247C6.s247c6f6");
    test_class_info(&lv, &cd_S247C6);
    dp->~S247C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS247C6(Test_S247C6, "S247C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S247C6C1Ev();
extern void _ZN6S247C6D1Ev();
Name_Map name_map_S247C6[] = {
  NSPAIR(_ZN6S247C6C1Ev),
  NSPAIR(_ZN6S247C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S247C6[];
extern void _ZN6S247C6D1Ev();
extern void _ZN6S247C6D0Ev();
extern void _ZN6S247C62v5Ev();
extern void _ZN6S247C62v6Ev();
extern void _ZN6S247C62v7Ev();
extern void _ZN6S247C62v8Ev();
extern void _ZN6S247C62v9Ev();
extern void _ZN6S247C63v10Ev();
extern void _ZN6S247C63v11Ev();
extern void _ZN6S247C63v12Ev();
extern void _ZN6S247C63v13Ev();
extern void _ZN6S247C63v14Ev();
extern void _ZN6S247C63v15Ev();
extern void _ZN6S247C63v16Ev();
extern void _ZN6S247C63v17Ev();
extern void _ZN6S247C63v18Ev();
extern void _ZN6S247C63v19Ev();
extern void _ZN6S247C63v20Ev();
extern void _ZN6S247C63v21Ev();
extern void _ZN6S247C63v22Ev();
extern void _ZN6S247C63v23Ev();
extern void _ZN6S247C63v24Ev();
extern void _ZN6S247C63v25Ev();
extern void _ZN6S247C63v26Ev();
extern void _ZN6S247C63v27Ev();
extern void _ZN6S247C63v28Ev();
extern void _ZN6S247C63v29Ev();
extern void _ZN6S247C63v30Ev();
extern void _ZN6S247C63v31Ev();
extern void _ZN6S247C63v32Ev();
extern void _ZN6S247C63v33Ev();
extern void _ZN6S247C63v34Ev();
extern void _ZN6S247C63v35Ev();
extern void _ZN6S247C63v36Ev();
extern void _ZN6S247C63v37Ev();
extern void _ZN6S247C63v38Ev();
extern void _ZN6S247C63v39Ev();
extern void _ZN6S247C63v40Ev();
extern void _ZN6S247C63v41Ev();
extern void _ZN6S247C63v42Ev();
extern void _ZN6S247C63v43Ev();
extern void _ZN6S247C63v44Ev();
extern void _ZN6S247C63v45Ev();
extern void _ZN6S247C63v46Ev();
extern void _ZN6S247C63v47Ev();
extern void _ZN6S247C63v48Ev();
extern void _ZN6S247C63v49Ev();
extern void _ZN6S247C63v50Ev();
extern void _ZN6S247C63v51Ev();
extern void _ZN6S247C63v52Ev();
extern void _ZN6S247C63v53Ev();
extern void _ZN6S247C63v54Ev();
extern void _ZN6S247C63v55Ev();
extern void _ZN6S247C63v56Ev();
extern void _ZN6S247C63v57Ev();
extern void _ZN6S247C63v58Ev();
extern void _ZN6S247C63v59Ev();
extern void _ZN6S247C63v60Ev();
extern void _ZN6S247C63v61Ev();
extern void _ZN6S247C63v62Ev();
extern void _ZN6S247C63v63Ev();
extern void _ZN6S247C63v64Ev();
extern void _ZN6S247C63v65Ev();
extern void _ZN6S247C63v66Ev();
extern void _ZN6S247C63v67Ev();
extern void _ZN6S247C63v68Ev();
static  VTBL_ENTRY vtc_S247C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S247C6[0]),
  (VTBL_ENTRY)&_ZN6S247C6D1Ev,
  (VTBL_ENTRY)&_ZN6S247C6D0Ev,
  (VTBL_ENTRY)&_ZN6S247C62v5Ev,
  (VTBL_ENTRY)&_ZN6S247C62v6Ev,
  (VTBL_ENTRY)&_ZN6S247C62v7Ev,
  (VTBL_ENTRY)&_ZN6S247C62v8Ev,
  (VTBL_ENTRY)&_ZN6S247C62v9Ev,
  (VTBL_ENTRY)&_ZN6S247C63v10Ev,
  (VTBL_ENTRY)&_ZN6S247C63v11Ev,
  (VTBL_ENTRY)&_ZN6S247C63v12Ev,
  (VTBL_ENTRY)&_ZN6S247C63v13Ev,
  (VTBL_ENTRY)&_ZN6S247C63v14Ev,
  (VTBL_ENTRY)&_ZN6S247C63v15Ev,
  (VTBL_ENTRY)&_ZN6S247C63v16Ev,
  (VTBL_ENTRY)&_ZN6S247C63v17Ev,
  (VTBL_ENTRY)&_ZN6S247C63v18Ev,
  (VTBL_ENTRY)&_ZN6S247C63v19Ev,
  (VTBL_ENTRY)&_ZN6S247C63v20Ev,
  (VTBL_ENTRY)&_ZN6S247C63v21Ev,
  (VTBL_ENTRY)&_ZN6S247C63v22Ev,
  (VTBL_ENTRY)&_ZN6S247C63v23Ev,
  (VTBL_ENTRY)&_ZN6S247C63v24Ev,
  (VTBL_ENTRY)&_ZN6S247C63v25Ev,
  (VTBL_ENTRY)&_ZN6S247C63v26Ev,
  (VTBL_ENTRY)&_ZN6S247C63v27Ev,
  (VTBL_ENTRY)&_ZN6S247C63v28Ev,
  (VTBL_ENTRY)&_ZN6S247C63v29Ev,
  (VTBL_ENTRY)&_ZN6S247C63v30Ev,
  (VTBL_ENTRY)&_ZN6S247C63v31Ev,
  (VTBL_ENTRY)&_ZN6S247C63v32Ev,
  (VTBL_ENTRY)&_ZN6S247C63v33Ev,
  (VTBL_ENTRY)&_ZN6S247C63v34Ev,
  (VTBL_ENTRY)&_ZN6S247C63v35Ev,
  (VTBL_ENTRY)&_ZN6S247C63v36Ev,
  (VTBL_ENTRY)&_ZN6S247C63v37Ev,
  (VTBL_ENTRY)&_ZN6S247C63v38Ev,
  (VTBL_ENTRY)&_ZN6S247C63v39Ev,
  (VTBL_ENTRY)&_ZN6S247C63v40Ev,
  (VTBL_ENTRY)&_ZN6S247C63v41Ev,
  (VTBL_ENTRY)&_ZN6S247C63v42Ev,
  (VTBL_ENTRY)&_ZN6S247C63v43Ev,
  (VTBL_ENTRY)&_ZN6S247C63v44Ev,
  (VTBL_ENTRY)&_ZN6S247C63v45Ev,
  (VTBL_ENTRY)&_ZN6S247C63v46Ev,
  (VTBL_ENTRY)&_ZN6S247C63v47Ev,
  (VTBL_ENTRY)&_ZN6S247C63v48Ev,
  (VTBL_ENTRY)&_ZN6S247C63v49Ev,
  (VTBL_ENTRY)&_ZN6S247C63v50Ev,
  (VTBL_ENTRY)&_ZN6S247C63v51Ev,
  (VTBL_ENTRY)&_ZN6S247C63v52Ev,
  (VTBL_ENTRY)&_ZN6S247C63v53Ev,
  (VTBL_ENTRY)&_ZN6S247C63v54Ev,
  (VTBL_ENTRY)&_ZN6S247C63v55Ev,
  (VTBL_ENTRY)&_ZN6S247C63v56Ev,
  (VTBL_ENTRY)&_ZN6S247C63v57Ev,
  (VTBL_ENTRY)&_ZN6S247C63v58Ev,
  (VTBL_ENTRY)&_ZN6S247C63v59Ev,
  (VTBL_ENTRY)&_ZN6S247C63v60Ev,
  (VTBL_ENTRY)&_ZN6S247C63v61Ev,
  (VTBL_ENTRY)&_ZN6S247C63v62Ev,
  (VTBL_ENTRY)&_ZN6S247C63v63Ev,
  (VTBL_ENTRY)&_ZN6S247C63v64Ev,
  (VTBL_ENTRY)&_ZN6S247C63v65Ev,
  (VTBL_ENTRY)&_ZN6S247C63v66Ev,
  (VTBL_ENTRY)&_ZN6S247C63v67Ev,
  (VTBL_ENTRY)&_ZN6S247C63v68Ev,
};
extern VTBL_ENTRY _ZTI6S247C6[];
extern  VTBL_ENTRY _ZTV6S247C6[];
Class_Descriptor cd_S247C6 = {  "S247C6", // class name
  0,0,//no base classes
  &(vtc_S247C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S247C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S247C6),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  S247C5  : S247C6 {
  int s247c5f0[2];
  void *s247c5f1;
  int s247c5f2[2];
  ::S210C8_nt s247c5f3;
  ::S210C8_nt s247c5f4;
  ::S629C14 s247c5f5;
  ::S210C8_nt s247c5f6;
  unsigned int s247c5f7:1;
  unsigned int s247c5f8:1;
  unsigned int s247c5f9:1;
  unsigned int s247c5f10:1;
  unsigned int s247c5f11:1;
  int s247c5f12[2];
  virtual  ~S247C5(); // _ZN6S247C5D1Ev
  virtual void  v69(); // _ZN6S247C53v69Ev
  virtual void  v70(); // _ZN6S247C53v70Ev
  virtual void  v71(); // _ZN6S247C53v71Ev
  virtual void  v72(); // _ZN6S247C53v72Ev
  virtual void  v73(); // _ZN6S247C53v73Ev
  virtual void  v74(); // _ZN6S247C53v74Ev
  virtual void  v75(); // _ZN6S247C53v75Ev
  virtual void  v76(); // _ZN6S247C53v76Ev
  virtual void  v77(); // _ZN6S247C53v77Ev
  virtual void  v78(); // _ZN6S247C53v78Ev
  virtual void  v79(); // _ZN6S247C53v79Ev
  virtual void  v80(); // _ZN6S247C53v80Ev
  virtual void  v81(); // _ZN6S247C53v81Ev
  virtual void  v82(); // _ZN6S247C53v82Ev
  virtual void  v83(); // _ZN6S247C53v83Ev
  virtual void  v84(); // _ZN6S247C53v84Ev
  virtual void  v85(); // _ZN6S247C53v85Ev
  virtual void  v86(); // _ZN6S247C53v86Ev
  virtual void  v87(); // _ZN6S247C53v87Ev
  virtual void  v88(); // _ZN6S247C53v88Ev
  virtual void  v89(); // _ZN6S247C53v89Ev
  virtual void  v90(); // _ZN6S247C53v90Ev
  S247C5(); // tgen
};
//SIG(-1 S247C5) 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]}


 S247C5 ::~S247C5(){ note_dtor("S247C5", this);}
void  S247C5 ::v69(){vfunc_called(this, "_ZN6S247C53v69Ev");}
void  S247C5 ::v70(){vfunc_called(this, "_ZN6S247C53v70Ev");}
void  S247C5 ::v71(){vfunc_called(this, "_ZN6S247C53v71Ev");}
void  S247C5 ::v72(){vfunc_called(this, "_ZN6S247C53v72Ev");}
void  S247C5 ::v73(){vfunc_called(this, "_ZN6S247C53v73Ev");}
void  S247C5 ::v74(){vfunc_called(this, "_ZN6S247C53v74Ev");}
void  S247C5 ::v75(){vfunc_called(this, "_ZN6S247C53v75Ev");}
void  S247C5 ::v76(){vfunc_called(this, "_ZN6S247C53v76Ev");}
void  S247C5 ::v77(){vfunc_called(this, "_ZN6S247C53v77Ev");}
void  S247C5 ::v78(){vfunc_called(this, "_ZN6S247C53v78Ev");}
void  S247C5 ::v79(){vfunc_called(this, "_ZN6S247C53v79Ev");}
void  S247C5 ::v80(){vfunc_called(this, "_ZN6S247C53v80Ev");}
void  S247C5 ::v81(){vfunc_called(this, "_ZN6S247C53v81Ev");}
void  S247C5 ::v82(){vfunc_called(this, "_ZN6S247C53v82Ev");}
void  S247C5 ::v83(){vfunc_called(this, "_ZN6S247C53v83Ev");}
void  S247C5 ::v84(){vfunc_called(this, "_ZN6S247C53v84Ev");}
void  S247C5 ::v85(){vfunc_called(this, "_ZN6S247C53v85Ev");}
void  S247C5 ::v86(){vfunc_called(this, "_ZN6S247C53v86Ev");}
void  S247C5 ::v87(){vfunc_called(this, "_ZN6S247C53v87Ev");}
void  S247C5 ::v88(){vfunc_called(this, "_ZN6S247C53v88Ev");}
void  S247C5 ::v89(){vfunc_called(this, "_ZN6S247C53v89Ev");}
void  S247C5 ::v90(){vfunc_called(this, "_ZN6S247C53v90Ev");}
S247C5 ::S247C5(){ note_ctor("S247C5", this);} // tgen

static void Test_S247C5()
{
  extern Class_Descriptor cd_S247C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S247C5, buf);
    S247C5 *dp, &lv = *(dp=new (buf) S247C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S247C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S247C5)");
    check_base_class_offset(lv, (S247C6*), 0, "S247C5");
    check_field_offset(lv, s247c5f0, ABISELECT(96,60), "S247C5.s247c5f0");
    check_field_offset(lv, s247c5f1, ABISELECT(104,68), "S247C5.s247c5f1");
    check_field_offset(lv, s247c5f2, ABISELECT(112,72), "S247C5.s247c5f2");
    check_field_offset(lv, s247c5f3, ABISELECT(120,80), "S247C5.s247c5f3");
    check_field_offset(lv, s247c5f4, ABISELECT(136,92), "S247C5.s247c5f4");
    check_field_offset(lv, s247c5f5, ABISELECT(152,104), "S247C5.s247c5f5");
    check_field_offset(lv, s247c5f6, ABISELECT(160,108), "S247C5.s247c5f6");
    set_bf_and_test(lv, s247c5f7, ABISELECT(176,120), 0, 1, 1, "S247C5");
    set_bf_and_test(lv, s247c5f8, ABISELECT(176,120), 1, 1, 1, "S247C5");
    set_bf_and_test(lv, s247c5f9, ABISELECT(176,120), 2, 1, 1, "S247C5");
    set_bf_and_test(lv, s247c5f10, ABISELECT(176,120), 3, 1, 1, "S247C5");
    set_bf_and_test(lv, s247c5f11, ABISELECT(176,120), 4, 1, 1, "S247C5");
    check_field_offset(lv, s247c5f12, ABISELECT(180,124), "S247C5.s247c5f12");
    test_class_info(&lv, &cd_S247C5);
    dp->~S247C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS247C5(Test_S247C5, "S247C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S247C5C1Ev();
extern void _ZN6S247C5D1Ev();
Name_Map name_map_S247C5[] = {
  NSPAIR(_ZN6S247C5C1Ev),
  NSPAIR(_ZN6S247C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S247C6;
extern VTBL_ENTRY _ZTI6S247C6[];
extern  VTBL_ENTRY _ZTV6S247C6[];
static Base_Class bases_S247C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S247C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI6S247C5[];
extern void _ZN6S247C5D1Ev();
extern void _ZN6S247C5D0Ev();
extern void _ZN6S247C62v5Ev();
extern void _ZN6S247C62v6Ev();
extern void _ZN6S247C62v7Ev();
extern void _ZN6S247C62v8Ev();
extern void _ZN6S247C62v9Ev();
extern void _ZN6S247C63v10Ev();
extern void _ZN6S247C63v11Ev();
extern void _ZN6S247C63v12Ev();
extern void _ZN6S247C63v13Ev();
extern void _ZN6S247C63v14Ev();
extern void _ZN6S247C63v15Ev();
extern void _ZN6S247C63v16Ev();
extern void _ZN6S247C63v17Ev();
extern void _ZN6S247C63v18Ev();
extern void _ZN6S247C63v19Ev();
extern void _ZN6S247C63v20Ev();
extern void _ZN6S247C63v21Ev();
extern void _ZN6S247C63v22Ev();
extern void _ZN6S247C63v23Ev();
extern void _ZN6S247C63v24Ev();
extern void _ZN6S247C63v25Ev();
extern void _ZN6S247C63v26Ev();
extern void _ZN6S247C63v27Ev();
extern void _ZN6S247C63v28Ev();
extern void _ZN6S247C63v29Ev();
extern void _ZN6S247C63v30Ev();
extern void _ZN6S247C63v31Ev();
extern void _ZN6S247C63v32Ev();
extern void _ZN6S247C63v33Ev();
extern void _ZN6S247C63v34Ev();
extern void _ZN6S247C63v35Ev();
extern void _ZN6S247C63v36Ev();
extern void _ZN6S247C63v37Ev();
extern void _ZN6S247C63v38Ev();
extern void _ZN6S247C63v39Ev();
extern void _ZN6S247C63v40Ev();
extern void _ZN6S247C63v41Ev();
extern void _ZN6S247C63v42Ev();
extern void _ZN6S247C63v43Ev();
extern void _ZN6S247C63v44Ev();
extern void _ZN6S247C63v45Ev();
extern void _ZN6S247C63v46Ev();
extern void _ZN6S247C63v47Ev();
extern void _ZN6S247C63v48Ev();
extern void _ZN6S247C63v49Ev();
extern void _ZN6S247C63v50Ev();
extern void _ZN6S247C63v51Ev();
extern void _ZN6S247C63v52Ev();
extern void _ZN6S247C63v53Ev();
extern void _ZN6S247C63v54Ev();
extern void _ZN6S247C63v55Ev();
extern void _ZN6S247C63v56Ev();
extern void _ZN6S247C63v57Ev();
extern void _ZN6S247C63v58Ev();
extern void _ZN6S247C63v59Ev();
extern void _ZN6S247C63v60Ev();
extern void _ZN6S247C63v61Ev();
extern void _ZN6S247C63v62Ev();
extern void _ZN6S247C63v63Ev();
extern void _ZN6S247C63v64Ev();
extern void _ZN6S247C63v65Ev();
extern void _ZN6S247C63v66Ev();
extern void _ZN6S247C63v67Ev();
extern void _ZN6S247C63v68Ev();
extern void _ZN6S247C53v69Ev();
extern void _ZN6S247C53v70Ev();
extern void _ZN6S247C53v71Ev();
extern void _ZN6S247C53v72Ev();
extern void _ZN6S247C53v73Ev();
extern void _ZN6S247C53v74Ev();
extern void _ZN6S247C53v75Ev();
extern void _ZN6S247C53v76Ev();
extern void _ZN6S247C53v77Ev();
extern void _ZN6S247C53v78Ev();
extern void _ZN6S247C53v79Ev();
extern void _ZN6S247C53v80Ev();
extern void _ZN6S247C53v81Ev();
extern void _ZN6S247C53v82Ev();
extern void _ZN6S247C53v83Ev();
extern void _ZN6S247C53v84Ev();
extern void _ZN6S247C53v85Ev();
extern void _ZN6S247C53v86Ev();
extern void _ZN6S247C53v87Ev();
extern void _ZN6S247C53v88Ev();
extern void _ZN6S247C53v89Ev();
extern void _ZN6S247C53v90Ev();
static  VTBL_ENTRY vtc_S247C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S247C5[0]),
  (VTBL_ENTRY)&_ZN6S247C5D1Ev,
  (VTBL_ENTRY)&_ZN6S247C5D0Ev,
  (VTBL_ENTRY)&_ZN6S247C62v5Ev,
  (VTBL_ENTRY)&_ZN6S247C62v6Ev,
  (VTBL_ENTRY)&_ZN6S247C62v7Ev,
  (VTBL_ENTRY)&_ZN6S247C62v8Ev,
  (VTBL_ENTRY)&_ZN6S247C62v9Ev,
  (VTBL_ENTRY)&_ZN6S247C63v10Ev,
  (VTBL_ENTRY)&_ZN6S247C63v11Ev,
  (VTBL_ENTRY)&_ZN6S247C63v12Ev,
  (VTBL_ENTRY)&_ZN6S247C63v13Ev,
  (VTBL_ENTRY)&_ZN6S247C63v14Ev,
  (VTBL_ENTRY)&_ZN6S247C63v15Ev,
  (VTBL_ENTRY)&_ZN6S247C63v16Ev,
  (VTBL_ENTRY)&_ZN6S247C63v17Ev,
  (VTBL_ENTRY)&_ZN6S247C63v18Ev,
  (VTBL_ENTRY)&_ZN6S247C63v19Ev,
  (VTBL_ENTRY)&_ZN6S247C63v20Ev,
  (VTBL_ENTRY)&_ZN6S247C63v21Ev,
  (VTBL_ENTRY)&_ZN6S247C63v22Ev,
  (VTBL_ENTRY)&_ZN6S247C63v23Ev,
  (VTBL_ENTRY)&_ZN6S247C63v24Ev,
  (VTBL_ENTRY)&_ZN6S247C63v25Ev,
  (VTBL_ENTRY)&_ZN6S247C63v26Ev,
  (VTBL_ENTRY)&_ZN6S247C63v27Ev,
  (VTBL_ENTRY)&_ZN6S247C63v28Ev,
  (VTBL_ENTRY)&_ZN6S247C63v29Ev,
  (VTBL_ENTRY)&_ZN6S247C63v30Ev,
  (VTBL_ENTRY)&_ZN6S247C63v31Ev,
  (VTBL_ENTRY)&_ZN6S247C63v32Ev,
  (VTBL_ENTRY)&_ZN6S247C63v33Ev,
  (VTBL_ENTRY)&_ZN6S247C63v34Ev,
  (VTBL_ENTRY)&_ZN6S247C63v35Ev,
  (VTBL_ENTRY)&_ZN6S247C63v36Ev,
  (VTBL_ENTRY)&_ZN6S247C63v37Ev,
  (VTBL_ENTRY)&_ZN6S247C63v38Ev,
  (VTBL_ENTRY)&_ZN6S247C63v39Ev,
  (VTBL_ENTRY)&_ZN6S247C63v40Ev,
  (VTBL_ENTRY)&_ZN6S247C63v41Ev,
  (VTBL_ENTRY)&_ZN6S247C63v42Ev,
  (VTBL_ENTRY)&_ZN6S247C63v43Ev,
  (VTBL_ENTRY)&_ZN6S247C63v44Ev,
  (VTBL_ENTRY)&_ZN6S247C63v45Ev,
  (VTBL_ENTRY)&_ZN6S247C63v46Ev,
  (VTBL_ENTRY)&_ZN6S247C63v47Ev,
  (VTBL_ENTRY)&_ZN6S247C63v48Ev,
  (VTBL_ENTRY)&_ZN6S247C63v49Ev,
  (VTBL_ENTRY)&_ZN6S247C63v50Ev,
  (VTBL_ENTRY)&_ZN6S247C63v51Ev,
  (VTBL_ENTRY)&_ZN6S247C63v52Ev,
  (VTBL_ENTRY)&_ZN6S247C63v53Ev,
  (VTBL_ENTRY)&_ZN6S247C63v54Ev,
  (VTBL_ENTRY)&_ZN6S247C63v55Ev,
  (VTBL_ENTRY)&_ZN6S247C63v56Ev,
  (VTBL_ENTRY)&_ZN6S247C63v57Ev,
  (VTBL_ENTRY)&_ZN6S247C63v58Ev,
  (VTBL_ENTRY)&_ZN6S247C63v59Ev,
  (VTBL_ENTRY)&_ZN6S247C63v60Ev,
  (VTBL_ENTRY)&_ZN6S247C63v61Ev,
  (VTBL_ENTRY)&_ZN6S247C63v62Ev,
  (VTBL_ENTRY)&_ZN6S247C63v63Ev,
  (VTBL_ENTRY)&_ZN6S247C63v64Ev,
  (VTBL_ENTRY)&_ZN6S247C63v65Ev,
  (VTBL_ENTRY)&_ZN6S247C63v66Ev,
  (VTBL_ENTRY)&_ZN6S247C63v67Ev,
  (VTBL_ENTRY)&_ZN6S247C63v68Ev,
  (VTBL_ENTRY)&_ZN6S247C53v69Ev,
  (VTBL_ENTRY)&_ZN6S247C53v70Ev,
  (VTBL_ENTRY)&_ZN6S247C53v71Ev,
  (VTBL_ENTRY)&_ZN6S247C53v72Ev,
  (VTBL_ENTRY)&_ZN6S247C53v73Ev,
  (VTBL_ENTRY)&_ZN6S247C53v74Ev,
  (VTBL_ENTRY)&_ZN6S247C53v75Ev,
  (VTBL_ENTRY)&_ZN6S247C53v76Ev,
  (VTBL_ENTRY)&_ZN6S247C53v77Ev,
  (VTBL_ENTRY)&_ZN6S247C53v78Ev,
  (VTBL_ENTRY)&_ZN6S247C53v79Ev,
  (VTBL_ENTRY)&_ZN6S247C53v80Ev,
  (VTBL_ENTRY)&_ZN6S247C53v81Ev,
  (VTBL_ENTRY)&_ZN6S247C53v82Ev,
  (VTBL_ENTRY)&_ZN6S247C53v83Ev,
  (VTBL_ENTRY)&_ZN6S247C53v84Ev,
  (VTBL_ENTRY)&_ZN6S247C53v85Ev,
  (VTBL_ENTRY)&_ZN6S247C53v86Ev,
  (VTBL_ENTRY)&_ZN6S247C53v87Ev,
  (VTBL_ENTRY)&_ZN6S247C53v88Ev,
  (VTBL_ENTRY)&_ZN6S247C53v89Ev,
  (VTBL_ENTRY)&_ZN6S247C53v90Ev,
};
extern VTBL_ENTRY _ZTI6S247C5[];
extern  VTBL_ENTRY _ZTV6S247C5[];
Class_Descriptor cd_S247C5 = {  "S247C5", // class name
  bases_S247C5, 1,
  &(vtc_S247C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S247C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S247C5),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  S247C4  : S247C5 {
  unsigned int s247c4f0:1;
  unsigned int s247c4f1:1;
  unsigned int s247c4f2:1;
  ::S1503C28 s247c4f3;
  ::S1503C24 s247c4f4;
  ::S1503C18 s247c4f5;
  ::S1503C12 s247c4f6;
  int s247c4f7[3];
  virtual  ~S247C4(); // _ZN6S247C4D1Ev
  virtual void  v91(); // _ZN6S247C43v91Ev
  virtual void  v92(); // _ZN6S247C43v92Ev
  virtual void  v93(); // _ZN6S247C43v93Ev
  virtual void  v94(); // _ZN6S247C43v94Ev
  virtual void  v95(); // _ZN6S247C43v95Ev
  virtual void  v96(); // _ZN6S247C43v96Ev
  virtual void  v97(); // _ZN6S247C43v97Ev
  virtual void  v98(); // _ZN6S247C43v98Ev
  virtual void  v99(); // _ZN6S247C43v99Ev
  virtual void  v100(); // _ZN6S247C44v100Ev
  virtual void  v101(); // _ZN6S247C44v101Ev
  virtual void  v102(); // _ZN6S247C44v102Ev
  virtual void  v103(); // _ZN6S247C44v103Ev
  virtual void  v104(); // _ZN6S247C44v104Ev
  virtual void  v105(); // _ZN6S247C44v105Ev
  virtual void  v106(); // _ZN6S247C44v106Ev
  virtual void  v107(); // _ZN6S247C44v107Ev
  virtual void  v108(); // _ZN6S247C44v108Ev
  virtual void  v109(); // _ZN6S247C44v109Ev
  virtual void  v110(); // _ZN6S247C44v110Ev
  S247C4(); // tgen
};
//SIG(-1 S247C4) 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]}


 S247C4 ::~S247C4(){ note_dtor("S247C4", this);}
void  S247C4 ::v91(){vfunc_called(this, "_ZN6S247C43v91Ev");}
void  S247C4 ::v92(){vfunc_called(this, "_ZN6S247C43v92Ev");}
void  S247C4 ::v93(){vfunc_called(this, "_ZN6S247C43v93Ev");}
void  S247C4 ::v94(){vfunc_called(this, "_ZN6S247C43v94Ev");}
void  S247C4 ::v95(){vfunc_called(this, "_ZN6S247C43v95Ev");}
void  S247C4 ::v96(){vfunc_called(this, "_ZN6S247C43v96Ev");}
void  S247C4 ::v97(){vfunc_called(this, "_ZN6S247C43v97Ev");}
void  S247C4 ::v98(){vfunc_called(this, "_ZN6S247C43v98Ev");}
void  S247C4 ::v99(){vfunc_called(this, "_ZN6S247C43v99Ev");}
void  S247C4 ::v100(){vfunc_called(this, "_ZN6S247C44v100Ev");}
void  S247C4 ::v101(){vfunc_called(this, "_ZN6S247C44v101Ev");}
void  S247C4 ::v102(){vfunc_called(this, "_ZN6S247C44v102Ev");}
void  S247C4 ::v103(){vfunc_called(this, "_ZN6S247C44v103Ev");}
void  S247C4 ::v104(){vfunc_called(this, "_ZN6S247C44v104Ev");}
void  S247C4 ::v105(){vfunc_called(this, "_ZN6S247C44v105Ev");}
void  S247C4 ::v106(){vfunc_called(this, "_ZN6S247C44v106Ev");}
void  S247C4 ::v107(){vfunc_called(this, "_ZN6S247C44v107Ev");}
void  S247C4 ::v108(){vfunc_called(this, "_ZN6S247C44v108Ev");}
void  S247C4 ::v109(){vfunc_called(this, "_ZN6S247C44v109Ev");}
void  S247C4 ::v110(){vfunc_called(this, "_ZN6S247C44v110Ev");}
S247C4 ::S247C4(){ note_ctor("S247C4", this);} // tgen

static void Test_S247C4()
{
  extern Class_Descriptor cd_S247C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S247C4, buf);
    S247C4 *dp, &lv = *(dp=new (buf) S247C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S247C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S247C4)");
    check_base_class_offset(lv, (S247C6*)(S247C5*), 0, "S247C4");
    check_base_class_offset(lv, (S247C5*), 0, "S247C4");
    set_bf_and_test(lv, s247c4f0, ABISELECT(188,132), 0, 1, 1, "S247C4");
    set_bf_and_test(lv, s247c4f1, ABISELECT(188,132), 1, 1, 1, "S247C4");
    set_bf_and_test(lv, s247c4f2, ABISELECT(188,132), 2, 1, 1, "S247C4");
    check_field_offset(lv, s247c4f3, ABISELECT(192,136), "S247C4.s247c4f3");
    check_field_offset(lv, s247c4f4, ABISELECT(208,148), "S247C4.s247c4f4");
    check_field_offset(lv, s247c4f5, ABISELECT(224,160), "S247C4.s247c4f5");
    check_field_offset(lv, s247c4f6, ABISELECT(240,172), "S247C4.s247c4f6");
    check_field_offset(lv, s247c4f7, ABISELECT(256,184), "S247C4.s247c4f7");
    test_class_info(&lv, &cd_S247C4);
    dp->~S247C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS247C4(Test_S247C4, "S247C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S247C4C1Ev();
extern void _ZN6S247C4D1Ev();
Name_Map name_map_S247C4[] = {
  NSPAIR(_ZN6S247C4C1Ev),
  NSPAIR(_ZN6S247C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S247C6;
extern VTBL_ENTRY _ZTI6S247C6[];
extern  VTBL_ENTRY _ZTV6S247C6[];
extern Class_Descriptor cd_S247C5;
extern VTBL_ENTRY _ZTI6S247C5[];
extern  VTBL_ENTRY _ZTV6S247C5[];
static Base_Class bases_S247C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S247C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S247C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S247C4[];
extern void _ZN6S247C4D1Ev();
extern void _ZN6S247C4D0Ev();
extern void _ZN6S247C62v5Ev();
extern void _ZN6S247C62v6Ev();
extern void _ZN6S247C62v7Ev();
extern void _ZN6S247C62v8Ev();
extern void _ZN6S247C62v9Ev();
extern void _ZN6S247C63v10Ev();
extern void _ZN6S247C63v11Ev();
extern void _ZN6S247C63v12Ev();
extern void _ZN6S247C63v13Ev();
extern void _ZN6S247C63v14Ev();
extern void _ZN6S247C63v15Ev();
extern void _ZN6S247C63v16Ev();
extern void _ZN6S247C63v17Ev();
extern void _ZN6S247C63v18Ev();
extern void _ZN6S247C63v19Ev();
extern void _ZN6S247C63v20Ev();
extern void _ZN6S247C63v21Ev();
extern void _ZN6S247C63v22Ev();
extern void _ZN6S247C63v23Ev();
extern void _ZN6S247C63v24Ev();
extern void _ZN6S247C63v25Ev();
extern void _ZN6S247C63v26Ev();
extern void _ZN6S247C63v27Ev();
extern void _ZN6S247C63v28Ev();
extern void _ZN6S247C63v29Ev();
extern void _ZN6S247C63v30Ev();
extern void _ZN6S247C63v31Ev();
extern void _ZN6S247C63v32Ev();
extern void _ZN6S247C63v33Ev();
extern void _ZN6S247C63v34Ev();
extern void _ZN6S247C63v35Ev();
extern void _ZN6S247C63v36Ev();
extern void _ZN6S247C63v37Ev();
extern void _ZN6S247C63v38Ev();
extern void _ZN6S247C63v39Ev();
extern void _ZN6S247C63v40Ev();
extern void _ZN6S247C63v41Ev();
extern void _ZN6S247C63v42Ev();
extern void _ZN6S247C63v43Ev();
extern void _ZN6S247C63v44Ev();
extern void _ZN6S247C63v45Ev();
extern void _ZN6S247C63v46Ev();
extern void _ZN6S247C63v47Ev();
extern void _ZN6S247C63v48Ev();
extern void _ZN6S247C63v49Ev();
extern void _ZN6S247C63v50Ev();
extern void _ZN6S247C63v51Ev();
extern void _ZN6S247C63v52Ev();
extern void _ZN6S247C63v53Ev();
extern void _ZN6S247C63v54Ev();
extern void _ZN6S247C63v55Ev();
extern void _ZN6S247C63v56Ev();
extern void _ZN6S247C63v57Ev();
extern void _ZN6S247C63v58Ev();
extern void _ZN6S247C63v59Ev();
extern void _ZN6S247C63v60Ev();
extern void _ZN6S247C63v61Ev();
extern void _ZN6S247C63v62Ev();
extern void _ZN6S247C63v63Ev();
extern void _ZN6S247C63v64Ev();
extern void _ZN6S247C63v65Ev();
extern void _ZN6S247C63v66Ev();
extern void _ZN6S247C63v67Ev();
extern void _ZN6S247C63v68Ev();
extern void _ZN6S247C53v69Ev();
extern void _ZN6S247C53v70Ev();
extern void _ZN6S247C53v71Ev();
extern void _ZN6S247C53v72Ev();
extern void _ZN6S247C53v73Ev();
extern void _ZN6S247C53v74Ev();
extern void _ZN6S247C53v75Ev();
extern void _ZN6S247C53v76Ev();
extern void _ZN6S247C53v77Ev();
extern void _ZN6S247C53v78Ev();
extern void _ZN6S247C53v79Ev();
extern void _ZN6S247C53v80Ev();
extern void _ZN6S247C53v81Ev();
extern void _ZN6S247C53v82Ev();
extern void _ZN6S247C53v83Ev();
extern void _ZN6S247C53v84Ev();
extern void _ZN6S247C53v85Ev();
extern void _ZN6S247C53v86Ev();
extern void _ZN6S247C53v87Ev();
extern void _ZN6S247C53v88Ev();
extern void _ZN6S247C53v89Ev();
extern void _ZN6S247C53v90Ev();
extern void _ZN6S247C43v91Ev();
extern void _ZN6S247C43v92Ev();
extern void _ZN6S247C43v93Ev();
extern void _ZN6S247C43v94Ev();
extern void _ZN6S247C43v95Ev();
extern void _ZN6S247C43v96Ev();
extern void _ZN6S247C43v97Ev();
extern void _ZN6S247C43v98Ev();
extern void _ZN6S247C43v99Ev();
extern void _ZN6S247C44v100Ev();
extern void _ZN6S247C44v101Ev();
extern void _ZN6S247C44v102Ev();
extern void _ZN6S247C44v103Ev();
extern void _ZN6S247C44v104Ev();
extern void _ZN6S247C44v105Ev();
extern void _ZN6S247C44v106Ev();
extern void _ZN6S247C44v107Ev();
extern void _ZN6S247C44v108Ev();
extern void _ZN6S247C44v109Ev();
extern void _ZN6S247C44v110Ev();
static  VTBL_ENTRY vtc_S247C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S247C4[0]),
  (VTBL_ENTRY)&_ZN6S247C4D1Ev,
  (VTBL_ENTRY)&_ZN6S247C4D0Ev,
  (VTBL_ENTRY)&_ZN6S247C62v5Ev,
  (VTBL_ENTRY)&_ZN6S247C62v6Ev,
  (VTBL_ENTRY)&_ZN6S247C62v7Ev,
  (VTBL_ENTRY)&_ZN6S247C62v8Ev,
  (VTBL_ENTRY)&_ZN6S247C62v9Ev,
  (VTBL_ENTRY)&_ZN6S247C63v10Ev,
  (VTBL_ENTRY)&_ZN6S247C63v11Ev,
  (VTBL_ENTRY)&_ZN6S247C63v12Ev,
  (VTBL_ENTRY)&_ZN6S247C63v13Ev,
  (VTBL_ENTRY)&_ZN6S247C63v14Ev,
  (VTBL_ENTRY)&_ZN6S247C63v15Ev,
  (VTBL_ENTRY)&_ZN6S247C63v16Ev,
  (VTBL_ENTRY)&_ZN6S247C63v17Ev,
  (VTBL_ENTRY)&_ZN6S247C63v18Ev,
  (VTBL_ENTRY)&_ZN6S247C63v19Ev,
  (VTBL_ENTRY)&_ZN6S247C63v20Ev,
  (VTBL_ENTRY)&_ZN6S247C63v21Ev,
  (VTBL_ENTRY)&_ZN6S247C63v22Ev,
  (VTBL_ENTRY)&_ZN6S247C63v23Ev,
  (VTBL_ENTRY)&_ZN6S247C63v24Ev,
  (VTBL_ENTRY)&_ZN6S247C63v25Ev,
  (VTBL_ENTRY)&_ZN6S247C63v26Ev,
  (VTBL_ENTRY)&_ZN6S247C63v27Ev,
  (VTBL_ENTRY)&_ZN6S247C63v28Ev,
  (VTBL_ENTRY)&_ZN6S247C63v29Ev,
  (VTBL_ENTRY)&_ZN6S247C63v30Ev,
  (VTBL_ENTRY)&_ZN6S247C63v31Ev,
  (VTBL_ENTRY)&_ZN6S247C63v32Ev,
  (VTBL_ENTRY)&_ZN6S247C63v33Ev,
  (VTBL_ENTRY)&_ZN6S247C63v34Ev,
  (VTBL_ENTRY)&_ZN6S247C63v35Ev,
  (VTBL_ENTRY)&_ZN6S247C63v36Ev,
  (VTBL_ENTRY)&_ZN6S247C63v37Ev,
  (VTBL_ENTRY)&_ZN6S247C63v38Ev,
  (VTBL_ENTRY)&_ZN6S247C63v39Ev,
  (VTBL_ENTRY)&_ZN6S247C63v40Ev,
  (VTBL_ENTRY)&_ZN6S247C63v41Ev,
  (VTBL_ENTRY)&_ZN6S247C63v42Ev,
  (VTBL_ENTRY)&_ZN6S247C63v43Ev,
  (VTBL_ENTRY)&_ZN6S247C63v44Ev,
  (VTBL_ENTRY)&_ZN6S247C63v45Ev,
  (VTBL_ENTRY)&_ZN6S247C63v46Ev,
  (VTBL_ENTRY)&_ZN6S247C63v47Ev,
  (VTBL_ENTRY)&_ZN6S247C63v48Ev,
  (VTBL_ENTRY)&_ZN6S247C63v49Ev,
  (VTBL_ENTRY)&_ZN6S247C63v50Ev,
  (VTBL_ENTRY)&_ZN6S247C63v51Ev,
  (VTBL_ENTRY)&_ZN6S247C63v52Ev,
  (VTBL_ENTRY)&_ZN6S247C63v53Ev,
  (VTBL_ENTRY)&_ZN6S247C63v54Ev,
  (VTBL_ENTRY)&_ZN6S247C63v55Ev,
  (VTBL_ENTRY)&_ZN6S247C63v56Ev,
  (VTBL_ENTRY)&_ZN6S247C63v57Ev,
  (VTBL_ENTRY)&_ZN6S247C63v58Ev,
  (VTBL_ENTRY)&_ZN6S247C63v59Ev,
  (VTBL_ENTRY)&_ZN6S247C63v60Ev,
  (VTBL_ENTRY)&_ZN6S247C63v61Ev,
  (VTBL_ENTRY)&_ZN6S247C63v62Ev,
  (VTBL_ENTRY)&_ZN6S247C63v63Ev,
  (VTBL_ENTRY)&_ZN6S247C63v64Ev,
  (VTBL_ENTRY)&_ZN6S247C63v65Ev,
  (VTBL_ENTRY)&_ZN6S247C63v66Ev,
  (VTBL_ENTRY)&_ZN6S247C63v67Ev,
  (VTBL_ENTRY)&_ZN6S247C63v68Ev,
  (VTBL_ENTRY)&_ZN6S247C53v69Ev,
  (VTBL_ENTRY)&_ZN6S247C53v70Ev,
  (VTBL_ENTRY)&_ZN6S247C53v71Ev,
  (VTBL_ENTRY)&_ZN6S247C53v72Ev,
  (VTBL_ENTRY)&_ZN6S247C53v73Ev,
  (VTBL_ENTRY)&_ZN6S247C53v74Ev,
  (VTBL_ENTRY)&_ZN6S247C53v75Ev,
  (VTBL_ENTRY)&_ZN6S247C53v76Ev,
  (VTBL_ENTRY)&_ZN6S247C53v77Ev,
  (VTBL_ENTRY)&_ZN6S247C53v78Ev,
  (VTBL_ENTRY)&_ZN6S247C53v79Ev,
  (VTBL_ENTRY)&_ZN6S247C53v80Ev,
  (VTBL_ENTRY)&_ZN6S247C53v81Ev,
  (VTBL_ENTRY)&_ZN6S247C53v82Ev,
  (VTBL_ENTRY)&_ZN6S247C53v83Ev,
  (VTBL_ENTRY)&_ZN6S247C53v84Ev,
  (VTBL_ENTRY)&_ZN6S247C53v85Ev,
  (VTBL_ENTRY)&_ZN6S247C53v86Ev,
  (VTBL_ENTRY)&_ZN6S247C53v87Ev,
  (VTBL_ENTRY)&_ZN6S247C53v88Ev,
  (VTBL_ENTRY)&_ZN6S247C53v89Ev,
  (VTBL_ENTRY)&_ZN6S247C53v90Ev,
  (VTBL_ENTRY)&_ZN6S247C43v91Ev,
  (VTBL_ENTRY)&_ZN6S247C43v92Ev,
  (VTBL_ENTRY)&_ZN6S247C43v93Ev,
  (VTBL_ENTRY)&_ZN6S247C43v94Ev,
  (VTBL_ENTRY)&_ZN6S247C43v95Ev,
  (VTBL_ENTRY)&_ZN6S247C43v96Ev,
  (VTBL_ENTRY)&_ZN6S247C43v97Ev,
  (VTBL_ENTRY)&_ZN6S247C43v98Ev,
  (VTBL_ENTRY)&_ZN6S247C43v99Ev,
  (VTBL_ENTRY)&_ZN6S247C44v100Ev,
  (VTBL_ENTRY)&_ZN6S247C44v101Ev,
  (VTBL_ENTRY)&_ZN6S247C44v102Ev,
  (VTBL_ENTRY)&_ZN6S247C44v103Ev,
  (VTBL_ENTRY)&_ZN6S247C44v104Ev,
  (VTBL_ENTRY)&_ZN6S247C44v105Ev,
  (VTBL_ENTRY)&_ZN6S247C44v106Ev,
  (VTBL_ENTRY)&_ZN6S247C44v107Ev,
  (VTBL_ENTRY)&_ZN6S247C44v108Ev,
  (VTBL_ENTRY)&_ZN6S247C44v109Ev,
  (VTBL_ENTRY)&_ZN6S247C44v110Ev,
};
extern VTBL_ENTRY _ZTI6S247C4[];
extern  VTBL_ENTRY _ZTV6S247C4[];
Class_Descriptor cd_S247C4 = {  "S247C4", // class name
  bases_S247C4, 2,
  &(vtc_S247C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S247C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S247C4),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  S247C3  : S247C4 {
  ::S1503C5_nt s247c3f0;
  unsigned int s247c3f1:1;
  ::S1503C6_nt s247c3f2;
  virtual  ~S247C3(); // _ZN6S247C3D1Ev
  virtual void  v111(); // _ZN6S247C34v111Ev
  virtual void  v112(); // _ZN6S247C34v112Ev
  virtual void  v113(); // _ZN6S247C34v113Ev
  virtual void  v114(); // _ZN6S247C34v114Ev
  S247C3(); // tgen
};
//SIG(-1 S247C3) 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}}}


 S247C3 ::~S247C3(){ note_dtor("S247C3", this);}
void  S247C3 ::v111(){vfunc_called(this, "_ZN6S247C34v111Ev");}
void  S247C3 ::v112(){vfunc_called(this, "_ZN6S247C34v112Ev");}
void  S247C3 ::v113(){vfunc_called(this, "_ZN6S247C34v113Ev");}
void  S247C3 ::v114(){vfunc_called(this, "_ZN6S247C34v114Ev");}
S247C3 ::S247C3(){ note_ctor("S247C3", this);} // tgen

static void Test_S247C3()
{
  extern Class_Descriptor cd_S247C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S247C3, buf);
    S247C3 *dp, &lv = *(dp=new (buf) S247C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S247C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S247C3)");
    check_base_class_offset(lv, (S247C6*)(S247C5*)(S247C4*), 0, "S247C3");
    check_base_class_offset(lv, (S247C5*)(S247C4*), 0, "S247C3");
    check_base_class_offset(lv, (S247C4*), 0, "S247C3");
    check_field_offset(lv, s247c3f0, ABISELECT(268,196), "S247C3.s247c3f0");
    set_bf_and_test(lv, s247c3f1, ABISELECT(276,204), 0, 1, 1, "S247C3");
    check_field_offset(lv, s247c3f2, ABISELECT(280,208), "S247C3.s247c3f2");
    test_class_info(&lv, &cd_S247C3);
    dp->~S247C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS247C3(Test_S247C3, "S247C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S247C3C1Ev();
extern void _ZN6S247C3D1Ev();
Name_Map name_map_S247C3[] = {
  NSPAIR(_ZN6S247C3C1Ev),
  NSPAIR(_ZN6S247C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S247C6;
extern VTBL_ENTRY _ZTI6S247C6[];
extern  VTBL_ENTRY _ZTV6S247C6[];
extern Class_Descriptor cd_S247C5;
extern VTBL_ENTRY _ZTI6S247C5[];
extern  VTBL_ENTRY _ZTV6S247C5[];
extern Class_Descriptor cd_S247C4;
extern VTBL_ENTRY _ZTI6S247C4[];
extern  VTBL_ENTRY _ZTV6S247C4[];
static Base_Class bases_S247C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S247C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S247C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S247C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S247C3[];
extern void _ZN6S247C3D1Ev();
extern void _ZN6S247C3D0Ev();
extern void _ZN6S247C62v5Ev();
extern void _ZN6S247C62v6Ev();
extern void _ZN6S247C62v7Ev();
extern void _ZN6S247C62v8Ev();
extern void _ZN6S247C62v9Ev();
extern void _ZN6S247C63v10Ev();
extern void _ZN6S247C63v11Ev();
extern void _ZN6S247C63v12Ev();
extern void _ZN6S247C63v13Ev();
extern void _ZN6S247C63v14Ev();
extern void _ZN6S247C63v15Ev();
extern void _ZN6S247C63v16Ev();
extern void _ZN6S247C63v17Ev();
extern void _ZN6S247C63v18Ev();
extern void _ZN6S247C63v19Ev();
extern void _ZN6S247C63v20Ev();
extern void _ZN6S247C63v21Ev();
extern void _ZN6S247C63v22Ev();
extern void _ZN6S247C63v23Ev();
extern void _ZN6S247C63v24Ev();
extern void _ZN6S247C63v25Ev();
extern void _ZN6S247C63v26Ev();
extern void _ZN6S247C63v27Ev();
extern void _ZN6S247C63v28Ev();
extern void _ZN6S247C63v29Ev();
extern void _ZN6S247C63v30Ev();
extern void _ZN6S247C63v31Ev();
extern void _ZN6S247C63v32Ev();
extern void _ZN6S247C63v33Ev();
extern void _ZN6S247C63v34Ev();
extern void _ZN6S247C63v35Ev();
extern void _ZN6S247C63v36Ev();
extern void _ZN6S247C63v37Ev();
extern void _ZN6S247C63v38Ev();
extern void _ZN6S247C63v39Ev();
extern void _ZN6S247C63v40Ev();
extern void _ZN6S247C63v41Ev();
extern void _ZN6S247C63v42Ev();
extern void _ZN6S247C63v43Ev();
extern void _ZN6S247C63v44Ev();
extern void _ZN6S247C63v45Ev();
extern void _ZN6S247C63v46Ev();
extern void _ZN6S247C63v47Ev();
extern void _ZN6S247C63v48Ev();
extern void _ZN6S247C63v49Ev();
extern void _ZN6S247C63v50Ev();
extern void _ZN6S247C63v51Ev();
extern void _ZN6S247C63v52Ev();
extern void _ZN6S247C63v53Ev();
extern void _ZN6S247C63v54Ev();
extern void _ZN6S247C63v55Ev();
extern void _ZN6S247C63v56Ev();
extern void _ZN6S247C63v57Ev();
extern void _ZN6S247C63v58Ev();
extern void _ZN6S247C63v59Ev();
extern void _ZN6S247C63v60Ev();
extern void _ZN6S247C63v61Ev();
extern void _ZN6S247C63v62Ev();
extern void _ZN6S247C63v63Ev();
extern void _ZN6S247C63v64Ev();
extern void _ZN6S247C63v65Ev();
extern void _ZN6S247C63v66Ev();
extern void _ZN6S247C63v67Ev();
extern void _ZN6S247C63v68Ev();
extern void _ZN6S247C53v69Ev();
extern void _ZN6S247C53v70Ev();
extern void _ZN6S247C53v71Ev();
extern void _ZN6S247C53v72Ev();
extern void _ZN6S247C53v73Ev();
extern void _ZN6S247C53v74Ev();
extern void _ZN6S247C53v75Ev();
extern void _ZN6S247C53v76Ev();
extern void _ZN6S247C53v77Ev();
extern void _ZN6S247C53v78Ev();
extern void _ZN6S247C53v79Ev();
extern void _ZN6S247C53v80Ev();
extern void _ZN6S247C53v81Ev();
extern void _ZN6S247C53v82Ev();
extern void _ZN6S247C53v83Ev();
extern void _ZN6S247C53v84Ev();
extern void _ZN6S247C53v85Ev();
extern void _ZN6S247C53v86Ev();
extern void _ZN6S247C53v87Ev();
extern void _ZN6S247C53v88Ev();
extern void _ZN6S247C53v89Ev();
extern void _ZN6S247C53v90Ev();
extern void _ZN6S247C43v91Ev();
extern void _ZN6S247C43v92Ev();
extern void _ZN6S247C43v93Ev();
extern void _ZN6S247C43v94Ev();
extern void _ZN6S247C43v95Ev();
extern void _ZN6S247C43v96Ev();
extern void _ZN6S247C43v97Ev();
extern void _ZN6S247C43v98Ev();
extern void _ZN6S247C43v99Ev();
extern void _ZN6S247C44v100Ev();
extern void _ZN6S247C44v101Ev();
extern void _ZN6S247C44v102Ev();
extern void _ZN6S247C44v103Ev();
extern void _ZN6S247C44v104Ev();
extern void _ZN6S247C44v105Ev();
extern void _ZN6S247C44v106Ev();
extern void _ZN6S247C44v107Ev();
extern void _ZN6S247C44v108Ev();
extern void _ZN6S247C44v109Ev();
extern void _ZN6S247C44v110Ev();
extern void _ZN6S247C34v111Ev();
extern void _ZN6S247C34v112Ev();
extern void _ZN6S247C34v113Ev();
extern void _ZN6S247C34v114Ev();
static  VTBL_ENTRY vtc_S247C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S247C3[0]),
  (VTBL_ENTRY)&_ZN6S247C3D1Ev,
  (VTBL_ENTRY)&_ZN6S247C3D0Ev,
  (VTBL_ENTRY)&_ZN6S247C62v5Ev,
  (VTBL_ENTRY)&_ZN6S247C62v6Ev,
  (VTBL_ENTRY)&_ZN6S247C62v7Ev,
  (VTBL_ENTRY)&_ZN6S247C62v8Ev,
  (VTBL_ENTRY)&_ZN6S247C62v9Ev,
  (VTBL_ENTRY)&_ZN6S247C63v10Ev,
  (VTBL_ENTRY)&_ZN6S247C63v11Ev,
  (VTBL_ENTRY)&_ZN6S247C63v12Ev,
  (VTBL_ENTRY)&_ZN6S247C63v13Ev,
  (VTBL_ENTRY)&_ZN6S247C63v14Ev,
  (VTBL_ENTRY)&_ZN6S247C63v15Ev,
  (VTBL_ENTRY)&_ZN6S247C63v16Ev,
  (VTBL_ENTRY)&_ZN6S247C63v17Ev,
  (VTBL_ENTRY)&_ZN6S247C63v18Ev,
  (VTBL_ENTRY)&_ZN6S247C63v19Ev,
  (VTBL_ENTRY)&_ZN6S247C63v20Ev,
  (VTBL_ENTRY)&_ZN6S247C63v21Ev,
  (VTBL_ENTRY)&_ZN6S247C63v22Ev,
  (VTBL_ENTRY)&_ZN6S247C63v23Ev,
  (VTBL_ENTRY)&_ZN6S247C63v24Ev,
  (VTBL_ENTRY)&_ZN6S247C63v25Ev,
  (VTBL_ENTRY)&_ZN6S247C63v26Ev,
  (VTBL_ENTRY)&_ZN6S247C63v27Ev,
  (VTBL_ENTRY)&_ZN6S247C63v28Ev,
  (VTBL_ENTRY)&_ZN6S247C63v29Ev,
  (VTBL_ENTRY)&_ZN6S247C63v30Ev,
  (VTBL_ENTRY)&_ZN6S247C63v31Ev,
  (VTBL_ENTRY)&_ZN6S247C63v32Ev,
  (VTBL_ENTRY)&_ZN6S247C63v33Ev,
  (VTBL_ENTRY)&_ZN6S247C63v34Ev,
  (VTBL_ENTRY)&_ZN6S247C63v35Ev,
  (VTBL_ENTRY)&_ZN6S247C63v36Ev,
  (VTBL_ENTRY)&_ZN6S247C63v37Ev,
  (VTBL_ENTRY)&_ZN6S247C63v38Ev,
  (VTBL_ENTRY)&_ZN6S247C63v39Ev,
  (VTBL_ENTRY)&_ZN6S247C63v40Ev,
  (VTBL_ENTRY)&_ZN6S247C63v41Ev,
  (VTBL_ENTRY)&_ZN6S247C63v42Ev,
  (VTBL_ENTRY)&_ZN6S247C63v43Ev,
  (VTBL_ENTRY)&_ZN6S247C63v44Ev,
  (VTBL_ENTRY)&_ZN6S247C63v45Ev,
  (VTBL_ENTRY)&_ZN6S247C63v46Ev,
  (VTBL_ENTRY)&_ZN6S247C63v47Ev,
  (VTBL_ENTRY)&_ZN6S247C63v48Ev,
  (VTBL_ENTRY)&_ZN6S247C63v49Ev,
  (VTBL_ENTRY)&_ZN6S247C63v50Ev,
  (VTBL_ENTRY)&_ZN6S247C63v51Ev,
  (VTBL_ENTRY)&_ZN6S247C63v52Ev,
  (VTBL_ENTRY)&_ZN6S247C63v53Ev,
  (VTBL_ENTRY)&_ZN6S247C63v54Ev,
  (VTBL_ENTRY)&_ZN6S247C63v55Ev,
  (VTBL_ENTRY)&_ZN6S247C63v56Ev,
  (VTBL_ENTRY)&_ZN6S247C63v57Ev,
  (VTBL_ENTRY)&_ZN6S247C63v58Ev,
  (VTBL_ENTRY)&_ZN6S247C63v59Ev,
  (VTBL_ENTRY)&_ZN6S247C63v60Ev,
  (VTBL_ENTRY)&_ZN6S247C63v61Ev,
  (VTBL_ENTRY)&_ZN6S247C63v62Ev,
  (VTBL_ENTRY)&_ZN6S247C63v63Ev,
  (VTBL_ENTRY)&_ZN6S247C63v64Ev,
  (VTBL_ENTRY)&_ZN6S247C63v65Ev,
  (VTBL_ENTRY)&_ZN6S247C63v66Ev,
  (VTBL_ENTRY)&_ZN6S247C63v67Ev,
  (VTBL_ENTRY)&_ZN6S247C63v68Ev,
  (VTBL_ENTRY)&_ZN6S247C53v69Ev,
  (VTBL_ENTRY)&_ZN6S247C53v70Ev,
  (VTBL_ENTRY)&_ZN6S247C53v71Ev,
  (VTBL_ENTRY)&_ZN6S247C53v72Ev,
  (VTBL_ENTRY)&_ZN6S247C53v73Ev,
  (VTBL_ENTRY)&_ZN6S247C53v74Ev,
  (VTBL_ENTRY)&_ZN6S247C53v75Ev,
  (VTBL_ENTRY)&_ZN6S247C53v76Ev,
  (VTBL_ENTRY)&_ZN6S247C53v77Ev,
  (VTBL_ENTRY)&_ZN6S247C53v78Ev,
  (VTBL_ENTRY)&_ZN6S247C53v79Ev,
  (VTBL_ENTRY)&_ZN6S247C53v80Ev,
  (VTBL_ENTRY)&_ZN6S247C53v81Ev,
  (VTBL_ENTRY)&_ZN6S247C53v82Ev,
  (VTBL_ENTRY)&_ZN6S247C53v83Ev,
  (VTBL_ENTRY)&_ZN6S247C53v84Ev,
  (VTBL_ENTRY)&_ZN6S247C53v85Ev,
  (VTBL_ENTRY)&_ZN6S247C53v86Ev,
  (VTBL_ENTRY)&_ZN6S247C53v87Ev,
  (VTBL_ENTRY)&_ZN6S247C53v88Ev,
  (VTBL_ENTRY)&_ZN6S247C53v89Ev,
  (VTBL_ENTRY)&_ZN6S247C53v90Ev,
  (VTBL_ENTRY)&_ZN6S247C43v91Ev,
  (VTBL_ENTRY)&_ZN6S247C43v92Ev,
  (VTBL_ENTRY)&_ZN6S247C43v93Ev,
  (VTBL_ENTRY)&_ZN6S247C43v94Ev,
  (VTBL_ENTRY)&_ZN6S247C43v95Ev,
  (VTBL_ENTRY)&_ZN6S247C43v96Ev,
  (VTBL_ENTRY)&_ZN6S247C43v97Ev,
  (VTBL_ENTRY)&_ZN6S247C43v98Ev,
  (VTBL_ENTRY)&_ZN6S247C43v99Ev,
  (VTBL_ENTRY)&_ZN6S247C44v100Ev,
  (VTBL_ENTRY)&_ZN6S247C44v101Ev,
  (VTBL_ENTRY)&_ZN6S247C44v102Ev,
  (VTBL_ENTRY)&_ZN6S247C44v103Ev,
  (VTBL_ENTRY)&_ZN6S247C44v104Ev,
  (VTBL_ENTRY)&_ZN6S247C44v105Ev,
  (VTBL_ENTRY)&_ZN6S247C44v106Ev,
  (VTBL_ENTRY)&_ZN6S247C44v107Ev,
  (VTBL_ENTRY)&_ZN6S247C44v108Ev,
  (VTBL_ENTRY)&_ZN6S247C44v109Ev,
  (VTBL_ENTRY)&_ZN6S247C44v110Ev,
  (VTBL_ENTRY)&_ZN6S247C34v111Ev,
  (VTBL_ENTRY)&_ZN6S247C34v112Ev,
  (VTBL_ENTRY)&_ZN6S247C34v113Ev,
  (VTBL_ENTRY)&_ZN6S247C34v114Ev,
};
extern VTBL_ENTRY _ZTI6S247C3[];
extern  VTBL_ENTRY _ZTV6S247C3[];
Class_Descriptor cd_S247C3 = {  "S247C3", // class name
  bases_S247C3, 3,
  &(vtc_S247C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S247C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S247C3),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  S247C2  : S247C3 {
  virtual  ~S247C2(); // _ZN6S247C2D1Ev
  virtual void  v115(); // _ZN6S247C24v115Ev
  virtual void  v116(); // _ZN6S247C24v116Ev
  S247C2(); // tgen
};
//SIG(-1 S247C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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] 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 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 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v109 v110 v111 v112 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2}


 S247C2 ::~S247C2(){ note_dtor("S247C2", this);}
void  S247C2 ::v115(){vfunc_called(this, "_ZN6S247C24v115Ev");}
void  S247C2 ::v116(){vfunc_called(this, "_ZN6S247C24v116Ev");}
S247C2 ::S247C2(){ note_ctor("S247C2", this);} // tgen

static void Test_S247C2()
{
  extern Class_Descriptor cd_S247C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S247C2, buf);
    S247C2 *dp, &lv = *(dp=new (buf) S247C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S247C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S247C2)");
    check_base_class_offset(lv, (S247C6*)(S247C5*)(S247C4*)(S247C3*), 0, "S247C2");
    check_base_class_offset(lv, (S247C5*)(S247C4*)(S247C3*), 0, "S247C2");
    check_base_class_offset(lv, (S247C4*)(S247C3*), 0, "S247C2");
    check_base_class_offset(lv, (S247C3*), 0, "S247C2");
    test_class_info(&lv, &cd_S247C2);
    dp->~S247C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS247C2(Test_S247C2, "S247C2", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S247C2C1Ev();
extern void _ZN6S247C2D1Ev();
Name_Map name_map_S247C2[] = {
  NSPAIR(_ZN6S247C2C1Ev),
  NSPAIR(_ZN6S247C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S247C6;
extern VTBL_ENTRY _ZTI6S247C6[];
extern  VTBL_ENTRY _ZTV6S247C6[];
extern Class_Descriptor cd_S247C5;
extern VTBL_ENTRY _ZTI6S247C5[];
extern  VTBL_ENTRY _ZTV6S247C5[];
extern Class_Descriptor cd_S247C4;
extern VTBL_ENTRY _ZTI6S247C4[];
extern  VTBL_ENTRY _ZTV6S247C4[];
extern Class_Descriptor cd_S247C3;
extern VTBL_ENTRY _ZTI6S247C3[];
extern  VTBL_ENTRY _ZTV6S247C3[];
static Base_Class bases_S247C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S247C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S247C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S247C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S247C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S247C2[];
extern void _ZN6S247C2D1Ev();
extern void _ZN6S247C2D0Ev();
extern void _ZN6S247C62v5Ev();
extern void _ZN6S247C62v6Ev();
extern void _ZN6S247C62v7Ev();
extern void _ZN6S247C62v8Ev();
extern void _ZN6S247C62v9Ev();
extern void _ZN6S247C63v10Ev();
extern void _ZN6S247C63v11Ev();
extern void _ZN6S247C63v12Ev();
extern void _ZN6S247C63v13Ev();
extern void _ZN6S247C63v14Ev();
extern void _ZN6S247C63v15Ev();
extern void _ZN6S247C63v16Ev();
extern void _ZN6S247C63v17Ev();
extern void _ZN6S247C63v18Ev();
extern void _ZN6S247C63v19Ev();
extern void _ZN6S247C63v20Ev();
extern void _ZN6S247C63v21Ev();
extern void _ZN6S247C63v22Ev();
extern void _ZN6S247C63v23Ev();
extern void _ZN6S247C63v24Ev();
extern void _ZN6S247C63v25Ev();
extern void _ZN6S247C63v26Ev();
extern void _ZN6S247C63v27Ev();
extern void _ZN6S247C63v28Ev();
extern void _ZN6S247C63v29Ev();
extern void _ZN6S247C63v30Ev();
extern void _ZN6S247C63v31Ev();
extern void _ZN6S247C63v32Ev();
extern void _ZN6S247C63v33Ev();
extern void _ZN6S247C63v34Ev();
extern void _ZN6S247C63v35Ev();
extern void _ZN6S247C63v36Ev();
extern void _ZN6S247C63v37Ev();
extern void _ZN6S247C63v38Ev();
extern void _ZN6S247C63v39Ev();
extern void _ZN6S247C63v40Ev();
extern void _ZN6S247C63v41Ev();
extern void _ZN6S247C63v42Ev();
extern void _ZN6S247C63v43Ev();
extern void _ZN6S247C63v44Ev();
extern void _ZN6S247C63v45Ev();
extern void _ZN6S247C63v46Ev();
extern void _ZN6S247C63v47Ev();
extern void _ZN6S247C63v48Ev();
extern void _ZN6S247C63v49Ev();
extern void _ZN6S247C63v50Ev();
extern void _ZN6S247C63v51Ev();
extern void _ZN6S247C63v52Ev();
extern void _ZN6S247C63v53Ev();
extern void _ZN6S247C63v54Ev();
extern void _ZN6S247C63v55Ev();
extern void _ZN6S247C63v56Ev();
extern void _ZN6S247C63v57Ev();
extern void _ZN6S247C63v58Ev();
extern void _ZN6S247C63v59Ev();
extern void _ZN6S247C63v60Ev();
extern void _ZN6S247C63v61Ev();
extern void _ZN6S247C63v62Ev();
extern void _ZN6S247C63v63Ev();
extern void _ZN6S247C63v64Ev();
extern void _ZN6S247C63v65Ev();
extern void _ZN6S247C63v66Ev();
extern void _ZN6S247C63v67Ev();
extern void _ZN6S247C63v68Ev();
extern void _ZN6S247C53v69Ev();
extern void _ZN6S247C53v70Ev();
extern void _ZN6S247C53v71Ev();
extern void _ZN6S247C53v72Ev();
extern void _ZN6S247C53v73Ev();
extern void _ZN6S247C53v74Ev();
extern void _ZN6S247C53v75Ev();
extern void _ZN6S247C53v76Ev();
extern void _ZN6S247C53v77Ev();
extern void _ZN6S247C53v78Ev();
extern void _ZN6S247C53v79Ev();
extern void _ZN6S247C53v80Ev();
extern void _ZN6S247C53v81Ev();
extern void _ZN6S247C53v82Ev();
extern void _ZN6S247C53v83Ev();
extern void _ZN6S247C53v84Ev();
extern void _ZN6S247C53v85Ev();
extern void _ZN6S247C53v86Ev();
extern void _ZN6S247C53v87Ev();
extern void _ZN6S247C53v88Ev();
extern void _ZN6S247C53v89Ev();
extern void _ZN6S247C53v90Ev();
extern void _ZN6S247C43v91Ev();
extern void _ZN6S247C43v92Ev();
extern void _ZN6S247C43v93Ev();
extern void _ZN6S247C43v94Ev();
extern void _ZN6S247C43v95Ev();
extern void _ZN6S247C43v96Ev();
extern void _ZN6S247C43v97Ev();
extern void _ZN6S247C43v98Ev();
extern void _ZN6S247C43v99Ev();
extern void _ZN6S247C44v100Ev();
extern void _ZN6S247C44v101Ev();
extern void _ZN6S247C44v102Ev();
extern void _ZN6S247C44v103Ev();
extern void _ZN6S247C44v104Ev();
extern void _ZN6S247C44v105Ev();
extern void _ZN6S247C44v106Ev();
extern void _ZN6S247C44v107Ev();
extern void _ZN6S247C44v108Ev();
extern void _ZN6S247C44v109Ev();
extern void _ZN6S247C44v110Ev();
extern void _ZN6S247C34v111Ev();
extern void _ZN6S247C34v112Ev();
extern void _ZN6S247C34v113Ev();
extern void _ZN6S247C34v114Ev();
extern void _ZN6S247C24v115Ev();
extern void _ZN6S247C24v116Ev();
static  VTBL_ENTRY vtc_S247C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S247C2[0]),
  (VTBL_ENTRY)&_ZN6S247C2D1Ev,
  (VTBL_ENTRY)&_ZN6S247C2D0Ev,
  (VTBL_ENTRY)&_ZN6S247C62v5Ev,
  (VTBL_ENTRY)&_ZN6S247C62v6Ev,
  (VTBL_ENTRY)&_ZN6S247C62v7Ev,
  (VTBL_ENTRY)&_ZN6S247C62v8Ev,
  (VTBL_ENTRY)&_ZN6S247C62v9Ev,
  (VTBL_ENTRY)&_ZN6S247C63v10Ev,
  (VTBL_ENTRY)&_ZN6S247C63v11Ev,
  (VTBL_ENTRY)&_ZN6S247C63v12Ev,
  (VTBL_ENTRY)&_ZN6S247C63v13Ev,
  (VTBL_ENTRY)&_ZN6S247C63v14Ev,
  (VTBL_ENTRY)&_ZN6S247C63v15Ev,
  (VTBL_ENTRY)&_ZN6S247C63v16Ev,
  (VTBL_ENTRY)&_ZN6S247C63v17Ev,
  (VTBL_ENTRY)&_ZN6S247C63v18Ev,
  (VTBL_ENTRY)&_ZN6S247C63v19Ev,
  (VTBL_ENTRY)&_ZN6S247C63v20Ev,
  (VTBL_ENTRY)&_ZN6S247C63v21Ev,
  (VTBL_ENTRY)&_ZN6S247C63v22Ev,
  (VTBL_ENTRY)&_ZN6S247C63v23Ev,
  (VTBL_ENTRY)&_ZN6S247C63v24Ev,
  (VTBL_ENTRY)&_ZN6S247C63v25Ev,
  (VTBL_ENTRY)&_ZN6S247C63v26Ev,
  (VTBL_ENTRY)&_ZN6S247C63v27Ev,
  (VTBL_ENTRY)&_ZN6S247C63v28Ev,
  (VTBL_ENTRY)&_ZN6S247C63v29Ev,
  (VTBL_ENTRY)&_ZN6S247C63v30Ev,
  (VTBL_ENTRY)&_ZN6S247C63v31Ev,
  (VTBL_ENTRY)&_ZN6S247C63v32Ev,
  (VTBL_ENTRY)&_ZN6S247C63v33Ev,
  (VTBL_ENTRY)&_ZN6S247C63v34Ev,
  (VTBL_ENTRY)&_ZN6S247C63v35Ev,
  (VTBL_ENTRY)&_ZN6S247C63v36Ev,
  (VTBL_ENTRY)&_ZN6S247C63v37Ev,
  (VTBL_ENTRY)&_ZN6S247C63v38Ev,
  (VTBL_ENTRY)&_ZN6S247C63v39Ev,
  (VTBL_ENTRY)&_ZN6S247C63v40Ev,
  (VTBL_ENTRY)&_ZN6S247C63v41Ev,
  (VTBL_ENTRY)&_ZN6S247C63v42Ev,
  (VTBL_ENTRY)&_ZN6S247C63v43Ev,
  (VTBL_ENTRY)&_ZN6S247C63v44Ev,
  (VTBL_ENTRY)&_ZN6S247C63v45Ev,
  (VTBL_ENTRY)&_ZN6S247C63v46Ev,
  (VTBL_ENTRY)&_ZN6S247C63v47Ev,
  (VTBL_ENTRY)&_ZN6S247C63v48Ev,
  (VTBL_ENTRY)&_ZN6S247C63v49Ev,
  (VTBL_ENTRY)&_ZN6S247C63v50Ev,
  (VTBL_ENTRY)&_ZN6S247C63v51Ev,
  (VTBL_ENTRY)&_ZN6S247C63v52Ev,
  (VTBL_ENTRY)&_ZN6S247C63v53Ev,
  (VTBL_ENTRY)&_ZN6S247C63v54Ev,
  (VTBL_ENTRY)&_ZN6S247C63v55Ev,
  (VTBL_ENTRY)&_ZN6S247C63v56Ev,
  (VTBL_ENTRY)&_ZN6S247C63v57Ev,
  (VTBL_ENTRY)&_ZN6S247C63v58Ev,
  (VTBL_ENTRY)&_ZN6S247C63v59Ev,
  (VTBL_ENTRY)&_ZN6S247C63v60Ev,
  (VTBL_ENTRY)&_ZN6S247C63v61Ev,
  (VTBL_ENTRY)&_ZN6S247C63v62Ev,
  (VTBL_ENTRY)&_ZN6S247C63v63Ev,
  (VTBL_ENTRY)&_ZN6S247C63v64Ev,
  (VTBL_ENTRY)&_ZN6S247C63v65Ev,
  (VTBL_ENTRY)&_ZN6S247C63v66Ev,
  (VTBL_ENTRY)&_ZN6S247C63v67Ev,
  (VTBL_ENTRY)&_ZN6S247C63v68Ev,
  (VTBL_ENTRY)&_ZN6S247C53v69Ev,
  (VTBL_ENTRY)&_ZN6S247C53v70Ev,
  (VTBL_ENTRY)&_ZN6S247C53v71Ev,
  (VTBL_ENTRY)&_ZN6S247C53v72Ev,
  (VTBL_ENTRY)&_ZN6S247C53v73Ev,
  (VTBL_ENTRY)&_ZN6S247C53v74Ev,
  (VTBL_ENTRY)&_ZN6S247C53v75Ev,
  (VTBL_ENTRY)&_ZN6S247C53v76Ev,
  (VTBL_ENTRY)&_ZN6S247C53v77Ev,
  (VTBL_ENTRY)&_ZN6S247C53v78Ev,
  (VTBL_ENTRY)&_ZN6S247C53v79Ev,
  (VTBL_ENTRY)&_ZN6S247C53v80Ev,
  (VTBL_ENTRY)&_ZN6S247C53v81Ev,
  (VTBL_ENTRY)&_ZN6S247C53v82Ev,
  (VTBL_ENTRY)&_ZN6S247C53v83Ev,
  (VTBL_ENTRY)&_ZN6S247C53v84Ev,
  (VTBL_ENTRY)&_ZN6S247C53v85Ev,
  (VTBL_ENTRY)&_ZN6S247C53v86Ev,
  (VTBL_ENTRY)&_ZN6S247C53v87Ev,
  (VTBL_ENTRY)&_ZN6S247C53v88Ev,
  (VTBL_ENTRY)&_ZN6S247C53v89Ev,
  (VTBL_ENTRY)&_ZN6S247C53v90Ev,
  (VTBL_ENTRY)&_ZN6S247C43v91Ev,
  (VTBL_ENTRY)&_ZN6S247C43v92Ev,
  (VTBL_ENTRY)&_ZN6S247C43v93Ev,
  (VTBL_ENTRY)&_ZN6S247C43v94Ev,
  (VTBL_ENTRY)&_ZN6S247C43v95Ev,
  (VTBL_ENTRY)&_ZN6S247C43v96Ev,
  (VTBL_ENTRY)&_ZN6S247C43v97Ev,
  (VTBL_ENTRY)&_ZN6S247C43v98Ev,
  (VTBL_ENTRY)&_ZN6S247C43v99Ev,
  (VTBL_ENTRY)&_ZN6S247C44v100Ev,
  (VTBL_ENTRY)&_ZN6S247C44v101Ev,
  (VTBL_ENTRY)&_ZN6S247C44v102Ev,
  (VTBL_ENTRY)&_ZN6S247C44v103Ev,
  (VTBL_ENTRY)&_ZN6S247C44v104Ev,
  (VTBL_ENTRY)&_ZN6S247C44v105Ev,
  (VTBL_ENTRY)&_ZN6S247C44v106Ev,
  (VTBL_ENTRY)&_ZN6S247C44v107Ev,
  (VTBL_ENTRY)&_ZN6S247C44v108Ev,
  (VTBL_ENTRY)&_ZN6S247C44v109Ev,
  (VTBL_ENTRY)&_ZN6S247C44v110Ev,
  (VTBL_ENTRY)&_ZN6S247C34v111Ev,
  (VTBL_ENTRY)&_ZN6S247C34v112Ev,
  (VTBL_ENTRY)&_ZN6S247C34v113Ev,
  (VTBL_ENTRY)&_ZN6S247C34v114Ev,
  (VTBL_ENTRY)&_ZN6S247C24v115Ev,
  (VTBL_ENTRY)&_ZN6S247C24v116Ev,
};
extern VTBL_ENTRY _ZTI6S247C2[];
extern  VTBL_ENTRY _ZTV6S247C2[];
Class_Descriptor cd_S247C2 = {  "S247C2", // class name
  bases_S247C2, 4,
  &(vtc_S247C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S247C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S247C2),116, //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  S247C1  : S247C2 {
  int s247c1f0;
  virtual  ~S247C1(); // _ZN6S247C1D1Ev
  virtual void  v1(); // _ZN6S247C12v1Ev
  virtual void  v2(); // _ZN6S247C12v2Ev
  virtual void  v3(); // _ZN6S247C12v3Ev
  virtual void  v4(); // _ZN6S247C12v4Ev
  S247C1(); // tgen
};
//SIG(1 S247C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ 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 FC7{ 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] 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 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 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC19{ BC20{ BC11}} Fi[3]} vd v111 v112 v113 v114 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v115 v116} vd v1 v2 v3 v4 Fi}


 S247C1 ::~S247C1(){ note_dtor("S247C1", this);}
void  S247C1 ::v1(){vfunc_called(this, "_ZN6S247C12v1Ev");}
void  S247C1 ::v2(){vfunc_called(this, "_ZN6S247C12v2Ev");}
void  S247C1 ::v3(){vfunc_called(this, "_ZN6S247C12v3Ev");}
void  S247C1 ::v4(){vfunc_called(this, "_ZN6S247C12v4Ev");}
S247C1 ::S247C1(){ note_ctor("S247C1", this);} // tgen

static void Test_S247C1()
{
  extern Class_Descriptor cd_S247C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,57)];
    init_test(&cd_S247C1, buf);
    S247C1 *dp, &lv = *(dp=new (buf) S247C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,224), "sizeof(S247C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S247C1)");
    check_base_class_offset(lv, (S247C6*)(S247C5*)(S247C4*)(S247C3*)(S247C2*), 0, "S247C1");
    check_base_class_offset(lv, (S247C5*)(S247C4*)(S247C3*)(S247C2*), 0, "S247C1");
    check_base_class_offset(lv, (S247C4*)(S247C3*)(S247C2*), 0, "S247C1");
    check_base_class_offset(lv, (S247C3*)(S247C2*), 0, "S247C1");
    check_base_class_offset(lv, (S247C2*), 0, "S247C1");
    check_field_offset(lv, s247c1f0, ABISELECT(296,220), "S247C1.s247c1f0");
    test_class_info(&lv, &cd_S247C1);
    dp->~S247C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS247C1(Test_S247C1, "S247C1", ABISELECT(304,224));

#else // __cplusplus

extern void _ZN6S247C1C1Ev();
extern void _ZN6S247C1D1Ev();
Name_Map name_map_S247C1[] = {
  NSPAIR(_ZN6S247C1C1Ev),
  NSPAIR(_ZN6S247C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S247C6;
extern VTBL_ENTRY _ZTI6S247C6[];
extern  VTBL_ENTRY _ZTV6S247C6[];
extern Class_Descriptor cd_S247C5;
extern VTBL_ENTRY _ZTI6S247C5[];
extern  VTBL_ENTRY _ZTV6S247C5[];
extern Class_Descriptor cd_S247C4;
extern VTBL_ENTRY _ZTI6S247C4[];
extern  VTBL_ENTRY _ZTV6S247C4[];
extern Class_Descriptor cd_S247C3;
extern VTBL_ENTRY _ZTI6S247C3[];
extern  VTBL_ENTRY _ZTV6S247C3[];
extern Class_Descriptor cd_S247C2;
extern VTBL_ENTRY _ZTI6S247C2[];
extern  VTBL_ENTRY _ZTV6S247C2[];
static Base_Class bases_S247C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S247C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S247C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S247C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S247C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S247C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S247C1[];
extern void _ZN6S247C1D1Ev();
extern void _ZN6S247C1D0Ev();
extern void _ZN6S247C62v5Ev();
extern void _ZN6S247C62v6Ev();
extern void _ZN6S247C62v7Ev();
extern void _ZN6S247C62v8Ev();
extern void _ZN6S247C62v9Ev();
extern void _ZN6S247C63v10Ev();
extern void _ZN6S247C63v11Ev();
extern void _ZN6S247C63v12Ev();
extern void _ZN6S247C63v13Ev();
extern void _ZN6S247C63v14Ev();
extern void _ZN6S247C63v15Ev();
extern void _ZN6S247C63v16Ev();
extern void _ZN6S247C63v17Ev();
extern void _ZN6S247C63v18Ev();
extern void _ZN6S247C63v19Ev();
extern void _ZN6S247C63v20Ev();
extern void _ZN6S247C63v21Ev();
extern void _ZN6S247C63v22Ev();
extern void _ZN6S247C63v23Ev();
extern void _ZN6S247C63v24Ev();
extern void _ZN6S247C63v25Ev();
extern void _ZN6S247C63v26Ev();
extern void _ZN6S247C63v27Ev();
extern void _ZN6S247C63v28Ev();
extern void _ZN6S247C63v29Ev();
extern void _ZN6S247C63v30Ev();
extern void _ZN6S247C63v31Ev();
extern void _ZN6S247C63v32Ev();
extern void _ZN6S247C63v33Ev();
extern void _ZN6S247C63v34Ev();
extern void _ZN6S247C63v35Ev();
extern void _ZN6S247C63v36Ev();
extern void _ZN6S247C63v37Ev();
extern void _ZN6S247C63v38Ev();
extern void _ZN6S247C63v39Ev();
extern void _ZN6S247C63v40Ev();
extern void _ZN6S247C63v41Ev();
extern void _ZN6S247C63v42Ev();
extern void _ZN6S247C63v43Ev();
extern void _ZN6S247C63v44Ev();
extern void _ZN6S247C63v45Ev();
extern void _ZN6S247C63v46Ev();
extern void _ZN6S247C63v47Ev();
extern void _ZN6S247C63v48Ev();
extern void _ZN6S247C63v49Ev();
extern void _ZN6S247C63v50Ev();
extern void _ZN6S247C63v51Ev();
extern void _ZN6S247C63v52Ev();
extern void _ZN6S247C63v53Ev();
extern void _ZN6S247C63v54Ev();
extern void _ZN6S247C63v55Ev();
extern void _ZN6S247C63v56Ev();
extern void _ZN6S247C63v57Ev();
extern void _ZN6S247C63v58Ev();
extern void _ZN6S247C63v59Ev();
extern void _ZN6S247C63v60Ev();
extern void _ZN6S247C63v61Ev();
extern void _ZN6S247C63v62Ev();
extern void _ZN6S247C63v63Ev();
extern void _ZN6S247C63v64Ev();
extern void _ZN6S247C63v65Ev();
extern void _ZN6S247C63v66Ev();
extern void _ZN6S247C63v67Ev();
extern void _ZN6S247C63v68Ev();
extern void _ZN6S247C53v69Ev();
extern void _ZN6S247C53v70Ev();
extern void _ZN6S247C53v71Ev();
extern void _ZN6S247C53v72Ev();
extern void _ZN6S247C53v73Ev();
extern void _ZN6S247C53v74Ev();
extern void _ZN6S247C53v75Ev();
extern void _ZN6S247C53v76Ev();
extern void _ZN6S247C53v77Ev();
extern void _ZN6S247C53v78Ev();
extern void _ZN6S247C53v79Ev();
extern void _ZN6S247C53v80Ev();
extern void _ZN6S247C53v81Ev();
extern void _ZN6S247C53v82Ev();
extern void _ZN6S247C53v83Ev();
extern void _ZN6S247C53v84Ev();
extern void _ZN6S247C53v85Ev();
extern void _ZN6S247C53v86Ev();
extern void _ZN6S247C53v87Ev();
extern void _ZN6S247C53v88Ev();
extern void _ZN6S247C53v89Ev();
extern void _ZN6S247C53v90Ev();
extern void _ZN6S247C43v91Ev();
extern void _ZN6S247C43v92Ev();
extern void _ZN6S247C43v93Ev();
extern void _ZN6S247C43v94Ev();
extern void _ZN6S247C43v95Ev();
extern void _ZN6S247C43v96Ev();
extern void _ZN6S247C43v97Ev();
extern void _ZN6S247C43v98Ev();
extern void _ZN6S247C43v99Ev();
extern void _ZN6S247C44v100Ev();
extern void _ZN6S247C44v101Ev();
extern void _ZN6S247C44v102Ev();
extern void _ZN6S247C44v103Ev();
extern void _ZN6S247C44v104Ev();
extern void _ZN6S247C44v105Ev();
extern void _ZN6S247C44v106Ev();
extern void _ZN6S247C44v107Ev();
extern void _ZN6S247C44v108Ev();
extern void _ZN6S247C44v109Ev();
extern void _ZN6S247C44v110Ev();
extern void _ZN6S247C34v111Ev();
extern void _ZN6S247C34v112Ev();
extern void _ZN6S247C34v113Ev();
extern void _ZN6S247C34v114Ev();
extern void _ZN6S247C24v115Ev();
extern void _ZN6S247C24v116Ev();
extern void _ZN6S247C12v1Ev();
extern void _ZN6S247C12v2Ev();
extern void _ZN6S247C12v3Ev();
extern void _ZN6S247C12v4Ev();
static  VTBL_ENTRY vtc_S247C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S247C1[0]),
  (VTBL_ENTRY)&_ZN6S247C1D1Ev,
  (VTBL_ENTRY)&_ZN6S247C1D0Ev,
  (VTBL_ENTRY)&_ZN6S247C62v5Ev,
  (VTBL_ENTRY)&_ZN6S247C62v6Ev,
  (VTBL_ENTRY)&_ZN6S247C62v7Ev,
  (VTBL_ENTRY)&_ZN6S247C62v8Ev,
  (VTBL_ENTRY)&_ZN6S247C62v9Ev,
  (VTBL_ENTRY)&_ZN6S247C63v10Ev,
  (VTBL_ENTRY)&_ZN6S247C63v11Ev,
  (VTBL_ENTRY)&_ZN6S247C63v12Ev,
  (VTBL_ENTRY)&_ZN6S247C63v13Ev,
  (VTBL_ENTRY)&_ZN6S247C63v14Ev,
  (VTBL_ENTRY)&_ZN6S247C63v15Ev,
  (VTBL_ENTRY)&_ZN6S247C63v16Ev,
  (VTBL_ENTRY)&_ZN6S247C63v17Ev,
  (VTBL_ENTRY)&_ZN6S247C63v18Ev,
  (VTBL_ENTRY)&_ZN6S247C63v19Ev,
  (VTBL_ENTRY)&_ZN6S247C63v20Ev,
  (VTBL_ENTRY)&_ZN6S247C63v21Ev,
  (VTBL_ENTRY)&_ZN6S247C63v22Ev,
  (VTBL_ENTRY)&_ZN6S247C63v23Ev,
  (VTBL_ENTRY)&_ZN6S247C63v24Ev,
  (VTBL_ENTRY)&_ZN6S247C63v25Ev,
  (VTBL_ENTRY)&_ZN6S247C63v26Ev,
  (VTBL_ENTRY)&_ZN6S247C63v27Ev,
  (VTBL_ENTRY)&_ZN6S247C63v28Ev,
  (VTBL_ENTRY)&_ZN6S247C63v29Ev,
  (VTBL_ENTRY)&_ZN6S247C63v30Ev,
  (VTBL_ENTRY)&_ZN6S247C63v31Ev,
  (VTBL_ENTRY)&_ZN6S247C63v32Ev,
  (VTBL_ENTRY)&_ZN6S247C63v33Ev,
  (VTBL_ENTRY)&_ZN6S247C63v34Ev,
  (VTBL_ENTRY)&_ZN6S247C63v35Ev,
  (VTBL_ENTRY)&_ZN6S247C63v36Ev,
  (VTBL_ENTRY)&_ZN6S247C63v37Ev,
  (VTBL_ENTRY)&_ZN6S247C63v38Ev,
  (VTBL_ENTRY)&_ZN6S247C63v39Ev,
  (VTBL_ENTRY)&_ZN6S247C63v40Ev,
  (VTBL_ENTRY)&_ZN6S247C63v41Ev,
  (VTBL_ENTRY)&_ZN6S247C63v42Ev,
  (VTBL_ENTRY)&_ZN6S247C63v43Ev,
  (VTBL_ENTRY)&_ZN6S247C63v44Ev,
  (VTBL_ENTRY)&_ZN6S247C63v45Ev,
  (VTBL_ENTRY)&_ZN6S247C63v46Ev,
  (VTBL_ENTRY)&_ZN6S247C63v47Ev,
  (VTBL_ENTRY)&_ZN6S247C63v48Ev,
  (VTBL_ENTRY)&_ZN6S247C63v49Ev,
  (VTBL_ENTRY)&_ZN6S247C63v50Ev,
  (VTBL_ENTRY)&_ZN6S247C63v51Ev,
  (VTBL_ENTRY)&_ZN6S247C63v52Ev,
  (VTBL_ENTRY)&_ZN6S247C63v53Ev,
  (VTBL_ENTRY)&_ZN6S247C63v54Ev,
  (VTBL_ENTRY)&_ZN6S247C63v55Ev,
  (VTBL_ENTRY)&_ZN6S247C63v56Ev,
  (VTBL_ENTRY)&_ZN6S247C63v57Ev,
  (VTBL_ENTRY)&_ZN6S247C63v58Ev,
  (VTBL_ENTRY)&_ZN6S247C63v59Ev,
  (VTBL_ENTRY)&_ZN6S247C63v60Ev,
  (VTBL_ENTRY)&_ZN6S247C63v61Ev,
  (VTBL_ENTRY)&_ZN6S247C63v62Ev,
  (VTBL_ENTRY)&_ZN6S247C63v63Ev,
  (VTBL_ENTRY)&_ZN6S247C63v64Ev,
  (VTBL_ENTRY)&_ZN6S247C63v65Ev,
  (VTBL_ENTRY)&_ZN6S247C63v66Ev,
  (VTBL_ENTRY)&_ZN6S247C63v67Ev,
  (VTBL_ENTRY)&_ZN6S247C63v68Ev,
  (VTBL_ENTRY)&_ZN6S247C53v69Ev,
  (VTBL_ENTRY)&_ZN6S247C53v70Ev,
  (VTBL_ENTRY)&_ZN6S247C53v71Ev,
  (VTBL_ENTRY)&_ZN6S247C53v72Ev,
  (VTBL_ENTRY)&_ZN6S247C53v73Ev,
  (VTBL_ENTRY)&_ZN6S247C53v74Ev,
  (VTBL_ENTRY)&_ZN6S247C53v75Ev,
  (VTBL_ENTRY)&_ZN6S247C53v76Ev,
  (VTBL_ENTRY)&_ZN6S247C53v77Ev,
  (VTBL_ENTRY)&_ZN6S247C53v78Ev,
  (VTBL_ENTRY)&_ZN6S247C53v79Ev,
  (VTBL_ENTRY)&_ZN6S247C53v80Ev,
  (VTBL_ENTRY)&_ZN6S247C53v81Ev,
  (VTBL_ENTRY)&_ZN6S247C53v82Ev,
  (VTBL_ENTRY)&_ZN6S247C53v83Ev,
  (VTBL_ENTRY)&_ZN6S247C53v84Ev,
  (VTBL_ENTRY)&_ZN6S247C53v85Ev,
  (VTBL_ENTRY)&_ZN6S247C53v86Ev,
  (VTBL_ENTRY)&_ZN6S247C53v87Ev,
  (VTBL_ENTRY)&_ZN6S247C53v88Ev,
  (VTBL_ENTRY)&_ZN6S247C53v89Ev,
  (VTBL_ENTRY)&_ZN6S247C53v90Ev,
  (VTBL_ENTRY)&_ZN6S247C43v91Ev,
  (VTBL_ENTRY)&_ZN6S247C43v92Ev,
  (VTBL_ENTRY)&_ZN6S247C43v93Ev,
  (VTBL_ENTRY)&_ZN6S247C43v94Ev,
  (VTBL_ENTRY)&_ZN6S247C43v95Ev,
  (VTBL_ENTRY)&_ZN6S247C43v96Ev,
  (VTBL_ENTRY)&_ZN6S247C43v97Ev,
  (VTBL_ENTRY)&_ZN6S247C43v98Ev,
  (VTBL_ENTRY)&_ZN6S247C43v99Ev,
  (VTBL_ENTRY)&_ZN6S247C44v100Ev,
  (VTBL_ENTRY)&_ZN6S247C44v101Ev,
  (VTBL_ENTRY)&_ZN6S247C44v102Ev,
  (VTBL_ENTRY)&_ZN6S247C44v103Ev,
  (VTBL_ENTRY)&_ZN6S247C44v104Ev,
  (VTBL_ENTRY)&_ZN6S247C44v105Ev,
  (VTBL_ENTRY)&_ZN6S247C44v106Ev,
  (VTBL_ENTRY)&_ZN6S247C44v107Ev,
  (VTBL_ENTRY)&_ZN6S247C44v108Ev,
  (VTBL_ENTRY)&_ZN6S247C44v109Ev,
  (VTBL_ENTRY)&_ZN6S247C44v110Ev,
  (VTBL_ENTRY)&_ZN6S247C34v111Ev,
  (VTBL_ENTRY)&_ZN6S247C34v112Ev,
  (VTBL_ENTRY)&_ZN6S247C34v113Ev,
  (VTBL_ENTRY)&_ZN6S247C34v114Ev,
  (VTBL_ENTRY)&_ZN6S247C24v115Ev,
  (VTBL_ENTRY)&_ZN6S247C24v116Ev,
  (VTBL_ENTRY)&_ZN6S247C12v1Ev,
  (VTBL_ENTRY)&_ZN6S247C12v2Ev,
  (VTBL_ENTRY)&_ZN6S247C12v3Ev,
  (VTBL_ENTRY)&_ZN6S247C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S247C1[];
extern  VTBL_ENTRY _ZTV6S247C1[];
Class_Descriptor cd_S247C1 = {  "S247C1", // class name
  bases_S247C1, 5,
  &(vtc_S247C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,224), // object size
  NSPAIRA(_ZTI6S247C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S247C1),120, //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  S212C6  {
  int s212c6f0;
  __tsi64 s212c6f1;
  void *s212c6f2[4];
  int s212c6f3[2];
  void *s212c6f4;
  ::S1503C5_nt s212c6f5;
  void *s212c6f6[2];
  virtual  ~S212C6(); // _ZN6S212C6D1Ev
  virtual void  v4(); // _ZN6S212C62v4Ev
  virtual void  v5(); // _ZN6S212C62v5Ev
  virtual void  v6(); // _ZN6S212C62v6Ev
  virtual void  v7(); // _ZN6S212C62v7Ev
  virtual void  v8(); // _ZN6S212C62v8Ev
  virtual void  v9(); // _ZN6S212C62v9Ev
  virtual void  v10(); // _ZN6S212C63v10Ev
  virtual void  v11(); // _ZN6S212C63v11Ev
  virtual void  v12(); // _ZN6S212C63v12Ev
  virtual void  v13(); // _ZN6S212C63v13Ev
  virtual void  v14(); // _ZN6S212C63v14Ev
  virtual void  v15(); // _ZN6S212C63v15Ev
  virtual void  v16(); // _ZN6S212C63v16Ev
  virtual void  v17(); // _ZN6S212C63v17Ev
  virtual void  v18(); // _ZN6S212C63v18Ev
  virtual void  v19(); // _ZN6S212C63v19Ev
  virtual void  v20(); // _ZN6S212C63v20Ev
  virtual void  v21(); // _ZN6S212C63v21Ev
  virtual void  v22(); // _ZN6S212C63v22Ev
  virtual void  v23(); // _ZN6S212C63v23Ev
  virtual void  v24(); // _ZN6S212C63v24Ev
  virtual void  v25(); // _ZN6S212C63v25Ev
  virtual void  v26(); // _ZN6S212C63v26Ev
  virtual void  v27(); // _ZN6S212C63v27Ev
  virtual void  v28(); // _ZN6S212C63v28Ev
  virtual void  v29(); // _ZN6S212C63v29Ev
  virtual void  v30(); // _ZN6S212C63v30Ev
  virtual void  v31(); // _ZN6S212C63v31Ev
  virtual void  v32(); // _ZN6S212C63v32Ev
  virtual void  v33(); // _ZN6S212C63v33Ev
  virtual void  v34(); // _ZN6S212C63v34Ev
  virtual void  v35(); // _ZN6S212C63v35Ev
  virtual void  v36(); // _ZN6S212C63v36Ev
  virtual void  v37(); // _ZN6S212C63v37Ev
  virtual void  v38(); // _ZN6S212C63v38Ev
  virtual void  v39(); // _ZN6S212C63v39Ev
  virtual void  v40(); // _ZN6S212C63v40Ev
  virtual void  v41(); // _ZN6S212C63v41Ev
  virtual void  v42(); // _ZN6S212C63v42Ev
  virtual void  v43(); // _ZN6S212C63v43Ev
  virtual void  v44(); // _ZN6S212C63v44Ev
  virtual void  v45(); // _ZN6S212C63v45Ev
  virtual void  v46(); // _ZN6S212C63v46Ev
  virtual void  v47(); // _ZN6S212C63v47Ev
  virtual void  v48(); // _ZN6S212C63v48Ev
  virtual void  v49(); // _ZN6S212C63v49Ev
  virtual void  v50(); // _ZN6S212C63v50Ev
  virtual void  v51(); // _ZN6S212C63v51Ev
  virtual void  v52(); // _ZN6S212C63v52Ev
  virtual void  v53(); // _ZN6S212C63v53Ev
  virtual void  v54(); // _ZN6S212C63v54Ev
  virtual void  v55(); // _ZN6S212C63v55Ev
  virtual void  v56(); // _ZN6S212C63v56Ev
  virtual void  v57(); // _ZN6S212C63v57Ev
  virtual void  v58(); // _ZN6S212C63v58Ev
  virtual void  v59(); // _ZN6S212C63v59Ev
  virtual void  v60(); // _ZN6S212C63v60Ev
  virtual void  v61(); // _ZN6S212C63v61Ev
  virtual void  v62(); // _ZN6S212C63v62Ev
  virtual void  v63(); // _ZN6S212C63v63Ev
  virtual void  v64(); // _ZN6S212C63v64Ev
  virtual void  v65(); // _ZN6S212C63v65Ev
  virtual void  v66(); // _ZN6S212C63v66Ev
  virtual void  v67(); // _ZN6S212C63v67Ev
  S212C6(); // tgen
};
//SIG(-1 S212C6) 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]}


 S212C6 ::~S212C6(){ note_dtor("S212C6", this);}
void  S212C6 ::v4(){vfunc_called(this, "_ZN6S212C62v4Ev");}
void  S212C6 ::v5(){vfunc_called(this, "_ZN6S212C62v5Ev");}
void  S212C6 ::v6(){vfunc_called(this, "_ZN6S212C62v6Ev");}
void  S212C6 ::v7(){vfunc_called(this, "_ZN6S212C62v7Ev");}
void  S212C6 ::v8(){vfunc_called(this, "_ZN6S212C62v8Ev");}
void  S212C6 ::v9(){vfunc_called(this, "_ZN6S212C62v9Ev");}
void  S212C6 ::v10(){vfunc_called(this, "_ZN6S212C63v10Ev");}
void  S212C6 ::v11(){vfunc_called(this, "_ZN6S212C63v11Ev");}
void  S212C6 ::v12(){vfunc_called(this, "_ZN6S212C63v12Ev");}
void  S212C6 ::v13(){vfunc_called(this, "_ZN6S212C63v13Ev");}
void  S212C6 ::v14(){vfunc_called(this, "_ZN6S212C63v14Ev");}
void  S212C6 ::v15(){vfunc_called(this, "_ZN6S212C63v15Ev");}
void  S212C6 ::v16(){vfunc_called(this, "_ZN6S212C63v16Ev");}
void  S212C6 ::v17(){vfunc_called(this, "_ZN6S212C63v17Ev");}
void  S212C6 ::v18(){vfunc_called(this, "_ZN6S212C63v18Ev");}
void  S212C6 ::v19(){vfunc_called(this, "_ZN6S212C63v19Ev");}
void  S212C6 ::v20(){vfunc_called(this, "_ZN6S212C63v20Ev");}
void  S212C6 ::v21(){vfunc_called(this, "_ZN6S212C63v21Ev");}
void  S212C6 ::v22(){vfunc_called(this, "_ZN6S212C63v22Ev");}
void  S212C6 ::v23(){vfunc_called(this, "_ZN6S212C63v23Ev");}
void  S212C6 ::v24(){vfunc_called(this, "_ZN6S212C63v24Ev");}
void  S212C6 ::v25(){vfunc_called(this, "_ZN6S212C63v25Ev");}
void  S212C6 ::v26(){vfunc_called(this, "_ZN6S212C63v26Ev");}
void  S212C6 ::v27(){vfunc_called(this, "_ZN6S212C63v27Ev");}
void  S212C6 ::v28(){vfunc_called(this, "_ZN6S212C63v28Ev");}
void  S212C6 ::v29(){vfunc_called(this, "_ZN6S212C63v29Ev");}
void  S212C6 ::v30(){vfunc_called(this, "_ZN6S212C63v30Ev");}
void  S212C6 ::v31(){vfunc_called(this, "_ZN6S212C63v31Ev");}
void  S212C6 ::v32(){vfunc_called(this, "_ZN6S212C63v32Ev");}
void  S212C6 ::v33(){vfunc_called(this, "_ZN6S212C63v33Ev");}
void  S212C6 ::v34(){vfunc_called(this, "_ZN6S212C63v34Ev");}
void  S212C6 ::v35(){vfunc_called(this, "_ZN6S212C63v35Ev");}
void  S212C6 ::v36(){vfunc_called(this, "_ZN6S212C63v36Ev");}
void  S212C6 ::v37(){vfunc_called(this, "_ZN6S212C63v37Ev");}
void  S212C6 ::v38(){vfunc_called(this, "_ZN6S212C63v38Ev");}
void  S212C6 ::v39(){vfunc_called(this, "_ZN6S212C63v39Ev");}
void  S212C6 ::v40(){vfunc_called(this, "_ZN6S212C63v40Ev");}
void  S212C6 ::v41(){vfunc_called(this, "_ZN6S212C63v41Ev");}
void  S212C6 ::v42(){vfunc_called(this, "_ZN6S212C63v42Ev");}
void  S212C6 ::v43(){vfunc_called(this, "_ZN6S212C63v43Ev");}
void  S212C6 ::v44(){vfunc_called(this, "_ZN6S212C63v44Ev");}
void  S212C6 ::v45(){vfunc_called(this, "_ZN6S212C63v45Ev");}
void  S212C6 ::v46(){vfunc_called(this, "_ZN6S212C63v46Ev");}
void  S212C6 ::v47(){vfunc_called(this, "_ZN6S212C63v47Ev");}
void  S212C6 ::v48(){vfunc_called(this, "_ZN6S212C63v48Ev");}
void  S212C6 ::v49(){vfunc_called(this, "_ZN6S212C63v49Ev");}
void  S212C6 ::v50(){vfunc_called(this, "_ZN6S212C63v50Ev");}
void  S212C6 ::v51(){vfunc_called(this, "_ZN6S212C63v51Ev");}
void  S212C6 ::v52(){vfunc_called(this, "_ZN6S212C63v52Ev");}
void  S212C6 ::v53(){vfunc_called(this, "_ZN6S212C63v53Ev");}
void  S212C6 ::v54(){vfunc_called(this, "_ZN6S212C63v54Ev");}
void  S212C6 ::v55(){vfunc_called(this, "_ZN6S212C63v55Ev");}
void  S212C6 ::v56(){vfunc_called(this, "_ZN6S212C63v56Ev");}
void  S212C6 ::v57(){vfunc_called(this, "_ZN6S212C63v57Ev");}
void  S212C6 ::v58(){vfunc_called(this, "_ZN6S212C63v58Ev");}
void  S212C6 ::v59(){vfunc_called(this, "_ZN6S212C63v59Ev");}
void  S212C6 ::v60(){vfunc_called(this, "_ZN6S212C63v60Ev");}
void  S212C6 ::v61(){vfunc_called(this, "_ZN6S212C63v61Ev");}
void  S212C6 ::v62(){vfunc_called(this, "_ZN6S212C63v62Ev");}
void  S212C6 ::v63(){vfunc_called(this, "_ZN6S212C63v63Ev");}
void  S212C6 ::v64(){vfunc_called(this, "_ZN6S212C63v64Ev");}
void  S212C6 ::v65(){vfunc_called(this, "_ZN6S212C63v65Ev");}
void  S212C6 ::v66(){vfunc_called(this, "_ZN6S212C63v66Ev");}
void  S212C6 ::v67(){vfunc_called(this, "_ZN6S212C63v67Ev");}
S212C6 ::S212C6(){ note_ctor("S212C6", this);} // tgen

static void Test_S212C6()
{
  extern Class_Descriptor cd_S212C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S212C6, buf);
    S212C6 *dp, &lv = *(dp=new (buf) S212C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S212C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S212C6)");
    check_field_offset(lv, s212c6f0, ABISELECT(8,4), "S212C6.s212c6f0");
    check_field_offset(lv, s212c6f1, ABISELECT(16,8), "S212C6.s212c6f1");
    check_field_offset(lv, s212c6f2, ABISELECT(24,16), "S212C6.s212c6f2");
    check_field_offset(lv, s212c6f3, ABISELECT(56,32), "S212C6.s212c6f3");
    check_field_offset(lv, s212c6f4, ABISELECT(64,40), "S212C6.s212c6f4");
    check_field_offset(lv, s212c6f5, ABISELECT(72,44), "S212C6.s212c6f5");
    check_field_offset(lv, s212c6f6, ABISELECT(80,52), "S212C6.s212c6f6");
    test_class_info(&lv, &cd_S212C6);
    dp->~S212C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS212C6(Test_S212C6, "S212C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S212C6C1Ev();
extern void _ZN6S212C6D1Ev();
Name_Map name_map_S212C6[] = {
  NSPAIR(_ZN6S212C6C1Ev),
  NSPAIR(_ZN6S212C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S212C6[];
extern void _ZN6S212C6D1Ev();
extern void _ZN6S212C6D0Ev();
extern void _ZN6S212C62v4Ev();
extern void _ZN6S212C62v5Ev();
extern void _ZN6S212C62v6Ev();
extern void _ZN6S212C62v7Ev();
extern void _ZN6S212C62v8Ev();
extern void _ZN6S212C62v9Ev();
extern void _ZN6S212C63v10Ev();
extern void _ZN6S212C63v11Ev();
extern void _ZN6S212C63v12Ev();
extern void _ZN6S212C63v13Ev();
extern void _ZN6S212C63v14Ev();
extern void _ZN6S212C63v15Ev();
extern void _ZN6S212C63v16Ev();
extern void _ZN6S212C63v17Ev();
extern void _ZN6S212C63v18Ev();
extern void _ZN6S212C63v19Ev();
extern void _ZN6S212C63v20Ev();
extern void _ZN6S212C63v21Ev();
extern void _ZN6S212C63v22Ev();
extern void _ZN6S212C63v23Ev();
extern void _ZN6S212C63v24Ev();
extern void _ZN6S212C63v25Ev();
extern void _ZN6S212C63v26Ev();
extern void _ZN6S212C63v27Ev();
extern void _ZN6S212C63v28Ev();
extern void _ZN6S212C63v29Ev();
extern void _ZN6S212C63v30Ev();
extern void _ZN6S212C63v31Ev();
extern void _ZN6S212C63v32Ev();
extern void _ZN6S212C63v33Ev();
extern void _ZN6S212C63v34Ev();
extern void _ZN6S212C63v35Ev();
extern void _ZN6S212C63v36Ev();
extern void _ZN6S212C63v37Ev();
extern void _ZN6S212C63v38Ev();
extern void _ZN6S212C63v39Ev();
extern void _ZN6S212C63v40Ev();
extern void _ZN6S212C63v41Ev();
extern void _ZN6S212C63v42Ev();
extern void _ZN6S212C63v43Ev();
extern void _ZN6S212C63v44Ev();
extern void _ZN6S212C63v45Ev();
extern void _ZN6S212C63v46Ev();
extern void _ZN6S212C63v47Ev();
extern void _ZN6S212C63v48Ev();
extern void _ZN6S212C63v49Ev();
extern void _ZN6S212C63v50Ev();
extern void _ZN6S212C63v51Ev();
extern void _ZN6S212C63v52Ev();
extern void _ZN6S212C63v53Ev();
extern void _ZN6S212C63v54Ev();
extern void _ZN6S212C63v55Ev();
extern void _ZN6S212C63v56Ev();
extern void _ZN6S212C63v57Ev();
extern void _ZN6S212C63v58Ev();
extern void _ZN6S212C63v59Ev();
extern void _ZN6S212C63v60Ev();
extern void _ZN6S212C63v61Ev();
extern void _ZN6S212C63v62Ev();
extern void _ZN6S212C63v63Ev();
extern void _ZN6S212C63v64Ev();
extern void _ZN6S212C63v65Ev();
extern void _ZN6S212C63v66Ev();
extern void _ZN6S212C63v67Ev();
static  VTBL_ENTRY vtc_S212C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S212C6[0]),
  (VTBL_ENTRY)&_ZN6S212C6D1Ev,
  (VTBL_ENTRY)&_ZN6S212C6D0Ev,
  (VTBL_ENTRY)&_ZN6S212C62v4Ev,
  (VTBL_ENTRY)&_ZN6S212C62v5Ev,
  (VTBL_ENTRY)&_ZN6S212C62v6Ev,
  (VTBL_ENTRY)&_ZN6S212C62v7Ev,
  (VTBL_ENTRY)&_ZN6S212C62v8Ev,
  (VTBL_ENTRY)&_ZN6S212C62v9Ev,
  (VTBL_ENTRY)&_ZN6S212C63v10Ev,
  (VTBL_ENTRY)&_ZN6S212C63v11Ev,
  (VTBL_ENTRY)&_ZN6S212C63v12Ev,
  (VTBL_ENTRY)&_ZN6S212C63v13Ev,
  (VTBL_ENTRY)&_ZN6S212C63v14Ev,
  (VTBL_ENTRY)&_ZN6S212C63v15Ev,
  (VTBL_ENTRY)&_ZN6S212C63v16Ev,
  (VTBL_ENTRY)&_ZN6S212C63v17Ev,
  (VTBL_ENTRY)&_ZN6S212C63v18Ev,
  (VTBL_ENTRY)&_ZN6S212C63v19Ev,
  (VTBL_ENTRY)&_ZN6S212C63v20Ev,
  (VTBL_ENTRY)&_ZN6S212C63v21Ev,
  (VTBL_ENTRY)&_ZN6S212C63v22Ev,
  (VTBL_ENTRY)&_ZN6S212C63v23Ev,
  (VTBL_ENTRY)&_ZN6S212C63v24Ev,
  (VTBL_ENTRY)&_ZN6S212C63v25Ev,
  (VTBL_ENTRY)&_ZN6S212C63v26Ev,
  (VTBL_ENTRY)&_ZN6S212C63v27Ev,
  (VTBL_ENTRY)&_ZN6S212C63v28Ev,
  (VTBL_ENTRY)&_ZN6S212C63v29Ev,
  (VTBL_ENTRY)&_ZN6S212C63v30Ev,
  (VTBL_ENTRY)&_ZN6S212C63v31Ev,
  (VTBL_ENTRY)&_ZN6S212C63v32Ev,
  (VTBL_ENTRY)&_ZN6S212C63v33Ev,
  (VTBL_ENTRY)&_ZN6S212C63v34Ev,
  (VTBL_ENTRY)&_ZN6S212C63v35Ev,
  (VTBL_ENTRY)&_ZN6S212C63v36Ev,
  (VTBL_ENTRY)&_ZN6S212C63v37Ev,
  (VTBL_ENTRY)&_ZN6S212C63v38Ev,
  (VTBL_ENTRY)&_ZN6S212C63v39Ev,
  (VTBL_ENTRY)&_ZN6S212C63v40Ev,
  (VTBL_ENTRY)&_ZN6S212C63v41Ev,
  (VTBL_ENTRY)&_ZN6S212C63v42Ev,
  (VTBL_ENTRY)&_ZN6S212C63v43Ev,
  (VTBL_ENTRY)&_ZN6S212C63v44Ev,
  (VTBL_ENTRY)&_ZN6S212C63v45Ev,
  (VTBL_ENTRY)&_ZN6S212C63v46Ev,
  (VTBL_ENTRY)&_ZN6S212C63v47Ev,
  (VTBL_ENTRY)&_ZN6S212C63v48Ev,
  (VTBL_ENTRY)&_ZN6S212C63v49Ev,
  (VTBL_ENTRY)&_ZN6S212C63v50Ev,
  (VTBL_ENTRY)&_ZN6S212C63v51Ev,
  (VTBL_ENTRY)&_ZN6S212C63v52Ev,
  (VTBL_ENTRY)&_ZN6S212C63v53Ev,
  (VTBL_ENTRY)&_ZN6S212C63v54Ev,
  (VTBL_ENTRY)&_ZN6S212C63v55Ev,
  (VTBL_ENTRY)&_ZN6S212C63v56Ev,
  (VTBL_ENTRY)&_ZN6S212C63v57Ev,
  (VTBL_ENTRY)&_ZN6S212C63v58Ev,
  (VTBL_ENTRY)&_ZN6S212C63v59Ev,
  (VTBL_ENTRY)&_ZN6S212C63v60Ev,
  (VTBL_ENTRY)&_ZN6S212C63v61Ev,
  (VTBL_ENTRY)&_ZN6S212C63v62Ev,
  (VTBL_ENTRY)&_ZN6S212C63v63Ev,
  (VTBL_ENTRY)&_ZN6S212C63v64Ev,
  (VTBL_ENTRY)&_ZN6S212C63v65Ev,
  (VTBL_ENTRY)&_ZN6S212C63v66Ev,
  (VTBL_ENTRY)&_ZN6S212C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S212C6[];
extern  VTBL_ENTRY _ZTV6S212C6[];
Class_Descriptor cd_S212C6 = {  "S212C6", // class name
  0,0,//no base classes
  &(vtc_S212C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S212C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S212C6),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  S212C5  : S212C6 {
  int s212c5f0[2];
  void *s212c5f1;
  int s212c5f2[2];
  ::S210C8_nt s212c5f3;
  ::S210C8_nt s212c5f4;
  ::S629C14 s212c5f5;
  ::S210C8_nt s212c5f6;
  unsigned int s212c5f7:1;
  unsigned int s212c5f8:1;
  unsigned int s212c5f9:1;
  unsigned int s212c5f10:1;
  unsigned int s212c5f11:1;
  int s212c5f12[2];
  virtual  ~S212C5(); // _ZN6S212C5D1Ev
  virtual void  v68(); // _ZN6S212C53v68Ev
  virtual void  v69(); // _ZN6S212C53v69Ev
  virtual void  v70(); // _ZN6S212C53v70Ev
  virtual void  v71(); // _ZN6S212C53v71Ev
  virtual void  v72(); // _ZN6S212C53v72Ev
  virtual void  v73(); // _ZN6S212C53v73Ev
  virtual void  v74(); // _ZN6S212C53v74Ev
  virtual void  v75(); // _ZN6S212C53v75Ev
  virtual void  v76(); // _ZN6S212C53v76Ev
  virtual void  v77(); // _ZN6S212C53v77Ev
  virtual void  v78(); // _ZN6S212C53v78Ev
  virtual void  v79(); // _ZN6S212C53v79Ev
  virtual void  v80(); // _ZN6S212C53v80Ev
  virtual void  v81(); // _ZN6S212C53v81Ev
  virtual void  v82(); // _ZN6S212C53v82Ev
  virtual void  v83(); // _ZN6S212C53v83Ev
  virtual void  v84(); // _ZN6S212C53v84Ev
  virtual void  v85(); // _ZN6S212C53v85Ev
  virtual void  v86(); // _ZN6S212C53v86Ev
  virtual void  v87(); // _ZN6S212C53v87Ev
  virtual void  v88(); // _ZN6S212C53v88Ev
  virtual void  v89(); // _ZN6S212C53v89Ev
  S212C5(); // tgen
};
//SIG(-1 S212C5) 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]}


 S212C5 ::~S212C5(){ note_dtor("S212C5", this);}
void  S212C5 ::v68(){vfunc_called(this, "_ZN6S212C53v68Ev");}
void  S212C5 ::v69(){vfunc_called(this, "_ZN6S212C53v69Ev");}
void  S212C5 ::v70(){vfunc_called(this, "_ZN6S212C53v70Ev");}
void  S212C5 ::v71(){vfunc_called(this, "_ZN6S212C53v71Ev");}
void  S212C5 ::v72(){vfunc_called(this, "_ZN6S212C53v72Ev");}
void  S212C5 ::v73(){vfunc_called(this, "_ZN6S212C53v73Ev");}
void  S212C5 ::v74(){vfunc_called(this, "_ZN6S212C53v74Ev");}
void  S212C5 ::v75(){vfunc_called(this, "_ZN6S212C53v75Ev");}
void  S212C5 ::v76(){vfunc_called(this, "_ZN6S212C53v76Ev");}
void  S212C5 ::v77(){vfunc_called(this, "_ZN6S212C53v77Ev");}
void  S212C5 ::v78(){vfunc_called(this, "_ZN6S212C53v78Ev");}
void  S212C5 ::v79(){vfunc_called(this, "_ZN6S212C53v79Ev");}
void  S212C5 ::v80(){vfunc_called(this, "_ZN6S212C53v80Ev");}
void  S212C5 ::v81(){vfunc_called(this, "_ZN6S212C53v81Ev");}
void  S212C5 ::v82(){vfunc_called(this, "_ZN6S212C53v82Ev");}
void  S212C5 ::v83(){vfunc_called(this, "_ZN6S212C53v83Ev");}
void  S212C5 ::v84(){vfunc_called(this, "_ZN6S212C53v84Ev");}
void  S212C5 ::v85(){vfunc_called(this, "_ZN6S212C53v85Ev");}
void  S212C5 ::v86(){vfunc_called(this, "_ZN6S212C53v86Ev");}
void  S212C5 ::v87(){vfunc_called(this, "_ZN6S212C53v87Ev");}
void  S212C5 ::v88(){vfunc_called(this, "_ZN6S212C53v88Ev");}
void  S212C5 ::v89(){vfunc_called(this, "_ZN6S212C53v89Ev");}
S212C5 ::S212C5(){ note_ctor("S212C5", this);} // tgen

static void Test_S212C5()
{
  extern Class_Descriptor cd_S212C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S212C5, buf);
    S212C5 *dp, &lv = *(dp=new (buf) S212C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S212C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S212C5)");
    check_base_class_offset(lv, (S212C6*), 0, "S212C5");
    check_field_offset(lv, s212c5f0, ABISELECT(96,60), "S212C5.s212c5f0");
    check_field_offset(lv, s212c5f1, ABISELECT(104,68), "S212C5.s212c5f1");
    check_field_offset(lv, s212c5f2, ABISELECT(112,72), "S212C5.s212c5f2");
    check_field_offset(lv, s212c5f3, ABISELECT(120,80), "S212C5.s212c5f3");
    check_field_offset(lv, s212c5f4, ABISELECT(136,92), "S212C5.s212c5f4");
    check_field_offset(lv, s212c5f5, ABISELECT(152,104), "S212C5.s212c5f5");
    check_field_offset(lv, s212c5f6, ABISELECT(160,108), "S212C5.s212c5f6");
    set_bf_and_test(lv, s212c5f7, ABISELECT(176,120), 0, 1, 1, "S212C5");
    set_bf_and_test(lv, s212c5f8, ABISELECT(176,120), 1, 1, 1, "S212C5");
    set_bf_and_test(lv, s212c5f9, ABISELECT(176,120), 2, 1, 1, "S212C5");
    set_bf_and_test(lv, s212c5f10, ABISELECT(176,120), 3, 1, 1, "S212C5");
    set_bf_and_test(lv, s212c5f11, ABISELECT(176,120), 4, 1, 1, "S212C5");
    check_field_offset(lv, s212c5f12, ABISELECT(180,124), "S212C5.s212c5f12");
    test_class_info(&lv, &cd_S212C5);
    dp->~S212C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS212C5(Test_S212C5, "S212C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S212C5C1Ev();
extern void _ZN6S212C5D1Ev();
Name_Map name_map_S212C5[] = {
  NSPAIR(_ZN6S212C5C1Ev),
  NSPAIR(_ZN6S212C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S212C6;
extern VTBL_ENTRY _ZTI6S212C6[];
extern  VTBL_ENTRY _ZTV6S212C6[];
static Base_Class bases_S212C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S212C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI6S212C5[];
extern void _ZN6S212C5D1Ev();
extern void _ZN6S212C5D0Ev();
extern void _ZN6S212C62v4Ev();
extern void _ZN6S212C62v5Ev();
extern void _ZN6S212C62v6Ev();
extern void _ZN6S212C62v7Ev();
extern void _ZN6S212C62v8Ev();
extern void _ZN6S212C62v9Ev();
extern void _ZN6S212C63v10Ev();
extern void _ZN6S212C63v11Ev();
extern void _ZN6S212C63v12Ev();
extern void _ZN6S212C63v13Ev();
extern void _ZN6S212C63v14Ev();
extern void _ZN6S212C63v15Ev();
extern void _ZN6S212C63v16Ev();
extern void _ZN6S212C63v17Ev();
extern void _ZN6S212C63v18Ev();
extern void _ZN6S212C63v19Ev();
extern void _ZN6S212C63v20Ev();
extern void _ZN6S212C63v21Ev();
extern void _ZN6S212C63v22Ev();
extern void _ZN6S212C63v23Ev();
extern void _ZN6S212C63v24Ev();
extern void _ZN6S212C63v25Ev();
extern void _ZN6S212C63v26Ev();
extern void _ZN6S212C63v27Ev();
extern void _ZN6S212C63v28Ev();
extern void _ZN6S212C63v29Ev();
extern void _ZN6S212C63v30Ev();
extern void _ZN6S212C63v31Ev();
extern void _ZN6S212C63v32Ev();
extern void _ZN6S212C63v33Ev();
extern void _ZN6S212C63v34Ev();
extern void _ZN6S212C63v35Ev();
extern void _ZN6S212C63v36Ev();
extern void _ZN6S212C63v37Ev();
extern void _ZN6S212C63v38Ev();
extern void _ZN6S212C63v39Ev();
extern void _ZN6S212C63v40Ev();
extern void _ZN6S212C63v41Ev();
extern void _ZN6S212C63v42Ev();
extern void _ZN6S212C63v43Ev();
extern void _ZN6S212C63v44Ev();
extern void _ZN6S212C63v45Ev();
extern void _ZN6S212C63v46Ev();
extern void _ZN6S212C63v47Ev();
extern void _ZN6S212C63v48Ev();
extern void _ZN6S212C63v49Ev();
extern void _ZN6S212C63v50Ev();
extern void _ZN6S212C63v51Ev();
extern void _ZN6S212C63v52Ev();
extern void _ZN6S212C63v53Ev();
extern void _ZN6S212C63v54Ev();
extern void _ZN6S212C63v55Ev();
extern void _ZN6S212C63v56Ev();
extern void _ZN6S212C63v57Ev();
extern void _ZN6S212C63v58Ev();
extern void _ZN6S212C63v59Ev();
extern void _ZN6S212C63v60Ev();
extern void _ZN6S212C63v61Ev();
extern void _ZN6S212C63v62Ev();
extern void _ZN6S212C63v63Ev();
extern void _ZN6S212C63v64Ev();
extern void _ZN6S212C63v65Ev();
extern void _ZN6S212C63v66Ev();
extern void _ZN6S212C63v67Ev();
extern void _ZN6S212C53v68Ev();
extern void _ZN6S212C53v69Ev();
extern void _ZN6S212C53v70Ev();
extern void _ZN6S212C53v71Ev();
extern void _ZN6S212C53v72Ev();
extern void _ZN6S212C53v73Ev();
extern void _ZN6S212C53v74Ev();
extern void _ZN6S212C53v75Ev();
extern void _ZN6S212C53v76Ev();
extern void _ZN6S212C53v77Ev();
extern void _ZN6S212C53v78Ev();
extern void _ZN6S212C53v79Ev();
extern void _ZN6S212C53v80Ev();
extern void _ZN6S212C53v81Ev();
extern void _ZN6S212C53v82Ev();
extern void _ZN6S212C53v83Ev();
extern void _ZN6S212C53v84Ev();
extern void _ZN6S212C53v85Ev();
extern void _ZN6S212C53v86Ev();
extern void _ZN6S212C53v87Ev();
extern void _ZN6S212C53v88Ev();
extern void _ZN6S212C53v89Ev();
static  VTBL_ENTRY vtc_S212C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S212C5[0]),
  (VTBL_ENTRY)&_ZN6S212C5D1Ev,
  (VTBL_ENTRY)&_ZN6S212C5D0Ev,
  (VTBL_ENTRY)&_ZN6S212C62v4Ev,
  (VTBL_ENTRY)&_ZN6S212C62v5Ev,
  (VTBL_ENTRY)&_ZN6S212C62v6Ev,
  (VTBL_ENTRY)&_ZN6S212C62v7Ev,
  (VTBL_ENTRY)&_ZN6S212C62v8Ev,
  (VTBL_ENTRY)&_ZN6S212C62v9Ev,
  (VTBL_ENTRY)&_ZN6S212C63v10Ev,
  (VTBL_ENTRY)&_ZN6S212C63v11Ev,
  (VTBL_ENTRY)&_ZN6S212C63v12Ev,
  (VTBL_ENTRY)&_ZN6S212C63v13Ev,
  (VTBL_ENTRY)&_ZN6S212C63v14Ev,
  (VTBL_ENTRY)&_ZN6S212C63v15Ev,
  (VTBL_ENTRY)&_ZN6S212C63v16Ev,
  (VTBL_ENTRY)&_ZN6S212C63v17Ev,
  (VTBL_ENTRY)&_ZN6S212C63v18Ev,
  (VTBL_ENTRY)&_ZN6S212C63v19Ev,
  (VTBL_ENTRY)&_ZN6S212C63v20Ev,
  (VTBL_ENTRY)&_ZN6S212C63v21Ev,
  (VTBL_ENTRY)&_ZN6S212C63v22Ev,
  (VTBL_ENTRY)&_ZN6S212C63v23Ev,
  (VTBL_ENTRY)&_ZN6S212C63v24Ev,
  (VTBL_ENTRY)&_ZN6S212C63v25Ev,
  (VTBL_ENTRY)&_ZN6S212C63v26Ev,
  (VTBL_ENTRY)&_ZN6S212C63v27Ev,
  (VTBL_ENTRY)&_ZN6S212C63v28Ev,
  (VTBL_ENTRY)&_ZN6S212C63v29Ev,
  (VTBL_ENTRY)&_ZN6S212C63v30Ev,
  (VTBL_ENTRY)&_ZN6S212C63v31Ev,
  (VTBL_ENTRY)&_ZN6S212C63v32Ev,
  (VTBL_ENTRY)&_ZN6S212C63v33Ev,
  (VTBL_ENTRY)&_ZN6S212C63v34Ev,
  (VTBL_ENTRY)&_ZN6S212C63v35Ev,
  (VTBL_ENTRY)&_ZN6S212C63v36Ev,
  (VTBL_ENTRY)&_ZN6S212C63v37Ev,
  (VTBL_ENTRY)&_ZN6S212C63v38Ev,
  (VTBL_ENTRY)&_ZN6S212C63v39Ev,
  (VTBL_ENTRY)&_ZN6S212C63v40Ev,
  (VTBL_ENTRY)&_ZN6S212C63v41Ev,
  (VTBL_ENTRY)&_ZN6S212C63v42Ev,
  (VTBL_ENTRY)&_ZN6S212C63v43Ev,
  (VTBL_ENTRY)&_ZN6S212C63v44Ev,
  (VTBL_ENTRY)&_ZN6S212C63v45Ev,
  (VTBL_ENTRY)&_ZN6S212C63v46Ev,
  (VTBL_ENTRY)&_ZN6S212C63v47Ev,
  (VTBL_ENTRY)&_ZN6S212C63v48Ev,
  (VTBL_ENTRY)&_ZN6S212C63v49Ev,
  (VTBL_ENTRY)&_ZN6S212C63v50Ev,
  (VTBL_ENTRY)&_ZN6S212C63v51Ev,
  (VTBL_ENTRY)&_ZN6S212C63v52Ev,
  (VTBL_ENTRY)&_ZN6S212C63v53Ev,
  (VTBL_ENTRY)&_ZN6S212C63v54Ev,
  (VTBL_ENTRY)&_ZN6S212C63v55Ev,
  (VTBL_ENTRY)&_ZN6S212C63v56Ev,
  (VTBL_ENTRY)&_ZN6S212C63v57Ev,
  (VTBL_ENTRY)&_ZN6S212C63v58Ev,
  (VTBL_ENTRY)&_ZN6S212C63v59Ev,
  (VTBL_ENTRY)&_ZN6S212C63v60Ev,
  (VTBL_ENTRY)&_ZN6S212C63v61Ev,
  (VTBL_ENTRY)&_ZN6S212C63v62Ev,
  (VTBL_ENTRY)&_ZN6S212C63v63Ev,
  (VTBL_ENTRY)&_ZN6S212C63v64Ev,
  (VTBL_ENTRY)&_ZN6S212C63v65Ev,
  (VTBL_ENTRY)&_ZN6S212C63v66Ev,
  (VTBL_ENTRY)&_ZN6S212C63v67Ev,
  (VTBL_ENTRY)&_ZN6S212C53v68Ev,
  (VTBL_ENTRY)&_ZN6S212C53v69Ev,
  (VTBL_ENTRY)&_ZN6S212C53v70Ev,
  (VTBL_ENTRY)&_ZN6S212C53v71Ev,
  (VTBL_ENTRY)&_ZN6S212C53v72Ev,
  (VTBL_ENTRY)&_ZN6S212C53v73Ev,
  (VTBL_ENTRY)&_ZN6S212C53v74Ev,
  (VTBL_ENTRY)&_ZN6S212C53v75Ev,
  (VTBL_ENTRY)&_ZN6S212C53v76Ev,
  (VTBL_ENTRY)&_ZN6S212C53v77Ev,
  (VTBL_ENTRY)&_ZN6S212C53v78Ev,
  (VTBL_ENTRY)&_ZN6S212C53v79Ev,
  (VTBL_ENTRY)&_ZN6S212C53v80Ev,
  (VTBL_ENTRY)&_ZN6S212C53v81Ev,
  (VTBL_ENTRY)&_ZN6S212C53v82Ev,
  (VTBL_ENTRY)&_ZN6S212C53v83Ev,
  (VTBL_ENTRY)&_ZN6S212C53v84Ev,
  (VTBL_ENTRY)&_ZN6S212C53v85Ev,
  (VTBL_ENTRY)&_ZN6S212C53v86Ev,
  (VTBL_ENTRY)&_ZN6S212C53v87Ev,
  (VTBL_ENTRY)&_ZN6S212C53v88Ev,
  (VTBL_ENTRY)&_ZN6S212C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S212C5[];
extern  VTBL_ENTRY _ZTV6S212C5[];
Class_Descriptor cd_S212C5 = {  "S212C5", // class name
  bases_S212C5, 1,
  &(vtc_S212C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S212C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S212C5),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  S212C4  : S212C5 {
  unsigned int s212c4f0:1;
  unsigned int s212c4f1:1;
  unsigned int s212c4f2:1;
  ::S1503C28 s212c4f3;
  ::S1503C24 s212c4f4;
  ::S1503C18 s212c4f5;
  ::S1503C12 s212c4f6;
  int s212c4f7[3];
  virtual  ~S212C4(); // _ZN6S212C4D1Ev
  virtual void  v90(); // _ZN6S212C43v90Ev
  virtual void  v91(); // _ZN6S212C43v91Ev
  virtual void  v92(); // _ZN6S212C43v92Ev
  virtual void  v93(); // _ZN6S212C43v93Ev
  virtual void  v94(); // _ZN6S212C43v94Ev
  virtual void  v95(); // _ZN6S212C43v95Ev
  virtual void  v96(); // _ZN6S212C43v96Ev
  virtual void  v97(); // _ZN6S212C43v97Ev
  virtual void  v98(); // _ZN6S212C43v98Ev
  virtual void  v99(); // _ZN6S212C43v99Ev
  virtual void  v100(); // _ZN6S212C44v100Ev
  virtual void  v101(); // _ZN6S212C44v101Ev
  virtual void  v102(); // _ZN6S212C44v102Ev
  virtual void  v103(); // _ZN6S212C44v103Ev
  virtual void  v104(); // _ZN6S212C44v104Ev
  virtual void  v105(); // _ZN6S212C44v105Ev
  virtual void  v106(); // _ZN6S212C44v106Ev
  virtual void  v107(); // _ZN6S212C44v107Ev
  virtual void  v108(); // _ZN6S212C44v108Ev
  virtual void  v109(); // _ZN6S212C44v109Ev
  S212C4(); // tgen
};
//SIG(-1 S212C4) 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]}


 S212C4 ::~S212C4(){ note_dtor("S212C4", this);}
void  S212C4 ::v90(){vfunc_called(this, "_ZN6S212C43v90Ev");}
void  S212C4 ::v91(){vfunc_called(this, "_ZN6S212C43v91Ev");}
void  S212C4 ::v92(){vfunc_called(this, "_ZN6S212C43v92Ev");}
void  S212C4 ::v93(){vfunc_called(this, "_ZN6S212C43v93Ev");}
void  S212C4 ::v94(){vfunc_called(this, "_ZN6S212C43v94Ev");}
void  S212C4 ::v95(){vfunc_called(this, "_ZN6S212C43v95Ev");}
void  S212C4 ::v96(){vfunc_called(this, "_ZN6S212C43v96Ev");}
void  S212C4 ::v97(){vfunc_called(this, "_ZN6S212C43v97Ev");}
void  S212C4 ::v98(){vfunc_called(this, "_ZN6S212C43v98Ev");}
void  S212C4 ::v99(){vfunc_called(this, "_ZN6S212C43v99Ev");}
void  S212C4 ::v100(){vfunc_called(this, "_ZN6S212C44v100Ev");}
void  S212C4 ::v101(){vfunc_called(this, "_ZN6S212C44v101Ev");}
void  S212C4 ::v102(){vfunc_called(this, "_ZN6S212C44v102Ev");}
void  S212C4 ::v103(){vfunc_called(this, "_ZN6S212C44v103Ev");}
void  S212C4 ::v104(){vfunc_called(this, "_ZN6S212C44v104Ev");}
void  S212C4 ::v105(){vfunc_called(this, "_ZN6S212C44v105Ev");}
void  S212C4 ::v106(){vfunc_called(this, "_ZN6S212C44v106Ev");}
void  S212C4 ::v107(){vfunc_called(this, "_ZN6S212C44v107Ev");}
void  S212C4 ::v108(){vfunc_called(this, "_ZN6S212C44v108Ev");}
void  S212C4 ::v109(){vfunc_called(this, "_ZN6S212C44v109Ev");}
S212C4 ::S212C4(){ note_ctor("S212C4", this);} // tgen

static void Test_S212C4()
{
  extern Class_Descriptor cd_S212C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S212C4, buf);
    S212C4 *dp, &lv = *(dp=new (buf) S212C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S212C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S212C4)");
    check_base_class_offset(lv, (S212C6*)(S212C5*), 0, "S212C4");
    check_base_class_offset(lv, (S212C5*), 0, "S212C4");
    set_bf_and_test(lv, s212c4f0, ABISELECT(188,132), 0, 1, 1, "S212C4");
    set_bf_and_test(lv, s212c4f1, ABISELECT(188,132), 1, 1, 1, "S212C4");
    set_bf_and_test(lv, s212c4f2, ABISELECT(188,132), 2, 1, 1, "S212C4");
    check_field_offset(lv, s212c4f3, ABISELECT(192,136), "S212C4.s212c4f3");
    check_field_offset(lv, s212c4f4, ABISELECT(208,148), "S212C4.s212c4f4");
    check_field_offset(lv, s212c4f5, ABISELECT(224,160), "S212C4.s212c4f5");
    check_field_offset(lv, s212c4f6, ABISELECT(240,172), "S212C4.s212c4f6");
    check_field_offset(lv, s212c4f7, ABISELECT(256,184), "S212C4.s212c4f7");
    test_class_info(&lv, &cd_S212C4);
    dp->~S212C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS212C4(Test_S212C4, "S212C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S212C4C1Ev();
extern void _ZN6S212C4D1Ev();
Name_Map name_map_S212C4[] = {
  NSPAIR(_ZN6S212C4C1Ev),
  NSPAIR(_ZN6S212C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S212C6;
extern VTBL_ENTRY _ZTI6S212C6[];
extern  VTBL_ENTRY _ZTV6S212C6[];
extern Class_Descriptor cd_S212C5;
extern VTBL_ENTRY _ZTI6S212C5[];
extern  VTBL_ENTRY _ZTV6S212C5[];
static Base_Class bases_S212C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S212C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S212C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S212C4[];
extern void _ZN6S212C4D1Ev();
extern void _ZN6S212C4D0Ev();
extern void _ZN6S212C62v4Ev();
extern void _ZN6S212C62v5Ev();
extern void _ZN6S212C62v6Ev();
extern void _ZN6S212C62v7Ev();
extern void _ZN6S212C62v8Ev();
extern void _ZN6S212C62v9Ev();
extern void _ZN6S212C63v10Ev();
extern void _ZN6S212C63v11Ev();
extern void _ZN6S212C63v12Ev();
extern void _ZN6S212C63v13Ev();
extern void _ZN6S212C63v14Ev();
extern void _ZN6S212C63v15Ev();
extern void _ZN6S212C63v16Ev();
extern void _ZN6S212C63v17Ev();
extern void _ZN6S212C63v18Ev();
extern void _ZN6S212C63v19Ev();
extern void _ZN6S212C63v20Ev();
extern void _ZN6S212C63v21Ev();
extern void _ZN6S212C63v22Ev();
extern void _ZN6S212C63v23Ev();
extern void _ZN6S212C63v24Ev();
extern void _ZN6S212C63v25Ev();
extern void _ZN6S212C63v26Ev();
extern void _ZN6S212C63v27Ev();
extern void _ZN6S212C63v28Ev();
extern void _ZN6S212C63v29Ev();
extern void _ZN6S212C63v30Ev();
extern void _ZN6S212C63v31Ev();
extern void _ZN6S212C63v32Ev();
extern void _ZN6S212C63v33Ev();
extern void _ZN6S212C63v34Ev();
extern void _ZN6S212C63v35Ev();
extern void _ZN6S212C63v36Ev();
extern void _ZN6S212C63v37Ev();
extern void _ZN6S212C63v38Ev();
extern void _ZN6S212C63v39Ev();
extern void _ZN6S212C63v40Ev();
extern void _ZN6S212C63v41Ev();
extern void _ZN6S212C63v42Ev();
extern void _ZN6S212C63v43Ev();
extern void _ZN6S212C63v44Ev();
extern void _ZN6S212C63v45Ev();
extern void _ZN6S212C63v46Ev();
extern void _ZN6S212C63v47Ev();
extern void _ZN6S212C63v48Ev();
extern void _ZN6S212C63v49Ev();
extern void _ZN6S212C63v50Ev();
extern void _ZN6S212C63v51Ev();
extern void _ZN6S212C63v52Ev();
extern void _ZN6S212C63v53Ev();
extern void _ZN6S212C63v54Ev();
extern void _ZN6S212C63v55Ev();
extern void _ZN6S212C63v56Ev();
extern void _ZN6S212C63v57Ev();
extern void _ZN6S212C63v58Ev();
extern void _ZN6S212C63v59Ev();
extern void _ZN6S212C63v60Ev();
extern void _ZN6S212C63v61Ev();
extern void _ZN6S212C63v62Ev();
extern void _ZN6S212C63v63Ev();
extern void _ZN6S212C63v64Ev();
extern void _ZN6S212C63v65Ev();
extern void _ZN6S212C63v66Ev();
extern void _ZN6S212C63v67Ev();
extern void _ZN6S212C53v68Ev();
extern void _ZN6S212C53v69Ev();
extern void _ZN6S212C53v70Ev();
extern void _ZN6S212C53v71Ev();
extern void _ZN6S212C53v72Ev();
extern void _ZN6S212C53v73Ev();
extern void _ZN6S212C53v74Ev();
extern void _ZN6S212C53v75Ev();
extern void _ZN6S212C53v76Ev();
extern void _ZN6S212C53v77Ev();
extern void _ZN6S212C53v78Ev();
extern void _ZN6S212C53v79Ev();
extern void _ZN6S212C53v80Ev();
extern void _ZN6S212C53v81Ev();
extern void _ZN6S212C53v82Ev();
extern void _ZN6S212C53v83Ev();
extern void _ZN6S212C53v84Ev();
extern void _ZN6S212C53v85Ev();
extern void _ZN6S212C53v86Ev();
extern void _ZN6S212C53v87Ev();
extern void _ZN6S212C53v88Ev();
extern void _ZN6S212C53v89Ev();
extern void _ZN6S212C43v90Ev();
extern void _ZN6S212C43v91Ev();
extern void _ZN6S212C43v92Ev();
extern void _ZN6S212C43v93Ev();
extern void _ZN6S212C43v94Ev();
extern void _ZN6S212C43v95Ev();
extern void _ZN6S212C43v96Ev();
extern void _ZN6S212C43v97Ev();
extern void _ZN6S212C43v98Ev();
extern void _ZN6S212C43v99Ev();
extern void _ZN6S212C44v100Ev();
extern void _ZN6S212C44v101Ev();
extern void _ZN6S212C44v102Ev();
extern void _ZN6S212C44v103Ev();
extern void _ZN6S212C44v104Ev();
extern void _ZN6S212C44v105Ev();
extern void _ZN6S212C44v106Ev();
extern void _ZN6S212C44v107Ev();
extern void _ZN6S212C44v108Ev();
extern void _ZN6S212C44v109Ev();
static  VTBL_ENTRY vtc_S212C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S212C4[0]),
  (VTBL_ENTRY)&_ZN6S212C4D1Ev,
  (VTBL_ENTRY)&_ZN6S212C4D0Ev,
  (VTBL_ENTRY)&_ZN6S212C62v4Ev,
  (VTBL_ENTRY)&_ZN6S212C62v5Ev,
  (VTBL_ENTRY)&_ZN6S212C62v6Ev,
  (VTBL_ENTRY)&_ZN6S212C62v7Ev,
  (VTBL_ENTRY)&_ZN6S212C62v8Ev,
  (VTBL_ENTRY)&_ZN6S212C62v9Ev,
  (VTBL_ENTRY)&_ZN6S212C63v10Ev,
  (VTBL_ENTRY)&_ZN6S212C63v11Ev,
  (VTBL_ENTRY)&_ZN6S212C63v12Ev,
  (VTBL_ENTRY)&_ZN6S212C63v13Ev,
  (VTBL_ENTRY)&_ZN6S212C63v14Ev,
  (VTBL_ENTRY)&_ZN6S212C63v15Ev,
  (VTBL_ENTRY)&_ZN6S212C63v16Ev,
  (VTBL_ENTRY)&_ZN6S212C63v17Ev,
  (VTBL_ENTRY)&_ZN6S212C63v18Ev,
  (VTBL_ENTRY)&_ZN6S212C63v19Ev,
  (VTBL_ENTRY)&_ZN6S212C63v20Ev,
  (VTBL_ENTRY)&_ZN6S212C63v21Ev,
  (VTBL_ENTRY)&_ZN6S212C63v22Ev,
  (VTBL_ENTRY)&_ZN6S212C63v23Ev,
  (VTBL_ENTRY)&_ZN6S212C63v24Ev,
  (VTBL_ENTRY)&_ZN6S212C63v25Ev,
  (VTBL_ENTRY)&_ZN6S212C63v26Ev,
  (VTBL_ENTRY)&_ZN6S212C63v27Ev,
  (VTBL_ENTRY)&_ZN6S212C63v28Ev,
  (VTBL_ENTRY)&_ZN6S212C63v29Ev,
  (VTBL_ENTRY)&_ZN6S212C63v30Ev,
  (VTBL_ENTRY)&_ZN6S212C63v31Ev,
  (VTBL_ENTRY)&_ZN6S212C63v32Ev,
  (VTBL_ENTRY)&_ZN6S212C63v33Ev,
  (VTBL_ENTRY)&_ZN6S212C63v34Ev,
  (VTBL_ENTRY)&_ZN6S212C63v35Ev,
  (VTBL_ENTRY)&_ZN6S212C63v36Ev,
  (VTBL_ENTRY)&_ZN6S212C63v37Ev,
  (VTBL_ENTRY)&_ZN6S212C63v38Ev,
  (VTBL_ENTRY)&_ZN6S212C63v39Ev,
  (VTBL_ENTRY)&_ZN6S212C63v40Ev,
  (VTBL_ENTRY)&_ZN6S212C63v41Ev,
  (VTBL_ENTRY)&_ZN6S212C63v42Ev,
  (VTBL_ENTRY)&_ZN6S212C63v43Ev,
  (VTBL_ENTRY)&_ZN6S212C63v44Ev,
  (VTBL_ENTRY)&_ZN6S212C63v45Ev,
  (VTBL_ENTRY)&_ZN6S212C63v46Ev,
  (VTBL_ENTRY)&_ZN6S212C63v47Ev,
  (VTBL_ENTRY)&_ZN6S212C63v48Ev,
  (VTBL_ENTRY)&_ZN6S212C63v49Ev,
  (VTBL_ENTRY)&_ZN6S212C63v50Ev,
  (VTBL_ENTRY)&_ZN6S212C63v51Ev,
  (VTBL_ENTRY)&_ZN6S212C63v52Ev,
  (VTBL_ENTRY)&_ZN6S212C63v53Ev,
  (VTBL_ENTRY)&_ZN6S212C63v54Ev,
  (VTBL_ENTRY)&_ZN6S212C63v55Ev,
  (VTBL_ENTRY)&_ZN6S212C63v56Ev,
  (VTBL_ENTRY)&_ZN6S212C63v57Ev,
  (VTBL_ENTRY)&_ZN6S212C63v58Ev,
  (VTBL_ENTRY)&_ZN6S212C63v59Ev,
  (VTBL_ENTRY)&_ZN6S212C63v60Ev,
  (VTBL_ENTRY)&_ZN6S212C63v61Ev,
  (VTBL_ENTRY)&_ZN6S212C63v62Ev,
  (VTBL_ENTRY)&_ZN6S212C63v63Ev,
  (VTBL_ENTRY)&_ZN6S212C63v64Ev,
  (VTBL_ENTRY)&_ZN6S212C63v65Ev,
  (VTBL_ENTRY)&_ZN6S212C63v66Ev,
  (VTBL_ENTRY)&_ZN6S212C63v67Ev,
  (VTBL_ENTRY)&_ZN6S212C53v68Ev,
  (VTBL_ENTRY)&_ZN6S212C53v69Ev,
  (VTBL_ENTRY)&_ZN6S212C53v70Ev,
  (VTBL_ENTRY)&_ZN6S212C53v71Ev,
  (VTBL_ENTRY)&_ZN6S212C53v72Ev,
  (VTBL_ENTRY)&_ZN6S212C53v73Ev,
  (VTBL_ENTRY)&_ZN6S212C53v74Ev,
  (VTBL_ENTRY)&_ZN6S212C53v75Ev,
  (VTBL_ENTRY)&_ZN6S212C53v76Ev,
  (VTBL_ENTRY)&_ZN6S212C53v77Ev,
  (VTBL_ENTRY)&_ZN6S212C53v78Ev,
  (VTBL_ENTRY)&_ZN6S212C53v79Ev,
  (VTBL_ENTRY)&_ZN6S212C53v80Ev,
  (VTBL_ENTRY)&_ZN6S212C53v81Ev,
  (VTBL_ENTRY)&_ZN6S212C53v82Ev,
  (VTBL_ENTRY)&_ZN6S212C53v83Ev,
  (VTBL_ENTRY)&_ZN6S212C53v84Ev,
  (VTBL_ENTRY)&_ZN6S212C53v85Ev,
  (VTBL_ENTRY)&_ZN6S212C53v86Ev,
  (VTBL_ENTRY)&_ZN6S212C53v87Ev,
  (VTBL_ENTRY)&_ZN6S212C53v88Ev,
  (VTBL_ENTRY)&_ZN6S212C53v89Ev,
  (VTBL_ENTRY)&_ZN6S212C43v90Ev,
  (VTBL_ENTRY)&_ZN6S212C43v91Ev,
  (VTBL_ENTRY)&_ZN6S212C43v92Ev,
  (VTBL_ENTRY)&_ZN6S212C43v93Ev,
  (VTBL_ENTRY)&_ZN6S212C43v94Ev,
  (VTBL_ENTRY)&_ZN6S212C43v95Ev,
  (VTBL_ENTRY)&_ZN6S212C43v96Ev,
  (VTBL_ENTRY)&_ZN6S212C43v97Ev,
  (VTBL_ENTRY)&_ZN6S212C43v98Ev,
  (VTBL_ENTRY)&_ZN6S212C43v99Ev,
  (VTBL_ENTRY)&_ZN6S212C44v100Ev,
  (VTBL_ENTRY)&_ZN6S212C44v101Ev,
  (VTBL_ENTRY)&_ZN6S212C44v102Ev,
  (VTBL_ENTRY)&_ZN6S212C44v103Ev,
  (VTBL_ENTRY)&_ZN6S212C44v104Ev,
  (VTBL_ENTRY)&_ZN6S212C44v105Ev,
  (VTBL_ENTRY)&_ZN6S212C44v106Ev,
  (VTBL_ENTRY)&_ZN6S212C44v107Ev,
  (VTBL_ENTRY)&_ZN6S212C44v108Ev,
  (VTBL_ENTRY)&_ZN6S212C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S212C4[];
extern  VTBL_ENTRY _ZTV6S212C4[];
Class_Descriptor cd_S212C4 = {  "S212C4", // class name
  bases_S212C4, 2,
  &(vtc_S212C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S212C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S212C4),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  S212C3  : S212C4 {
  ::S1503C5_nt s212c3f0;
  unsigned int s212c3f1:1;
  ::S1503C6_nt s212c3f2;
  virtual  ~S212C3(); // _ZN6S212C3D1Ev
  virtual void  v110(); // _ZN6S212C34v110Ev
  virtual void  v111(); // _ZN6S212C34v111Ev
  virtual void  v112(); // _ZN6S212C34v112Ev
  virtual void  v113(); // _ZN6S212C34v113Ev
  S212C3(); // tgen
};
//SIG(-1 S212C3) 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}}}


 S212C3 ::~S212C3(){ note_dtor("S212C3", this);}
void  S212C3 ::v110(){vfunc_called(this, "_ZN6S212C34v110Ev");}
void  S212C3 ::v111(){vfunc_called(this, "_ZN6S212C34v111Ev");}
void  S212C3 ::v112(){vfunc_called(this, "_ZN6S212C34v112Ev");}
void  S212C3 ::v113(){vfunc_called(this, "_ZN6S212C34v113Ev");}
S212C3 ::S212C3(){ note_ctor("S212C3", this);} // tgen

static void Test_S212C3()
{
  extern Class_Descriptor cd_S212C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S212C3, buf);
    S212C3 *dp, &lv = *(dp=new (buf) S212C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S212C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S212C3)");
    check_base_class_offset(lv, (S212C6*)(S212C5*)(S212C4*), 0, "S212C3");
    check_base_class_offset(lv, (S212C5*)(S212C4*), 0, "S212C3");
    check_base_class_offset(lv, (S212C4*), 0, "S212C3");
    check_field_offset(lv, s212c3f0, ABISELECT(268,196), "S212C3.s212c3f0");
    set_bf_and_test(lv, s212c3f1, ABISELECT(276,204), 0, 1, 1, "S212C3");
    check_field_offset(lv, s212c3f2, ABISELECT(280,208), "S212C3.s212c3f2");
    test_class_info(&lv, &cd_S212C3);
    dp->~S212C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS212C3(Test_S212C3, "S212C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S212C3C1Ev();
extern void _ZN6S212C3D1Ev();
Name_Map name_map_S212C3[] = {
  NSPAIR(_ZN6S212C3C1Ev),
  NSPAIR(_ZN6S212C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S212C6;
extern VTBL_ENTRY _ZTI6S212C6[];
extern  VTBL_ENTRY _ZTV6S212C6[];
extern Class_Descriptor cd_S212C5;
extern VTBL_ENTRY _ZTI6S212C5[];
extern  VTBL_ENTRY _ZTV6S212C5[];
extern Class_Descriptor cd_S212C4;
extern VTBL_ENTRY _ZTI6S212C4[];
extern  VTBL_ENTRY _ZTV6S212C4[];
static Base_Class bases_S212C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S212C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S212C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S212C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S212C3[];
extern void _ZN6S212C3D1Ev();
extern void _ZN6S212C3D0Ev();
extern void _ZN6S212C62v4Ev();
extern void _ZN6S212C62v5Ev();
extern void _ZN6S212C62v6Ev();
extern void _ZN6S212C62v7Ev();
extern void _ZN6S212C62v8Ev();
extern void _ZN6S212C62v9Ev();
extern void _ZN6S212C63v10Ev();
extern void _ZN6S212C63v11Ev();
extern void _ZN6S212C63v12Ev();
extern void _ZN6S212C63v13Ev();
extern void _ZN6S212C63v14Ev();
extern void _ZN6S212C63v15Ev();
extern void _ZN6S212C63v16Ev();
extern void _ZN6S212C63v17Ev();
extern void _ZN6S212C63v18Ev();
extern void _ZN6S212C63v19Ev();
extern void _ZN6S212C63v20Ev();
extern void _ZN6S212C63v21Ev();
extern void _ZN6S212C63v22Ev();
extern void _ZN6S212C63v23Ev();
extern void _ZN6S212C63v24Ev();
extern void _ZN6S212C63v25Ev();
extern void _ZN6S212C63v26Ev();
extern void _ZN6S212C63v27Ev();
extern void _ZN6S212C63v28Ev();
extern void _ZN6S212C63v29Ev();
extern void _ZN6S212C63v30Ev();
extern void _ZN6S212C63v31Ev();
extern void _ZN6S212C63v32Ev();
extern void _ZN6S212C63v33Ev();
extern void _ZN6S212C63v34Ev();
extern void _ZN6S212C63v35Ev();
extern void _ZN6S212C63v36Ev();
extern void _ZN6S212C63v37Ev();
extern void _ZN6S212C63v38Ev();
extern void _ZN6S212C63v39Ev();
extern void _ZN6S212C63v40Ev();
extern void _ZN6S212C63v41Ev();
extern void _ZN6S212C63v42Ev();
extern void _ZN6S212C63v43Ev();
extern void _ZN6S212C63v44Ev();
extern void _ZN6S212C63v45Ev();
extern void _ZN6S212C63v46Ev();
extern void _ZN6S212C63v47Ev();
extern void _ZN6S212C63v48Ev();
extern void _ZN6S212C63v49Ev();
extern void _ZN6S212C63v50Ev();
extern void _ZN6S212C63v51Ev();
extern void _ZN6S212C63v52Ev();
extern void _ZN6S212C63v53Ev();
extern void _ZN6S212C63v54Ev();
extern void _ZN6S212C63v55Ev();
extern void _ZN6S212C63v56Ev();
extern void _ZN6S212C63v57Ev();
extern void _ZN6S212C63v58Ev();
extern void _ZN6S212C63v59Ev();
extern void _ZN6S212C63v60Ev();
extern void _ZN6S212C63v61Ev();
extern void _ZN6S212C63v62Ev();
extern void _ZN6S212C63v63Ev();
extern void _ZN6S212C63v64Ev();
extern void _ZN6S212C63v65Ev();
extern void _ZN6S212C63v66Ev();
extern void _ZN6S212C63v67Ev();
extern void _ZN6S212C53v68Ev();
extern void _ZN6S212C53v69Ev();
extern void _ZN6S212C53v70Ev();
extern void _ZN6S212C53v71Ev();
extern void _ZN6S212C53v72Ev();
extern void _ZN6S212C53v73Ev();
extern void _ZN6S212C53v74Ev();
extern void _ZN6S212C53v75Ev();
extern void _ZN6S212C53v76Ev();
extern void _ZN6S212C53v77Ev();
extern void _ZN6S212C53v78Ev();
extern void _ZN6S212C53v79Ev();
extern void _ZN6S212C53v80Ev();
extern void _ZN6S212C53v81Ev();
extern void _ZN6S212C53v82Ev();
extern void _ZN6S212C53v83Ev();
extern void _ZN6S212C53v84Ev();
extern void _ZN6S212C53v85Ev();
extern void _ZN6S212C53v86Ev();
extern void _ZN6S212C53v87Ev();
extern void _ZN6S212C53v88Ev();
extern void _ZN6S212C53v89Ev();
extern void _ZN6S212C43v90Ev();
extern void _ZN6S212C43v91Ev();
extern void _ZN6S212C43v92Ev();
extern void _ZN6S212C43v93Ev();
extern void _ZN6S212C43v94Ev();
extern void _ZN6S212C43v95Ev();
extern void _ZN6S212C43v96Ev();
extern void _ZN6S212C43v97Ev();
extern void _ZN6S212C43v98Ev();
extern void _ZN6S212C43v99Ev();
extern void _ZN6S212C44v100Ev();
extern void _ZN6S212C44v101Ev();
extern void _ZN6S212C44v102Ev();
extern void _ZN6S212C44v103Ev();
extern void _ZN6S212C44v104Ev();
extern void _ZN6S212C44v105Ev();
extern void _ZN6S212C44v106Ev();
extern void _ZN6S212C44v107Ev();
extern void _ZN6S212C44v108Ev();
extern void _ZN6S212C44v109Ev();
extern void _ZN6S212C34v110Ev();
extern void _ZN6S212C34v111Ev();
extern void _ZN6S212C34v112Ev();
extern void _ZN6S212C34v113Ev();
static  VTBL_ENTRY vtc_S212C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S212C3[0]),
  (VTBL_ENTRY)&_ZN6S212C3D1Ev,
  (VTBL_ENTRY)&_ZN6S212C3D0Ev,
  (VTBL_ENTRY)&_ZN6S212C62v4Ev,
  (VTBL_ENTRY)&_ZN6S212C62v5Ev,
  (VTBL_ENTRY)&_ZN6S212C62v6Ev,
  (VTBL_ENTRY)&_ZN6S212C62v7Ev,
  (VTBL_ENTRY)&_ZN6S212C62v8Ev,
  (VTBL_ENTRY)&_ZN6S212C62v9Ev,
  (VTBL_ENTRY)&_ZN6S212C63v10Ev,
  (VTBL_ENTRY)&_ZN6S212C63v11Ev,
  (VTBL_ENTRY)&_ZN6S212C63v12Ev,
  (VTBL_ENTRY)&_ZN6S212C63v13Ev,
  (VTBL_ENTRY)&_ZN6S212C63v14Ev,
  (VTBL_ENTRY)&_ZN6S212C63v15Ev,
  (VTBL_ENTRY)&_ZN6S212C63v16Ev,
  (VTBL_ENTRY)&_ZN6S212C63v17Ev,
  (VTBL_ENTRY)&_ZN6S212C63v18Ev,
  (VTBL_ENTRY)&_ZN6S212C63v19Ev,
  (VTBL_ENTRY)&_ZN6S212C63v20Ev,
  (VTBL_ENTRY)&_ZN6S212C63v21Ev,
  (VTBL_ENTRY)&_ZN6S212C63v22Ev,
  (VTBL_ENTRY)&_ZN6S212C63v23Ev,
  (VTBL_ENTRY)&_ZN6S212C63v24Ev,
  (VTBL_ENTRY)&_ZN6S212C63v25Ev,
  (VTBL_ENTRY)&_ZN6S212C63v26Ev,
  (VTBL_ENTRY)&_ZN6S212C63v27Ev,
  (VTBL_ENTRY)&_ZN6S212C63v28Ev,
  (VTBL_ENTRY)&_ZN6S212C63v29Ev,
  (VTBL_ENTRY)&_ZN6S212C63v30Ev,
  (VTBL_ENTRY)&_ZN6S212C63v31Ev,
  (VTBL_ENTRY)&_ZN6S212C63v32Ev,
  (VTBL_ENTRY)&_ZN6S212C63v33Ev,
  (VTBL_ENTRY)&_ZN6S212C63v34Ev,
  (VTBL_ENTRY)&_ZN6S212C63v35Ev,
  (VTBL_ENTRY)&_ZN6S212C63v36Ev,
  (VTBL_ENTRY)&_ZN6S212C63v37Ev,
  (VTBL_ENTRY)&_ZN6S212C63v38Ev,
  (VTBL_ENTRY)&_ZN6S212C63v39Ev,
  (VTBL_ENTRY)&_ZN6S212C63v40Ev,
  (VTBL_ENTRY)&_ZN6S212C63v41Ev,
  (VTBL_ENTRY)&_ZN6S212C63v42Ev,
  (VTBL_ENTRY)&_ZN6S212C63v43Ev,
  (VTBL_ENTRY)&_ZN6S212C63v44Ev,
  (VTBL_ENTRY)&_ZN6S212C63v45Ev,
  (VTBL_ENTRY)&_ZN6S212C63v46Ev,
  (VTBL_ENTRY)&_ZN6S212C63v47Ev,
  (VTBL_ENTRY)&_ZN6S212C63v48Ev,
  (VTBL_ENTRY)&_ZN6S212C63v49Ev,
  (VTBL_ENTRY)&_ZN6S212C63v50Ev,
  (VTBL_ENTRY)&_ZN6S212C63v51Ev,
  (VTBL_ENTRY)&_ZN6S212C63v52Ev,
  (VTBL_ENTRY)&_ZN6S212C63v53Ev,
  (VTBL_ENTRY)&_ZN6S212C63v54Ev,
  (VTBL_ENTRY)&_ZN6S212C63v55Ev,
  (VTBL_ENTRY)&_ZN6S212C63v56Ev,
  (VTBL_ENTRY)&_ZN6S212C63v57Ev,
  (VTBL_ENTRY)&_ZN6S212C63v58Ev,
  (VTBL_ENTRY)&_ZN6S212C63v59Ev,
  (VTBL_ENTRY)&_ZN6S212C63v60Ev,
  (VTBL_ENTRY)&_ZN6S212C63v61Ev,
  (VTBL_ENTRY)&_ZN6S212C63v62Ev,
  (VTBL_ENTRY)&_ZN6S212C63v63Ev,
  (VTBL_ENTRY)&_ZN6S212C63v64Ev,
  (VTBL_ENTRY)&_ZN6S212C63v65Ev,
  (VTBL_ENTRY)&_ZN6S212C63v66Ev,
  (VTBL_ENTRY)&_ZN6S212C63v67Ev,
  (VTBL_ENTRY)&_ZN6S212C53v68Ev,
  (VTBL_ENTRY)&_ZN6S212C53v69Ev,
  (VTBL_ENTRY)&_ZN6S212C53v70Ev,
  (VTBL_ENTRY)&_ZN6S212C53v71Ev,
  (VTBL_ENTRY)&_ZN6S212C53v72Ev,
  (VTBL_ENTRY)&_ZN6S212C53v73Ev,
  (VTBL_ENTRY)&_ZN6S212C53v74Ev,
  (VTBL_ENTRY)&_ZN6S212C53v75Ev,
  (VTBL_ENTRY)&_ZN6S212C53v76Ev,
  (VTBL_ENTRY)&_ZN6S212C53v77Ev,
  (VTBL_ENTRY)&_ZN6S212C53v78Ev,
  (VTBL_ENTRY)&_ZN6S212C53v79Ev,
  (VTBL_ENTRY)&_ZN6S212C53v80Ev,
  (VTBL_ENTRY)&_ZN6S212C53v81Ev,
  (VTBL_ENTRY)&_ZN6S212C53v82Ev,
  (VTBL_ENTRY)&_ZN6S212C53v83Ev,
  (VTBL_ENTRY)&_ZN6S212C53v84Ev,
  (VTBL_ENTRY)&_ZN6S212C53v85Ev,
  (VTBL_ENTRY)&_ZN6S212C53v86Ev,
  (VTBL_ENTRY)&_ZN6S212C53v87Ev,
  (VTBL_ENTRY)&_ZN6S212C53v88Ev,
  (VTBL_ENTRY)&_ZN6S212C53v89Ev,
  (VTBL_ENTRY)&_ZN6S212C43v90Ev,
  (VTBL_ENTRY)&_ZN6S212C43v91Ev,
  (VTBL_ENTRY)&_ZN6S212C43v92Ev,
  (VTBL_ENTRY)&_ZN6S212C43v93Ev,
  (VTBL_ENTRY)&_ZN6S212C43v94Ev,
  (VTBL_ENTRY)&_ZN6S212C43v95Ev,
  (VTBL_ENTRY)&_ZN6S212C43v96Ev,
  (VTBL_ENTRY)&_ZN6S212C43v97Ev,
  (VTBL_ENTRY)&_ZN6S212C43v98Ev,
  (VTBL_ENTRY)&_ZN6S212C43v99Ev,
  (VTBL_ENTRY)&_ZN6S212C44v100Ev,
  (VTBL_ENTRY)&_ZN6S212C44v101Ev,
  (VTBL_ENTRY)&_ZN6S212C44v102Ev,
  (VTBL_ENTRY)&_ZN6S212C44v103Ev,
  (VTBL_ENTRY)&_ZN6S212C44v104Ev,
  (VTBL_ENTRY)&_ZN6S212C44v105Ev,
  (VTBL_ENTRY)&_ZN6S212C44v106Ev,
  (VTBL_ENTRY)&_ZN6S212C44v107Ev,
  (VTBL_ENTRY)&_ZN6S212C44v108Ev,
  (VTBL_ENTRY)&_ZN6S212C44v109Ev,
  (VTBL_ENTRY)&_ZN6S212C34v110Ev,
  (VTBL_ENTRY)&_ZN6S212C34v111Ev,
  (VTBL_ENTRY)&_ZN6S212C34v112Ev,
  (VTBL_ENTRY)&_ZN6S212C34v113Ev,
};
extern VTBL_ENTRY _ZTI6S212C3[];
extern  VTBL_ENTRY _ZTV6S212C3[];
Class_Descriptor cd_S212C3 = {  "S212C3", // class name
  bases_S212C3, 3,
  &(vtc_S212C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S212C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S212C3),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  S212C2  : S212C3 {
  virtual  ~S212C2(); // _ZN6S212C2D1Ev
  virtual void  v114(); // _ZN6S212C24v114Ev
  virtual void  v115(); // _ZN6S212C24v115Ev
  S212C2(); // tgen
};
//SIG(-1 S212C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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] 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 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 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v109 v110 v111 v112 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2}


 S212C2 ::~S212C2(){ note_dtor("S212C2", this);}
void  S212C2 ::v114(){vfunc_called(this, "_ZN6S212C24v114Ev");}
void  S212C2 ::v115(){vfunc_called(this, "_ZN6S212C24v115Ev");}
S212C2 ::S212C2(){ note_ctor("S212C2", this);} // tgen

static void Test_S212C2()
{
  extern Class_Descriptor cd_S212C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S212C2, buf);
    S212C2 *dp, &lv = *(dp=new (buf) S212C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S212C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S212C2)");
    check_base_class_offset(lv, (S212C6*)(S212C5*)(S212C4*)(S212C3*), 0, "S212C2");
    check_base_class_offset(lv, (S212C5*)(S212C4*)(S212C3*), 0, "S212C2");
    check_base_class_offset(lv, (S212C4*)(S212C3*), 0, "S212C2");
    check_base_class_offset(lv, (S212C3*), 0, "S212C2");
    test_class_info(&lv, &cd_S212C2);
    dp->~S212C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS212C2(Test_S212C2, "S212C2", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S212C2C1Ev();
extern void _ZN6S212C2D1Ev();
Name_Map name_map_S212C2[] = {
  NSPAIR(_ZN6S212C2C1Ev),
  NSPAIR(_ZN6S212C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S212C6;
extern VTBL_ENTRY _ZTI6S212C6[];
extern  VTBL_ENTRY _ZTV6S212C6[];
extern Class_Descriptor cd_S212C5;
extern VTBL_ENTRY _ZTI6S212C5[];
extern  VTBL_ENTRY _ZTV6S212C5[];
extern Class_Descriptor cd_S212C4;
extern VTBL_ENTRY _ZTI6S212C4[];
extern  VTBL_ENTRY _ZTV6S212C4[];
extern Class_Descriptor cd_S212C3;
extern VTBL_ENTRY _ZTI6S212C3[];
extern  VTBL_ENTRY _ZTV6S212C3[];
static Base_Class bases_S212C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S212C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S212C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S212C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S212C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S212C2[];
extern void _ZN6S212C2D1Ev();
extern void _ZN6S212C2D0Ev();
extern void _ZN6S212C62v4Ev();
extern void _ZN6S212C62v5Ev();
extern void _ZN6S212C62v6Ev();
extern void _ZN6S212C62v7Ev();
extern void _ZN6S212C62v8Ev();
extern void _ZN6S212C62v9Ev();
extern void _ZN6S212C63v10Ev();
extern void _ZN6S212C63v11Ev();
extern void _ZN6S212C63v12Ev();
extern void _ZN6S212C63v13Ev();
extern void _ZN6S212C63v14Ev();
extern void _ZN6S212C63v15Ev();
extern void _ZN6S212C63v16Ev();
extern void _ZN6S212C63v17Ev();
extern void _ZN6S212C63v18Ev();
extern void _ZN6S212C63v19Ev();
extern void _ZN6S212C63v20Ev();
extern void _ZN6S212C63v21Ev();
extern void _ZN6S212C63v22Ev();
extern void _ZN6S212C63v23Ev();
extern void _ZN6S212C63v24Ev();
extern void _ZN6S212C63v25Ev();
extern void _ZN6S212C63v26Ev();
extern void _ZN6S212C63v27Ev();
extern void _ZN6S212C63v28Ev();
extern void _ZN6S212C63v29Ev();
extern void _ZN6S212C63v30Ev();
extern void _ZN6S212C63v31Ev();
extern void _ZN6S212C63v32Ev();
extern void _ZN6S212C63v33Ev();
extern void _ZN6S212C63v34Ev();
extern void _ZN6S212C63v35Ev();
extern void _ZN6S212C63v36Ev();
extern void _ZN6S212C63v37Ev();
extern void _ZN6S212C63v38Ev();
extern void _ZN6S212C63v39Ev();
extern void _ZN6S212C63v40Ev();
extern void _ZN6S212C63v41Ev();
extern void _ZN6S212C63v42Ev();
extern void _ZN6S212C63v43Ev();
extern void _ZN6S212C63v44Ev();
extern void _ZN6S212C63v45Ev();
extern void _ZN6S212C63v46Ev();
extern void _ZN6S212C63v47Ev();
extern void _ZN6S212C63v48Ev();
extern void _ZN6S212C63v49Ev();
extern void _ZN6S212C63v50Ev();
extern void _ZN6S212C63v51Ev();
extern void _ZN6S212C63v52Ev();
extern void _ZN6S212C63v53Ev();
extern void _ZN6S212C63v54Ev();
extern void _ZN6S212C63v55Ev();
extern void _ZN6S212C63v56Ev();
extern void _ZN6S212C63v57Ev();
extern void _ZN6S212C63v58Ev();
extern void _ZN6S212C63v59Ev();
extern void _ZN6S212C63v60Ev();
extern void _ZN6S212C63v61Ev();
extern void _ZN6S212C63v62Ev();
extern void _ZN6S212C63v63Ev();
extern void _ZN6S212C63v64Ev();
extern void _ZN6S212C63v65Ev();
extern void _ZN6S212C63v66Ev();
extern void _ZN6S212C63v67Ev();
extern void _ZN6S212C53v68Ev();
extern void _ZN6S212C53v69Ev();
extern void _ZN6S212C53v70Ev();
extern void _ZN6S212C53v71Ev();
extern void _ZN6S212C53v72Ev();
extern void _ZN6S212C53v73Ev();
extern void _ZN6S212C53v74Ev();
extern void _ZN6S212C53v75Ev();
extern void _ZN6S212C53v76Ev();
extern void _ZN6S212C53v77Ev();
extern void _ZN6S212C53v78Ev();
extern void _ZN6S212C53v79Ev();
extern void _ZN6S212C53v80Ev();
extern void _ZN6S212C53v81Ev();
extern void _ZN6S212C53v82Ev();
extern void _ZN6S212C53v83Ev();
extern void _ZN6S212C53v84Ev();
extern void _ZN6S212C53v85Ev();
extern void _ZN6S212C53v86Ev();
extern void _ZN6S212C53v87Ev();
extern void _ZN6S212C53v88Ev();
extern void _ZN6S212C53v89Ev();
extern void _ZN6S212C43v90Ev();
extern void _ZN6S212C43v91Ev();
extern void _ZN6S212C43v92Ev();
extern void _ZN6S212C43v93Ev();
extern void _ZN6S212C43v94Ev();
extern void _ZN6S212C43v95Ev();
extern void _ZN6S212C43v96Ev();
extern void _ZN6S212C43v97Ev();
extern void _ZN6S212C43v98Ev();
extern void _ZN6S212C43v99Ev();
extern void _ZN6S212C44v100Ev();
extern void _ZN6S212C44v101Ev();
extern void _ZN6S212C44v102Ev();
extern void _ZN6S212C44v103Ev();
extern void _ZN6S212C44v104Ev();
extern void _ZN6S212C44v105Ev();
extern void _ZN6S212C44v106Ev();
extern void _ZN6S212C44v107Ev();
extern void _ZN6S212C44v108Ev();
extern void _ZN6S212C44v109Ev();
extern void _ZN6S212C34v110Ev();
extern void _ZN6S212C34v111Ev();
extern void _ZN6S212C34v112Ev();
extern void _ZN6S212C34v113Ev();
extern void _ZN6S212C24v114Ev();
extern void _ZN6S212C24v115Ev();
static  VTBL_ENTRY vtc_S212C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S212C2[0]),
  (VTBL_ENTRY)&_ZN6S212C2D1Ev,
  (VTBL_ENTRY)&_ZN6S212C2D0Ev,
  (VTBL_ENTRY)&_ZN6S212C62v4Ev,
  (VTBL_ENTRY)&_ZN6S212C62v5Ev,
  (VTBL_ENTRY)&_ZN6S212C62v6Ev,
  (VTBL_ENTRY)&_ZN6S212C62v7Ev,
  (VTBL_ENTRY)&_ZN6S212C62v8Ev,
  (VTBL_ENTRY)&_ZN6S212C62v9Ev,
  (VTBL_ENTRY)&_ZN6S212C63v10Ev,
  (VTBL_ENTRY)&_ZN6S212C63v11Ev,
  (VTBL_ENTRY)&_ZN6S212C63v12Ev,
  (VTBL_ENTRY)&_ZN6S212C63v13Ev,
  (VTBL_ENTRY)&_ZN6S212C63v14Ev,
  (VTBL_ENTRY)&_ZN6S212C63v15Ev,
  (VTBL_ENTRY)&_ZN6S212C63v16Ev,
  (VTBL_ENTRY)&_ZN6S212C63v17Ev,
  (VTBL_ENTRY)&_ZN6S212C63v18Ev,
  (VTBL_ENTRY)&_ZN6S212C63v19Ev,
  (VTBL_ENTRY)&_ZN6S212C63v20Ev,
  (VTBL_ENTRY)&_ZN6S212C63v21Ev,
  (VTBL_ENTRY)&_ZN6S212C63v22Ev,
  (VTBL_ENTRY)&_ZN6S212C63v23Ev,
  (VTBL_ENTRY)&_ZN6S212C63v24Ev,
  (VTBL_ENTRY)&_ZN6S212C63v25Ev,
  (VTBL_ENTRY)&_ZN6S212C63v26Ev,
  (VTBL_ENTRY)&_ZN6S212C63v27Ev,
  (VTBL_ENTRY)&_ZN6S212C63v28Ev,
  (VTBL_ENTRY)&_ZN6S212C63v29Ev,
  (VTBL_ENTRY)&_ZN6S212C63v30Ev,
  (VTBL_ENTRY)&_ZN6S212C63v31Ev,
  (VTBL_ENTRY)&_ZN6S212C63v32Ev,
  (VTBL_ENTRY)&_ZN6S212C63v33Ev,
  (VTBL_ENTRY)&_ZN6S212C63v34Ev,
  (VTBL_ENTRY)&_ZN6S212C63v35Ev,
  (VTBL_ENTRY)&_ZN6S212C63v36Ev,
  (VTBL_ENTRY)&_ZN6S212C63v37Ev,
  (VTBL_ENTRY)&_ZN6S212C63v38Ev,
  (VTBL_ENTRY)&_ZN6S212C63v39Ev,
  (VTBL_ENTRY)&_ZN6S212C63v40Ev,
  (VTBL_ENTRY)&_ZN6S212C63v41Ev,
  (VTBL_ENTRY)&_ZN6S212C63v42Ev,
  (VTBL_ENTRY)&_ZN6S212C63v43Ev,
  (VTBL_ENTRY)&_ZN6S212C63v44Ev,
  (VTBL_ENTRY)&_ZN6S212C63v45Ev,
  (VTBL_ENTRY)&_ZN6S212C63v46Ev,
  (VTBL_ENTRY)&_ZN6S212C63v47Ev,
  (VTBL_ENTRY)&_ZN6S212C63v48Ev,
  (VTBL_ENTRY)&_ZN6S212C63v49Ev,
  (VTBL_ENTRY)&_ZN6S212C63v50Ev,
  (VTBL_ENTRY)&_ZN6S212C63v51Ev,
  (VTBL_ENTRY)&_ZN6S212C63v52Ev,
  (VTBL_ENTRY)&_ZN6S212C63v53Ev,
  (VTBL_ENTRY)&_ZN6S212C63v54Ev,
  (VTBL_ENTRY)&_ZN6S212C63v55Ev,
  (VTBL_ENTRY)&_ZN6S212C63v56Ev,
  (VTBL_ENTRY)&_ZN6S212C63v57Ev,
  (VTBL_ENTRY)&_ZN6S212C63v58Ev,
  (VTBL_ENTRY)&_ZN6S212C63v59Ev,
  (VTBL_ENTRY)&_ZN6S212C63v60Ev,
  (VTBL_ENTRY)&_ZN6S212C63v61Ev,
  (VTBL_ENTRY)&_ZN6S212C63v62Ev,
  (VTBL_ENTRY)&_ZN6S212C63v63Ev,
  (VTBL_ENTRY)&_ZN6S212C63v64Ev,
  (VTBL_ENTRY)&_ZN6S212C63v65Ev,
  (VTBL_ENTRY)&_ZN6S212C63v66Ev,
  (VTBL_ENTRY)&_ZN6S212C63v67Ev,
  (VTBL_ENTRY)&_ZN6S212C53v68Ev,
  (VTBL_ENTRY)&_ZN6S212C53v69Ev,
  (VTBL_ENTRY)&_ZN6S212C53v70Ev,
  (VTBL_ENTRY)&_ZN6S212C53v71Ev,
  (VTBL_ENTRY)&_ZN6S212C53v72Ev,
  (VTBL_ENTRY)&_ZN6S212C53v73Ev,
  (VTBL_ENTRY)&_ZN6S212C53v74Ev,
  (VTBL_ENTRY)&_ZN6S212C53v75Ev,
  (VTBL_ENTRY)&_ZN6S212C53v76Ev,
  (VTBL_ENTRY)&_ZN6S212C53v77Ev,
  (VTBL_ENTRY)&_ZN6S212C53v78Ev,
  (VTBL_ENTRY)&_ZN6S212C53v79Ev,
  (VTBL_ENTRY)&_ZN6S212C53v80Ev,
  (VTBL_ENTRY)&_ZN6S212C53v81Ev,
  (VTBL_ENTRY)&_ZN6S212C53v82Ev,
  (VTBL_ENTRY)&_ZN6S212C53v83Ev,
  (VTBL_ENTRY)&_ZN6S212C53v84Ev,
  (VTBL_ENTRY)&_ZN6S212C53v85Ev,
  (VTBL_ENTRY)&_ZN6S212C53v86Ev,
  (VTBL_ENTRY)&_ZN6S212C53v87Ev,
  (VTBL_ENTRY)&_ZN6S212C53v88Ev,
  (VTBL_ENTRY)&_ZN6S212C53v89Ev,
  (VTBL_ENTRY)&_ZN6S212C43v90Ev,
  (VTBL_ENTRY)&_ZN6S212C43v91Ev,
  (VTBL_ENTRY)&_ZN6S212C43v92Ev,
  (VTBL_ENTRY)&_ZN6S212C43v93Ev,
  (VTBL_ENTRY)&_ZN6S212C43v94Ev,
  (VTBL_ENTRY)&_ZN6S212C43v95Ev,
  (VTBL_ENTRY)&_ZN6S212C43v96Ev,
  (VTBL_ENTRY)&_ZN6S212C43v97Ev,
  (VTBL_ENTRY)&_ZN6S212C43v98Ev,
  (VTBL_ENTRY)&_ZN6S212C43v99Ev,
  (VTBL_ENTRY)&_ZN6S212C44v100Ev,
  (VTBL_ENTRY)&_ZN6S212C44v101Ev,
  (VTBL_ENTRY)&_ZN6S212C44v102Ev,
  (VTBL_ENTRY)&_ZN6S212C44v103Ev,
  (VTBL_ENTRY)&_ZN6S212C44v104Ev,
  (VTBL_ENTRY)&_ZN6S212C44v105Ev,
  (VTBL_ENTRY)&_ZN6S212C44v106Ev,
  (VTBL_ENTRY)&_ZN6S212C44v107Ev,
  (VTBL_ENTRY)&_ZN6S212C44v108Ev,
  (VTBL_ENTRY)&_ZN6S212C44v109Ev,
  (VTBL_ENTRY)&_ZN6S212C34v110Ev,
  (VTBL_ENTRY)&_ZN6S212C34v111Ev,
  (VTBL_ENTRY)&_ZN6S212C34v112Ev,
  (VTBL_ENTRY)&_ZN6S212C34v113Ev,
  (VTBL_ENTRY)&_ZN6S212C24v114Ev,
  (VTBL_ENTRY)&_ZN6S212C24v115Ev,
};
extern VTBL_ENTRY _ZTI6S212C2[];
extern  VTBL_ENTRY _ZTV6S212C2[];
Class_Descriptor cd_S212C2 = {  "S212C2", // class name
  bases_S212C2, 4,
  &(vtc_S212C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S212C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S212C2),116, //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  S212C1  : S212C2 {
  int s212c1f0[2];
  virtual  ~S212C1(); // _ZN6S212C1D1Ev
  virtual void  v1(); // _ZN6S212C12v1Ev
  virtual void  v2(); // _ZN6S212C12v2Ev
  virtual void  v3(); // _ZN6S212C12v3Ev
  S212C1(); // tgen
};
//SIG(1 S212C1) 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 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v114 v115} vd v1 v2 v3 Fi[2]}


 S212C1 ::~S212C1(){ note_dtor("S212C1", this);}
void  S212C1 ::v1(){vfunc_called(this, "_ZN6S212C12v1Ev");}
void  S212C1 ::v2(){vfunc_called(this, "_ZN6S212C12v2Ev");}
void  S212C1 ::v3(){vfunc_called(this, "_ZN6S212C12v3Ev");}
S212C1 ::S212C1(){ note_ctor("S212C1", this);} // tgen

static void Test_S212C1()
{
  extern Class_Descriptor cd_S212C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,58)];
    init_test(&cd_S212C1, buf);
    S212C1 *dp, &lv = *(dp=new (buf) S212C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,228), "sizeof(S212C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S212C1)");
    check_base_class_offset(lv, (S212C6*)(S212C5*)(S212C4*)(S212C3*)(S212C2*), 0, "S212C1");
    check_base_class_offset(lv, (S212C5*)(S212C4*)(S212C3*)(S212C2*), 0, "S212C1");
    check_base_class_offset(lv, (S212C4*)(S212C3*)(S212C2*), 0, "S212C1");
    check_base_class_offset(lv, (S212C3*)(S212C2*), 0, "S212C1");
    check_base_class_offset(lv, (S212C2*), 0, "S212C1");
    check_field_offset(lv, s212c1f0, ABISELECT(296,220), "S212C1.s212c1f0");
    test_class_info(&lv, &cd_S212C1);
    dp->~S212C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS212C1(Test_S212C1, "S212C1", ABISELECT(304,228));

#else // __cplusplus

extern void _ZN6S212C1C1Ev();
extern void _ZN6S212C1D1Ev();
Name_Map name_map_S212C1[] = {
  NSPAIR(_ZN6S212C1C1Ev),
  NSPAIR(_ZN6S212C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S212C6;
extern VTBL_ENTRY _ZTI6S212C6[];
extern  VTBL_ENTRY _ZTV6S212C6[];
extern Class_Descriptor cd_S212C5;
extern VTBL_ENTRY _ZTI6S212C5[];
extern  VTBL_ENTRY _ZTV6S212C5[];
extern Class_Descriptor cd_S212C4;
extern VTBL_ENTRY _ZTI6S212C4[];
extern  VTBL_ENTRY _ZTV6S212C4[];
extern Class_Descriptor cd_S212C3;
extern VTBL_ENTRY _ZTI6S212C3[];
extern  VTBL_ENTRY _ZTV6S212C3[];
extern Class_Descriptor cd_S212C2;
extern VTBL_ENTRY _ZTI6S212C2[];
extern  VTBL_ENTRY _ZTV6S212C2[];
static Base_Class bases_S212C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S212C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S212C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S212C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S212C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S212C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S212C1[];
extern void _ZN6S212C1D1Ev();
extern void _ZN6S212C1D0Ev();
extern void _ZN6S212C62v4Ev();
extern void _ZN6S212C62v5Ev();
extern void _ZN6S212C62v6Ev();
extern void _ZN6S212C62v7Ev();
extern void _ZN6S212C62v8Ev();
extern void _ZN6S212C62v9Ev();
extern void _ZN6S212C63v10Ev();
extern void _ZN6S212C63v11Ev();
extern void _ZN6S212C63v12Ev();
extern void _ZN6S212C63v13Ev();
extern void _ZN6S212C63v14Ev();
extern void _ZN6S212C63v15Ev();
extern void _ZN6S212C63v16Ev();
extern void _ZN6S212C63v17Ev();
extern void _ZN6S212C63v18Ev();
extern void _ZN6S212C63v19Ev();
extern void _ZN6S212C63v20Ev();
extern void _ZN6S212C63v21Ev();
extern void _ZN6S212C63v22Ev();
extern void _ZN6S212C63v23Ev();
extern void _ZN6S212C63v24Ev();
extern void _ZN6S212C63v25Ev();
extern void _ZN6S212C63v26Ev();
extern void _ZN6S212C63v27Ev();
extern void _ZN6S212C63v28Ev();
extern void _ZN6S212C63v29Ev();
extern void _ZN6S212C63v30Ev();
extern void _ZN6S212C63v31Ev();
extern void _ZN6S212C63v32Ev();
extern void _ZN6S212C63v33Ev();
extern void _ZN6S212C63v34Ev();
extern void _ZN6S212C63v35Ev();
extern void _ZN6S212C63v36Ev();
extern void _ZN6S212C63v37Ev();
extern void _ZN6S212C63v38Ev();
extern void _ZN6S212C63v39Ev();
extern void _ZN6S212C63v40Ev();
extern void _ZN6S212C63v41Ev();
extern void _ZN6S212C63v42Ev();
extern void _ZN6S212C63v43Ev();
extern void _ZN6S212C63v44Ev();
extern void _ZN6S212C63v45Ev();
extern void _ZN6S212C63v46Ev();
extern void _ZN6S212C63v47Ev();
extern void _ZN6S212C63v48Ev();
extern void _ZN6S212C63v49Ev();
extern void _ZN6S212C63v50Ev();
extern void _ZN6S212C63v51Ev();
extern void _ZN6S212C63v52Ev();
extern void _ZN6S212C63v53Ev();
extern void _ZN6S212C63v54Ev();
extern void _ZN6S212C63v55Ev();
extern void _ZN6S212C63v56Ev();
extern void _ZN6S212C63v57Ev();
extern void _ZN6S212C63v58Ev();
extern void _ZN6S212C63v59Ev();
extern void _ZN6S212C63v60Ev();
extern void _ZN6S212C63v61Ev();
extern void _ZN6S212C63v62Ev();
extern void _ZN6S212C63v63Ev();
extern void _ZN6S212C63v64Ev();
extern void _ZN6S212C63v65Ev();
extern void _ZN6S212C63v66Ev();
extern void _ZN6S212C63v67Ev();
extern void _ZN6S212C53v68Ev();
extern void _ZN6S212C53v69Ev();
extern void _ZN6S212C53v70Ev();
extern void _ZN6S212C53v71Ev();
extern void _ZN6S212C53v72Ev();
extern void _ZN6S212C53v73Ev();
extern void _ZN6S212C53v74Ev();
extern void _ZN6S212C53v75Ev();
extern void _ZN6S212C53v76Ev();
extern void _ZN6S212C53v77Ev();
extern void _ZN6S212C53v78Ev();
extern void _ZN6S212C53v79Ev();
extern void _ZN6S212C53v80Ev();
extern void _ZN6S212C53v81Ev();
extern void _ZN6S212C53v82Ev();
extern void _ZN6S212C53v83Ev();
extern void _ZN6S212C53v84Ev();
extern void _ZN6S212C53v85Ev();
extern void _ZN6S212C53v86Ev();
extern void _ZN6S212C53v87Ev();
extern void _ZN6S212C53v88Ev();
extern void _ZN6S212C53v89Ev();
extern void _ZN6S212C43v90Ev();
extern void _ZN6S212C43v91Ev();
extern void _ZN6S212C43v92Ev();
extern void _ZN6S212C43v93Ev();
extern void _ZN6S212C43v94Ev();
extern void _ZN6S212C43v95Ev();
extern void _ZN6S212C43v96Ev();
extern void _ZN6S212C43v97Ev();
extern void _ZN6S212C43v98Ev();
extern void _ZN6S212C43v99Ev();
extern void _ZN6S212C44v100Ev();
extern void _ZN6S212C44v101Ev();
extern void _ZN6S212C44v102Ev();
extern void _ZN6S212C44v103Ev();
extern void _ZN6S212C44v104Ev();
extern void _ZN6S212C44v105Ev();
extern void _ZN6S212C44v106Ev();
extern void _ZN6S212C44v107Ev();
extern void _ZN6S212C44v108Ev();
extern void _ZN6S212C44v109Ev();
extern void _ZN6S212C34v110Ev();
extern void _ZN6S212C34v111Ev();
extern void _ZN6S212C34v112Ev();
extern void _ZN6S212C34v113Ev();
extern void _ZN6S212C24v114Ev();
extern void _ZN6S212C24v115Ev();
extern void _ZN6S212C12v1Ev();
extern void _ZN6S212C12v2Ev();
extern void _ZN6S212C12v3Ev();
static  VTBL_ENTRY vtc_S212C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S212C1[0]),
  (VTBL_ENTRY)&_ZN6S212C1D1Ev,
  (VTBL_ENTRY)&_ZN6S212C1D0Ev,
  (VTBL_ENTRY)&_ZN6S212C62v4Ev,
  (VTBL_ENTRY)&_ZN6S212C62v5Ev,
  (VTBL_ENTRY)&_ZN6S212C62v6Ev,
  (VTBL_ENTRY)&_ZN6S212C62v7Ev,
  (VTBL_ENTRY)&_ZN6S212C62v8Ev,
  (VTBL_ENTRY)&_ZN6S212C62v9Ev,
  (VTBL_ENTRY)&_ZN6S212C63v10Ev,
  (VTBL_ENTRY)&_ZN6S212C63v11Ev,
  (VTBL_ENTRY)&_ZN6S212C63v12Ev,
  (VTBL_ENTRY)&_ZN6S212C63v13Ev,
  (VTBL_ENTRY)&_ZN6S212C63v14Ev,
  (VTBL_ENTRY)&_ZN6S212C63v15Ev,
  (VTBL_ENTRY)&_ZN6S212C63v16Ev,
  (VTBL_ENTRY)&_ZN6S212C63v17Ev,
  (VTBL_ENTRY)&_ZN6S212C63v18Ev,
  (VTBL_ENTRY)&_ZN6S212C63v19Ev,
  (VTBL_ENTRY)&_ZN6S212C63v20Ev,
  (VTBL_ENTRY)&_ZN6S212C63v21Ev,
  (VTBL_ENTRY)&_ZN6S212C63v22Ev,
  (VTBL_ENTRY)&_ZN6S212C63v23Ev,
  (VTBL_ENTRY)&_ZN6S212C63v24Ev,
  (VTBL_ENTRY)&_ZN6S212C63v25Ev,
  (VTBL_ENTRY)&_ZN6S212C63v26Ev,
  (VTBL_ENTRY)&_ZN6S212C63v27Ev,
  (VTBL_ENTRY)&_ZN6S212C63v28Ev,
  (VTBL_ENTRY)&_ZN6S212C63v29Ev,
  (VTBL_ENTRY)&_ZN6S212C63v30Ev,
  (VTBL_ENTRY)&_ZN6S212C63v31Ev,
  (VTBL_ENTRY)&_ZN6S212C63v32Ev,
  (VTBL_ENTRY)&_ZN6S212C63v33Ev,
  (VTBL_ENTRY)&_ZN6S212C63v34Ev,
  (VTBL_ENTRY)&_ZN6S212C63v35Ev,
  (VTBL_ENTRY)&_ZN6S212C63v36Ev,
  (VTBL_ENTRY)&_ZN6S212C63v37Ev,
  (VTBL_ENTRY)&_ZN6S212C63v38Ev,
  (VTBL_ENTRY)&_ZN6S212C63v39Ev,
  (VTBL_ENTRY)&_ZN6S212C63v40Ev,
  (VTBL_ENTRY)&_ZN6S212C63v41Ev,
  (VTBL_ENTRY)&_ZN6S212C63v42Ev,
  (VTBL_ENTRY)&_ZN6S212C63v43Ev,
  (VTBL_ENTRY)&_ZN6S212C63v44Ev,
  (VTBL_ENTRY)&_ZN6S212C63v45Ev,
  (VTBL_ENTRY)&_ZN6S212C63v46Ev,
  (VTBL_ENTRY)&_ZN6S212C63v47Ev,
  (VTBL_ENTRY)&_ZN6S212C63v48Ev,
  (VTBL_ENTRY)&_ZN6S212C63v49Ev,
  (VTBL_ENTRY)&_ZN6S212C63v50Ev,
  (VTBL_ENTRY)&_ZN6S212C63v51Ev,
  (VTBL_ENTRY)&_ZN6S212C63v52Ev,
  (VTBL_ENTRY)&_ZN6S212C63v53Ev,
  (VTBL_ENTRY)&_ZN6S212C63v54Ev,
  (VTBL_ENTRY)&_ZN6S212C63v55Ev,
  (VTBL_ENTRY)&_ZN6S212C63v56Ev,
  (VTBL_ENTRY)&_ZN6S212C63v57Ev,
  (VTBL_ENTRY)&_ZN6S212C63v58Ev,
  (VTBL_ENTRY)&_ZN6S212C63v59Ev,
  (VTBL_ENTRY)&_ZN6S212C63v60Ev,
  (VTBL_ENTRY)&_ZN6S212C63v61Ev,
  (VTBL_ENTRY)&_ZN6S212C63v62Ev,
  (VTBL_ENTRY)&_ZN6S212C63v63Ev,
  (VTBL_ENTRY)&_ZN6S212C63v64Ev,
  (VTBL_ENTRY)&_ZN6S212C63v65Ev,
  (VTBL_ENTRY)&_ZN6S212C63v66Ev,
  (VTBL_ENTRY)&_ZN6S212C63v67Ev,
  (VTBL_ENTRY)&_ZN6S212C53v68Ev,
  (VTBL_ENTRY)&_ZN6S212C53v69Ev,
  (VTBL_ENTRY)&_ZN6S212C53v70Ev,
  (VTBL_ENTRY)&_ZN6S212C53v71Ev,
  (VTBL_ENTRY)&_ZN6S212C53v72Ev,
  (VTBL_ENTRY)&_ZN6S212C53v73Ev,
  (VTBL_ENTRY)&_ZN6S212C53v74Ev,
  (VTBL_ENTRY)&_ZN6S212C53v75Ev,
  (VTBL_ENTRY)&_ZN6S212C53v76Ev,
  (VTBL_ENTRY)&_ZN6S212C53v77Ev,
  (VTBL_ENTRY)&_ZN6S212C53v78Ev,
  (VTBL_ENTRY)&_ZN6S212C53v79Ev,
  (VTBL_ENTRY)&_ZN6S212C53v80Ev,
  (VTBL_ENTRY)&_ZN6S212C53v81Ev,
  (VTBL_ENTRY)&_ZN6S212C53v82Ev,
  (VTBL_ENTRY)&_ZN6S212C53v83Ev,
  (VTBL_ENTRY)&_ZN6S212C53v84Ev,
  (VTBL_ENTRY)&_ZN6S212C53v85Ev,
  (VTBL_ENTRY)&_ZN6S212C53v86Ev,
  (VTBL_ENTRY)&_ZN6S212C53v87Ev,
  (VTBL_ENTRY)&_ZN6S212C53v88Ev,
  (VTBL_ENTRY)&_ZN6S212C53v89Ev,
  (VTBL_ENTRY)&_ZN6S212C43v90Ev,
  (VTBL_ENTRY)&_ZN6S212C43v91Ev,
  (VTBL_ENTRY)&_ZN6S212C43v92Ev,
  (VTBL_ENTRY)&_ZN6S212C43v93Ev,
  (VTBL_ENTRY)&_ZN6S212C43v94Ev,
  (VTBL_ENTRY)&_ZN6S212C43v95Ev,
  (VTBL_ENTRY)&_ZN6S212C43v96Ev,
  (VTBL_ENTRY)&_ZN6S212C43v97Ev,
  (VTBL_ENTRY)&_ZN6S212C43v98Ev,
  (VTBL_ENTRY)&_ZN6S212C43v99Ev,
  (VTBL_ENTRY)&_ZN6S212C44v100Ev,
  (VTBL_ENTRY)&_ZN6S212C44v101Ev,
  (VTBL_ENTRY)&_ZN6S212C44v102Ev,
  (VTBL_ENTRY)&_ZN6S212C44v103Ev,
  (VTBL_ENTRY)&_ZN6S212C44v104Ev,
  (VTBL_ENTRY)&_ZN6S212C44v105Ev,
  (VTBL_ENTRY)&_ZN6S212C44v106Ev,
  (VTBL_ENTRY)&_ZN6S212C44v107Ev,
  (VTBL_ENTRY)&_ZN6S212C44v108Ev,
  (VTBL_ENTRY)&_ZN6S212C44v109Ev,
  (VTBL_ENTRY)&_ZN6S212C34v110Ev,
  (VTBL_ENTRY)&_ZN6S212C34v111Ev,
  (VTBL_ENTRY)&_ZN6S212C34v112Ev,
  (VTBL_ENTRY)&_ZN6S212C34v113Ev,
  (VTBL_ENTRY)&_ZN6S212C24v114Ev,
  (VTBL_ENTRY)&_ZN6S212C24v115Ev,
  (VTBL_ENTRY)&_ZN6S212C12v1Ev,
  (VTBL_ENTRY)&_ZN6S212C12v2Ev,
  (VTBL_ENTRY)&_ZN6S212C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S212C1[];
extern  VTBL_ENTRY _ZTV6S212C1[];
Class_Descriptor cd_S212C1 = {  "S212C1", // class name
  bases_S212C1, 5,
  &(vtc_S212C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI6S212C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S212C1),119, //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  S214C6  {
  int s214c6f0;
  __tsi64 s214c6f1;
  void *s214c6f2[4];
  int s214c6f3[2];
  void *s214c6f4;
  ::S1503C5_nt s214c6f5;
  void *s214c6f6[2];
  virtual  ~S214C6(); // _ZN6S214C6D1Ev
  virtual void  v4(); // _ZN6S214C62v4Ev
  virtual void  v5(); // _ZN6S214C62v5Ev
  virtual void  v6(); // _ZN6S214C62v6Ev
  virtual void  v7(); // _ZN6S214C62v7Ev
  virtual void  v8(); // _ZN6S214C62v8Ev
  virtual void  v9(); // _ZN6S214C62v9Ev
  virtual void  v10(); // _ZN6S214C63v10Ev
  virtual void  v11(); // _ZN6S214C63v11Ev
  virtual void  v12(); // _ZN6S214C63v12Ev
  virtual void  v13(); // _ZN6S214C63v13Ev
  virtual void  v14(); // _ZN6S214C63v14Ev
  virtual void  v15(); // _ZN6S214C63v15Ev
  virtual void  v16(); // _ZN6S214C63v16Ev
  virtual void  v17(); // _ZN6S214C63v17Ev
  virtual void  v18(); // _ZN6S214C63v18Ev
  virtual void  v19(); // _ZN6S214C63v19Ev
  virtual void  v20(); // _ZN6S214C63v20Ev
  virtual void  v21(); // _ZN6S214C63v21Ev
  virtual void  v22(); // _ZN6S214C63v22Ev
  virtual void  v23(); // _ZN6S214C63v23Ev
  virtual void  v24(); // _ZN6S214C63v24Ev
  virtual void  v25(); // _ZN6S214C63v25Ev
  virtual void  v26(); // _ZN6S214C63v26Ev
  virtual void  v27(); // _ZN6S214C63v27Ev
  virtual void  v28(); // _ZN6S214C63v28Ev
  virtual void  v29(); // _ZN6S214C63v29Ev
  virtual void  v30(); // _ZN6S214C63v30Ev
  virtual void  v31(); // _ZN6S214C63v31Ev
  virtual void  v32(); // _ZN6S214C63v32Ev
  virtual void  v33(); // _ZN6S214C63v33Ev
  virtual void  v34(); // _ZN6S214C63v34Ev
  virtual void  v35(); // _ZN6S214C63v35Ev
  virtual void  v36(); // _ZN6S214C63v36Ev
  virtual void  v37(); // _ZN6S214C63v37Ev
  virtual void  v38(); // _ZN6S214C63v38Ev
  virtual void  v39(); // _ZN6S214C63v39Ev
  virtual void  v40(); // _ZN6S214C63v40Ev
  virtual void  v41(); // _ZN6S214C63v41Ev
  virtual void  v42(); // _ZN6S214C63v42Ev
  virtual void  v43(); // _ZN6S214C63v43Ev
  virtual void  v44(); // _ZN6S214C63v44Ev
  virtual void  v45(); // _ZN6S214C63v45Ev
  virtual void  v46(); // _ZN6S214C63v46Ev
  virtual void  v47(); // _ZN6S214C63v47Ev
  virtual void  v48(); // _ZN6S214C63v48Ev
  virtual void  v49(); // _ZN6S214C63v49Ev
  virtual void  v50(); // _ZN6S214C63v50Ev
  virtual void  v51(); // _ZN6S214C63v51Ev
  virtual void  v52(); // _ZN6S214C63v52Ev
  virtual void  v53(); // _ZN6S214C63v53Ev
  virtual void  v54(); // _ZN6S214C63v54Ev
  virtual void  v55(); // _ZN6S214C63v55Ev
  virtual void  v56(); // _ZN6S214C63v56Ev
  virtual void  v57(); // _ZN6S214C63v57Ev
  virtual void  v58(); // _ZN6S214C63v58Ev
  virtual void  v59(); // _ZN6S214C63v59Ev
  virtual void  v60(); // _ZN6S214C63v60Ev
  virtual void  v61(); // _ZN6S214C63v61Ev
  virtual void  v62(); // _ZN6S214C63v62Ev
  virtual void  v63(); // _ZN6S214C63v63Ev
  virtual void  v64(); // _ZN6S214C63v64Ev
  virtual void  v65(); // _ZN6S214C63v65Ev
  virtual void  v66(); // _ZN6S214C63v66Ev
  virtual void  v67(); // _ZN6S214C63v67Ev
  S214C6(); // tgen
};
//SIG(-1 S214C6) 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]}


 S214C6 ::~S214C6(){ note_dtor("S214C6", this);}
void  S214C6 ::v4(){vfunc_called(this, "_ZN6S214C62v4Ev");}
void  S214C6 ::v5(){vfunc_called(this, "_ZN6S214C62v5Ev");}
void  S214C6 ::v6(){vfunc_called(this, "_ZN6S214C62v6Ev");}
void  S214C6 ::v7(){vfunc_called(this, "_ZN6S214C62v7Ev");}
void  S214C6 ::v8(){vfunc_called(this, "_ZN6S214C62v8Ev");}
void  S214C6 ::v9(){vfunc_called(this, "_ZN6S214C62v9Ev");}
void  S214C6 ::v10(){vfunc_called(this, "_ZN6S214C63v10Ev");}
void  S214C6 ::v11(){vfunc_called(this, "_ZN6S214C63v11Ev");}
void  S214C6 ::v12(){vfunc_called(this, "_ZN6S214C63v12Ev");}
void  S214C6 ::v13(){vfunc_called(this, "_ZN6S214C63v13Ev");}
void  S214C6 ::v14(){vfunc_called(this, "_ZN6S214C63v14Ev");}
void  S214C6 ::v15(){vfunc_called(this, "_ZN6S214C63v15Ev");}
void  S214C6 ::v16(){vfunc_called(this, "_ZN6S214C63v16Ev");}
void  S214C6 ::v17(){vfunc_called(this, "_ZN6S214C63v17Ev");}
void  S214C6 ::v18(){vfunc_called(this, "_ZN6S214C63v18Ev");}
void  S214C6 ::v19(){vfunc_called(this, "_ZN6S214C63v19Ev");}
void  S214C6 ::v20(){vfunc_called(this, "_ZN6S214C63v20Ev");}
void  S214C6 ::v21(){vfunc_called(this, "_ZN6S214C63v21Ev");}
void  S214C6 ::v22(){vfunc_called(this, "_ZN6S214C63v22Ev");}
void  S214C6 ::v23(){vfunc_called(this, "_ZN6S214C63v23Ev");}
void  S214C6 ::v24(){vfunc_called(this, "_ZN6S214C63v24Ev");}
void  S214C6 ::v25(){vfunc_called(this, "_ZN6S214C63v25Ev");}
void  S214C6 ::v26(){vfunc_called(this, "_ZN6S214C63v26Ev");}
void  S214C6 ::v27(){vfunc_called(this, "_ZN6S214C63v27Ev");}
void  S214C6 ::v28(){vfunc_called(this, "_ZN6S214C63v28Ev");}
void  S214C6 ::v29(){vfunc_called(this, "_ZN6S214C63v29Ev");}
void  S214C6 ::v30(){vfunc_called(this, "_ZN6S214C63v30Ev");}
void  S214C6 ::v31(){vfunc_called(this, "_ZN6S214C63v31Ev");}
void  S214C6 ::v32(){vfunc_called(this, "_ZN6S214C63v32Ev");}
void  S214C6 ::v33(){vfunc_called(this, "_ZN6S214C63v33Ev");}
void  S214C6 ::v34(){vfunc_called(this, "_ZN6S214C63v34Ev");}
void  S214C6 ::v35(){vfunc_called(this, "_ZN6S214C63v35Ev");}
void  S214C6 ::v36(){vfunc_called(this, "_ZN6S214C63v36Ev");}
void  S214C6 ::v37(){vfunc_called(this, "_ZN6S214C63v37Ev");}
void  S214C6 ::v38(){vfunc_called(this, "_ZN6S214C63v38Ev");}
void  S214C6 ::v39(){vfunc_called(this, "_ZN6S214C63v39Ev");}
void  S214C6 ::v40(){vfunc_called(this, "_ZN6S214C63v40Ev");}
void  S214C6 ::v41(){vfunc_called(this, "_ZN6S214C63v41Ev");}
void  S214C6 ::v42(){vfunc_called(this, "_ZN6S214C63v42Ev");}
void  S214C6 ::v43(){vfunc_called(this, "_ZN6S214C63v43Ev");}
void  S214C6 ::v44(){vfunc_called(this, "_ZN6S214C63v44Ev");}
void  S214C6 ::v45(){vfunc_called(this, "_ZN6S214C63v45Ev");}
void  S214C6 ::v46(){vfunc_called(this, "_ZN6S214C63v46Ev");}
void  S214C6 ::v47(){vfunc_called(this, "_ZN6S214C63v47Ev");}
void  S214C6 ::v48(){vfunc_called(this, "_ZN6S214C63v48Ev");}
void  S214C6 ::v49(){vfunc_called(this, "_ZN6S214C63v49Ev");}
void  S214C6 ::v50(){vfunc_called(this, "_ZN6S214C63v50Ev");}
void  S214C6 ::v51(){vfunc_called(this, "_ZN6S214C63v51Ev");}
void  S214C6 ::v52(){vfunc_called(this, "_ZN6S214C63v52Ev");}
void  S214C6 ::v53(){vfunc_called(this, "_ZN6S214C63v53Ev");}
void  S214C6 ::v54(){vfunc_called(this, "_ZN6S214C63v54Ev");}
void  S214C6 ::v55(){vfunc_called(this, "_ZN6S214C63v55Ev");}
void  S214C6 ::v56(){vfunc_called(this, "_ZN6S214C63v56Ev");}
void  S214C6 ::v57(){vfunc_called(this, "_ZN6S214C63v57Ev");}
void  S214C6 ::v58(){vfunc_called(this, "_ZN6S214C63v58Ev");}
void  S214C6 ::v59(){vfunc_called(this, "_ZN6S214C63v59Ev");}
void  S214C6 ::v60(){vfunc_called(this, "_ZN6S214C63v60Ev");}
void  S214C6 ::v61(){vfunc_called(this, "_ZN6S214C63v61Ev");}
void  S214C6 ::v62(){vfunc_called(this, "_ZN6S214C63v62Ev");}
void  S214C6 ::v63(){vfunc_called(this, "_ZN6S214C63v63Ev");}
void  S214C6 ::v64(){vfunc_called(this, "_ZN6S214C63v64Ev");}
void  S214C6 ::v65(){vfunc_called(this, "_ZN6S214C63v65Ev");}
void  S214C6 ::v66(){vfunc_called(this, "_ZN6S214C63v66Ev");}
void  S214C6 ::v67(){vfunc_called(this, "_ZN6S214C63v67Ev");}
S214C6 ::S214C6(){ note_ctor("S214C6", this);} // tgen

static void Test_S214C6()
{
  extern Class_Descriptor cd_S214C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S214C6, buf);
    S214C6 *dp, &lv = *(dp=new (buf) S214C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S214C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S214C6)");
    check_field_offset(lv, s214c6f0, ABISELECT(8,4), "S214C6.s214c6f0");
    check_field_offset(lv, s214c6f1, ABISELECT(16,8), "S214C6.s214c6f1");
    check_field_offset(lv, s214c6f2, ABISELECT(24,16), "S214C6.s214c6f2");
    check_field_offset(lv, s214c6f3, ABISELECT(56,32), "S214C6.s214c6f3");
    check_field_offset(lv, s214c6f4, ABISELECT(64,40), "S214C6.s214c6f4");
    check_field_offset(lv, s214c6f5, ABISELECT(72,44), "S214C6.s214c6f5");
    check_field_offset(lv, s214c6f6, ABISELECT(80,52), "S214C6.s214c6f6");
    test_class_info(&lv, &cd_S214C6);
    dp->~S214C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS214C6(Test_S214C6, "S214C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S214C6C1Ev();
extern void _ZN6S214C6D1Ev();
Name_Map name_map_S214C6[] = {
  NSPAIR(_ZN6S214C6C1Ev),
  NSPAIR(_ZN6S214C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S214C6[];
extern void _ZN6S214C6D1Ev();
extern void _ZN6S214C6D0Ev();
extern void _ZN6S214C62v4Ev();
extern void _ZN6S214C62v5Ev();
extern void _ZN6S214C62v6Ev();
extern void _ZN6S214C62v7Ev();
extern void _ZN6S214C62v8Ev();
extern void _ZN6S214C62v9Ev();
extern void _ZN6S214C63v10Ev();
extern void _ZN6S214C63v11Ev();
extern void _ZN6S214C63v12Ev();
extern void _ZN6S214C63v13Ev();
extern void _ZN6S214C63v14Ev();
extern void _ZN6S214C63v15Ev();
extern void _ZN6S214C63v16Ev();
extern void _ZN6S214C63v17Ev();
extern void _ZN6S214C63v18Ev();
extern void _ZN6S214C63v19Ev();
extern void _ZN6S214C63v20Ev();
extern void _ZN6S214C63v21Ev();
extern void _ZN6S214C63v22Ev();
extern void _ZN6S214C63v23Ev();
extern void _ZN6S214C63v24Ev();
extern void _ZN6S214C63v25Ev();
extern void _ZN6S214C63v26Ev();
extern void _ZN6S214C63v27Ev();
extern void _ZN6S214C63v28Ev();
extern void _ZN6S214C63v29Ev();
extern void _ZN6S214C63v30Ev();
extern void _ZN6S214C63v31Ev();
extern void _ZN6S214C63v32Ev();
extern void _ZN6S214C63v33Ev();
extern void _ZN6S214C63v34Ev();
extern void _ZN6S214C63v35Ev();
extern void _ZN6S214C63v36Ev();
extern void _ZN6S214C63v37Ev();
extern void _ZN6S214C63v38Ev();
extern void _ZN6S214C63v39Ev();
extern void _ZN6S214C63v40Ev();
extern void _ZN6S214C63v41Ev();
extern void _ZN6S214C63v42Ev();
extern void _ZN6S214C63v43Ev();
extern void _ZN6S214C63v44Ev();
extern void _ZN6S214C63v45Ev();
extern void _ZN6S214C63v46Ev();
extern void _ZN6S214C63v47Ev();
extern void _ZN6S214C63v48Ev();
extern void _ZN6S214C63v49Ev();
extern void _ZN6S214C63v50Ev();
extern void _ZN6S214C63v51Ev();
extern void _ZN6S214C63v52Ev();
extern void _ZN6S214C63v53Ev();
extern void _ZN6S214C63v54Ev();
extern void _ZN6S214C63v55Ev();
extern void _ZN6S214C63v56Ev();
extern void _ZN6S214C63v57Ev();
extern void _ZN6S214C63v58Ev();
extern void _ZN6S214C63v59Ev();
extern void _ZN6S214C63v60Ev();
extern void _ZN6S214C63v61Ev();
extern void _ZN6S214C63v62Ev();
extern void _ZN6S214C63v63Ev();
extern void _ZN6S214C63v64Ev();
extern void _ZN6S214C63v65Ev();
extern void _ZN6S214C63v66Ev();
extern void _ZN6S214C63v67Ev();
static  VTBL_ENTRY vtc_S214C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S214C6[0]),
  (VTBL_ENTRY)&_ZN6S214C6D1Ev,
  (VTBL_ENTRY)&_ZN6S214C6D0Ev,
  (VTBL_ENTRY)&_ZN6S214C62v4Ev,
  (VTBL_ENTRY)&_ZN6S214C62v5Ev,
  (VTBL_ENTRY)&_ZN6S214C62v6Ev,
  (VTBL_ENTRY)&_ZN6S214C62v7Ev,
  (VTBL_ENTRY)&_ZN6S214C62v8Ev,
  (VTBL_ENTRY)&_ZN6S214C62v9Ev,
  (VTBL_ENTRY)&_ZN6S214C63v10Ev,
  (VTBL_ENTRY)&_ZN6S214C63v11Ev,
  (VTBL_ENTRY)&_ZN6S214C63v12Ev,
  (VTBL_ENTRY)&_ZN6S214C63v13Ev,
  (VTBL_ENTRY)&_ZN6S214C63v14Ev,
  (VTBL_ENTRY)&_ZN6S214C63v15Ev,
  (VTBL_ENTRY)&_ZN6S214C63v16Ev,
  (VTBL_ENTRY)&_ZN6S214C63v17Ev,
  (VTBL_ENTRY)&_ZN6S214C63v18Ev,
  (VTBL_ENTRY)&_ZN6S214C63v19Ev,
  (VTBL_ENTRY)&_ZN6S214C63v20Ev,
  (VTBL_ENTRY)&_ZN6S214C63v21Ev,
  (VTBL_ENTRY)&_ZN6S214C63v22Ev,
  (VTBL_ENTRY)&_ZN6S214C63v23Ev,
  (VTBL_ENTRY)&_ZN6S214C63v24Ev,
  (VTBL_ENTRY)&_ZN6S214C63v25Ev,
  (VTBL_ENTRY)&_ZN6S214C63v26Ev,
  (VTBL_ENTRY)&_ZN6S214C63v27Ev,
  (VTBL_ENTRY)&_ZN6S214C63v28Ev,
  (VTBL_ENTRY)&_ZN6S214C63v29Ev,
  (VTBL_ENTRY)&_ZN6S214C63v30Ev,
  (VTBL_ENTRY)&_ZN6S214C63v31Ev,
  (VTBL_ENTRY)&_ZN6S214C63v32Ev,
  (VTBL_ENTRY)&_ZN6S214C63v33Ev,
  (VTBL_ENTRY)&_ZN6S214C63v34Ev,
  (VTBL_ENTRY)&_ZN6S214C63v35Ev,
  (VTBL_ENTRY)&_ZN6S214C63v36Ev,
  (VTBL_ENTRY)&_ZN6S214C63v37Ev,
  (VTBL_ENTRY)&_ZN6S214C63v38Ev,
  (VTBL_ENTRY)&_ZN6S214C63v39Ev,
  (VTBL_ENTRY)&_ZN6S214C63v40Ev,
  (VTBL_ENTRY)&_ZN6S214C63v41Ev,
  (VTBL_ENTRY)&_ZN6S214C63v42Ev,
  (VTBL_ENTRY)&_ZN6S214C63v43Ev,
  (VTBL_ENTRY)&_ZN6S214C63v44Ev,
  (VTBL_ENTRY)&_ZN6S214C63v45Ev,
  (VTBL_ENTRY)&_ZN6S214C63v46Ev,
  (VTBL_ENTRY)&_ZN6S214C63v47Ev,
  (VTBL_ENTRY)&_ZN6S214C63v48Ev,
  (VTBL_ENTRY)&_ZN6S214C63v49Ev,
  (VTBL_ENTRY)&_ZN6S214C63v50Ev,
  (VTBL_ENTRY)&_ZN6S214C63v51Ev,
  (VTBL_ENTRY)&_ZN6S214C63v52Ev,
  (VTBL_ENTRY)&_ZN6S214C63v53Ev,
  (VTBL_ENTRY)&_ZN6S214C63v54Ev,
  (VTBL_ENTRY)&_ZN6S214C63v55Ev,
  (VTBL_ENTRY)&_ZN6S214C63v56Ev,
  (VTBL_ENTRY)&_ZN6S214C63v57Ev,
  (VTBL_ENTRY)&_ZN6S214C63v58Ev,
  (VTBL_ENTRY)&_ZN6S214C63v59Ev,
  (VTBL_ENTRY)&_ZN6S214C63v60Ev,
  (VTBL_ENTRY)&_ZN6S214C63v61Ev,
  (VTBL_ENTRY)&_ZN6S214C63v62Ev,
  (VTBL_ENTRY)&_ZN6S214C63v63Ev,
  (VTBL_ENTRY)&_ZN6S214C63v64Ev,
  (VTBL_ENTRY)&_ZN6S214C63v65Ev,
  (VTBL_ENTRY)&_ZN6S214C63v66Ev,
  (VTBL_ENTRY)&_ZN6S214C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S214C6[];
extern  VTBL_ENTRY _ZTV6S214C6[];
Class_Descriptor cd_S214C6 = {  "S214C6", // class name
  0,0,//no base classes
  &(vtc_S214C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S214C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S214C6),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  S214C5  : S214C6 {
  int s214c5f0[2];
  void *s214c5f1;
  int s214c5f2[2];
  ::S210C8_nt s214c5f3;
  ::S210C8_nt s214c5f4;
  ::S629C14 s214c5f5;
  ::S210C8_nt s214c5f6;
  unsigned int s214c5f7:1;
  unsigned int s214c5f8:1;
  unsigned int s214c5f9:1;
  unsigned int s214c5f10:1;
  unsigned int s214c5f11:1;
  int s214c5f12[2];
  virtual  ~S214C5(); // _ZN6S214C5D1Ev
  virtual void  v68(); // _ZN6S214C53v68Ev
  virtual void  v69(); // _ZN6S214C53v69Ev
  virtual void  v70(); // _ZN6S214C53v70Ev
  virtual void  v71(); // _ZN6S214C53v71Ev
  virtual void  v72(); // _ZN6S214C53v72Ev
  virtual void  v73(); // _ZN6S214C53v73Ev
  virtual void  v74(); // _ZN6S214C53v74Ev
  virtual void  v75(); // _ZN6S214C53v75Ev
  virtual void  v76(); // _ZN6S214C53v76Ev
  virtual void  v77(); // _ZN6S214C53v77Ev
  virtual void  v78(); // _ZN6S214C53v78Ev
  virtual void  v79(); // _ZN6S214C53v79Ev
  virtual void  v80(); // _ZN6S214C53v80Ev
  virtual void  v81(); // _ZN6S214C53v81Ev
  virtual void  v82(); // _ZN6S214C53v82Ev
  virtual void  v83(); // _ZN6S214C53v83Ev
  virtual void  v84(); // _ZN6S214C53v84Ev
  virtual void  v85(); // _ZN6S214C53v85Ev
  virtual void  v86(); // _ZN6S214C53v86Ev
  virtual void  v87(); // _ZN6S214C53v87Ev
  virtual void  v88(); // _ZN6S214C53v88Ev
  virtual void  v89(); // _ZN6S214C53v89Ev
  S214C5(); // tgen
};
//SIG(-1 S214C5) 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]}


 S214C5 ::~S214C5(){ note_dtor("S214C5", this);}
void  S214C5 ::v68(){vfunc_called(this, "_ZN6S214C53v68Ev");}
void  S214C5 ::v69(){vfunc_called(this, "_ZN6S214C53v69Ev");}
void  S214C5 ::v70(){vfunc_called(this, "_ZN6S214C53v70Ev");}
void  S214C5 ::v71(){vfunc_called(this, "_ZN6S214C53v71Ev");}
void  S214C5 ::v72(){vfunc_called(this, "_ZN6S214C53v72Ev");}
void  S214C5 ::v73(){vfunc_called(this, "_ZN6S214C53v73Ev");}
void  S214C5 ::v74(){vfunc_called(this, "_ZN6S214C53v74Ev");}
void  S214C5 ::v75(){vfunc_called(this, "_ZN6S214C53v75Ev");}
void  S214C5 ::v76(){vfunc_called(this, "_ZN6S214C53v76Ev");}
void  S214C5 ::v77(){vfunc_called(this, "_ZN6S214C53v77Ev");}
void  S214C5 ::v78(){vfunc_called(this, "_ZN6S214C53v78Ev");}
void  S214C5 ::v79(){vfunc_called(this, "_ZN6S214C53v79Ev");}
void  S214C5 ::v80(){vfunc_called(this, "_ZN6S214C53v80Ev");}
void  S214C5 ::v81(){vfunc_called(this, "_ZN6S214C53v81Ev");}
void  S214C5 ::v82(){vfunc_called(this, "_ZN6S214C53v82Ev");}
void  S214C5 ::v83(){vfunc_called(this, "_ZN6S214C53v83Ev");}
void  S214C5 ::v84(){vfunc_called(this, "_ZN6S214C53v84Ev");}
void  S214C5 ::v85(){vfunc_called(this, "_ZN6S214C53v85Ev");}
void  S214C5 ::v86(){vfunc_called(this, "_ZN6S214C53v86Ev");}
void  S214C5 ::v87(){vfunc_called(this, "_ZN6S214C53v87Ev");}
void  S214C5 ::v88(){vfunc_called(this, "_ZN6S214C53v88Ev");}
void  S214C5 ::v89(){vfunc_called(this, "_ZN6S214C53v89Ev");}
S214C5 ::S214C5(){ note_ctor("S214C5", this);} // tgen

static void Test_S214C5()
{
  extern Class_Descriptor cd_S214C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S214C5, buf);
    S214C5 *dp, &lv = *(dp=new (buf) S214C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S214C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S214C5)");
    check_base_class_offset(lv, (S214C6*), 0, "S214C5");
    check_field_offset(lv, s214c5f0, ABISELECT(96,60), "S214C5.s214c5f0");
    check_field_offset(lv, s214c5f1, ABISELECT(104,68), "S214C5.s214c5f1");
    check_field_offset(lv, s214c5f2, ABISELECT(112,72), "S214C5.s214c5f2");
    check_field_offset(lv, s214c5f3, ABISELECT(120,80), "S214C5.s214c5f3");
    check_field_offset(lv, s214c5f4, ABISELECT(136,92), "S214C5.s214c5f4");
    check_field_offset(lv, s214c5f5, ABISELECT(152,104), "S214C5.s214c5f5");
    check_field_offset(lv, s214c5f6, ABISELECT(160,108), "S214C5.s214c5f6");
    set_bf_and_test(lv, s214c5f7, ABISELECT(176,120), 0, 1, 1, "S214C5");
    set_bf_and_test(lv, s214c5f8, ABISELECT(176,120), 1, 1, 1, "S214C5");
    set_bf_and_test(lv, s214c5f9, ABISELECT(176,120), 2, 1, 1, "S214C5");
    set_bf_and_test(lv, s214c5f10, ABISELECT(176,120), 3, 1, 1, "S214C5");
    set_bf_and_test(lv, s214c5f11, ABISELECT(176,120), 4, 1, 1, "S214C5");
    check_field_offset(lv, s214c5f12, ABISELECT(180,124), "S214C5.s214c5f12");
    test_class_info(&lv, &cd_S214C5);
    dp->~S214C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS214C5(Test_S214C5, "S214C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S214C5C1Ev();
extern void _ZN6S214C5D1Ev();
Name_Map name_map_S214C5[] = {
  NSPAIR(_ZN6S214C5C1Ev),
  NSPAIR(_ZN6S214C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S214C6;
extern VTBL_ENTRY _ZTI6S214C6[];
extern  VTBL_ENTRY _ZTV6S214C6[];
static Base_Class bases_S214C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S214C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI6S214C5[];
extern void _ZN6S214C5D1Ev();
extern void _ZN6S214C5D0Ev();
extern void _ZN6S214C62v4Ev();
extern void _ZN6S214C62v5Ev();
extern void _ZN6S214C62v6Ev();
extern void _ZN6S214C62v7Ev();
extern void _ZN6S214C62v8Ev();
extern void _ZN6S214C62v9Ev();
extern void _ZN6S214C63v10Ev();
extern void _ZN6S214C63v11Ev();
extern void _ZN6S214C63v12Ev();
extern void _ZN6S214C63v13Ev();
extern void _ZN6S214C63v14Ev();
extern void _ZN6S214C63v15Ev();
extern void _ZN6S214C63v16Ev();
extern void _ZN6S214C63v17Ev();
extern void _ZN6S214C63v18Ev();
extern void _ZN6S214C63v19Ev();
extern void _ZN6S214C63v20Ev();
extern void _ZN6S214C63v21Ev();
extern void _ZN6S214C63v22Ev();
extern void _ZN6S214C63v23Ev();
extern void _ZN6S214C63v24Ev();
extern void _ZN6S214C63v25Ev();
extern void _ZN6S214C63v26Ev();
extern void _ZN6S214C63v27Ev();
extern void _ZN6S214C63v28Ev();
extern void _ZN6S214C63v29Ev();
extern void _ZN6S214C63v30Ev();
extern void _ZN6S214C63v31Ev();
extern void _ZN6S214C63v32Ev();
extern void _ZN6S214C63v33Ev();
extern void _ZN6S214C63v34Ev();
extern void _ZN6S214C63v35Ev();
extern void _ZN6S214C63v36Ev();
extern void _ZN6S214C63v37Ev();
extern void _ZN6S214C63v38Ev();
extern void _ZN6S214C63v39Ev();
extern void _ZN6S214C63v40Ev();
extern void _ZN6S214C63v41Ev();
extern void _ZN6S214C63v42Ev();
extern void _ZN6S214C63v43Ev();
extern void _ZN6S214C63v44Ev();
extern void _ZN6S214C63v45Ev();
extern void _ZN6S214C63v46Ev();
extern void _ZN6S214C63v47Ev();
extern void _ZN6S214C63v48Ev();
extern void _ZN6S214C63v49Ev();
extern void _ZN6S214C63v50Ev();
extern void _ZN6S214C63v51Ev();
extern void _ZN6S214C63v52Ev();
extern void _ZN6S214C63v53Ev();
extern void _ZN6S214C63v54Ev();
extern void _ZN6S214C63v55Ev();
extern void _ZN6S214C63v56Ev();
extern void _ZN6S214C63v57Ev();
extern void _ZN6S214C63v58Ev();
extern void _ZN6S214C63v59Ev();
extern void _ZN6S214C63v60Ev();
extern void _ZN6S214C63v61Ev();
extern void _ZN6S214C63v62Ev();
extern void _ZN6S214C63v63Ev();
extern void _ZN6S214C63v64Ev();
extern void _ZN6S214C63v65Ev();
extern void _ZN6S214C63v66Ev();
extern void _ZN6S214C63v67Ev();
extern void _ZN6S214C53v68Ev();
extern void _ZN6S214C53v69Ev();
extern void _ZN6S214C53v70Ev();
extern void _ZN6S214C53v71Ev();
extern void _ZN6S214C53v72Ev();
extern void _ZN6S214C53v73Ev();
extern void _ZN6S214C53v74Ev();
extern void _ZN6S214C53v75Ev();
extern void _ZN6S214C53v76Ev();
extern void _ZN6S214C53v77Ev();
extern void _ZN6S214C53v78Ev();
extern void _ZN6S214C53v79Ev();
extern void _ZN6S214C53v80Ev();
extern void _ZN6S214C53v81Ev();
extern void _ZN6S214C53v82Ev();
extern void _ZN6S214C53v83Ev();
extern void _ZN6S214C53v84Ev();
extern void _ZN6S214C53v85Ev();
extern void _ZN6S214C53v86Ev();
extern void _ZN6S214C53v87Ev();
extern void _ZN6S214C53v88Ev();
extern void _ZN6S214C53v89Ev();
static  VTBL_ENTRY vtc_S214C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S214C5[0]),
  (VTBL_ENTRY)&_ZN6S214C5D1Ev,
  (VTBL_ENTRY)&_ZN6S214C5D0Ev,
  (VTBL_ENTRY)&_ZN6S214C62v4Ev,
  (VTBL_ENTRY)&_ZN6S214C62v5Ev,
  (VTBL_ENTRY)&_ZN6S214C62v6Ev,
  (VTBL_ENTRY)&_ZN6S214C62v7Ev,
  (VTBL_ENTRY)&_ZN6S214C62v8Ev,
  (VTBL_ENTRY)&_ZN6S214C62v9Ev,
  (VTBL_ENTRY)&_ZN6S214C63v10Ev,
  (VTBL_ENTRY)&_ZN6S214C63v11Ev,
  (VTBL_ENTRY)&_ZN6S214C63v12Ev,
  (VTBL_ENTRY)&_ZN6S214C63v13Ev,
  (VTBL_ENTRY)&_ZN6S214C63v14Ev,
  (VTBL_ENTRY)&_ZN6S214C63v15Ev,
  (VTBL_ENTRY)&_ZN6S214C63v16Ev,
  (VTBL_ENTRY)&_ZN6S214C63v17Ev,
  (VTBL_ENTRY)&_ZN6S214C63v18Ev,
  (VTBL_ENTRY)&_ZN6S214C63v19Ev,
  (VTBL_ENTRY)&_ZN6S214C63v20Ev,
  (VTBL_ENTRY)&_ZN6S214C63v21Ev,
  (VTBL_ENTRY)&_ZN6S214C63v22Ev,
  (VTBL_ENTRY)&_ZN6S214C63v23Ev,
  (VTBL_ENTRY)&_ZN6S214C63v24Ev,
  (VTBL_ENTRY)&_ZN6S214C63v25Ev,
  (VTBL_ENTRY)&_ZN6S214C63v26Ev,
  (VTBL_ENTRY)&_ZN6S214C63v27Ev,
  (VTBL_ENTRY)&_ZN6S214C63v28Ev,
  (VTBL_ENTRY)&_ZN6S214C63v29Ev,
  (VTBL_ENTRY)&_ZN6S214C63v30Ev,
  (VTBL_ENTRY)&_ZN6S214C63v31Ev,
  (VTBL_ENTRY)&_ZN6S214C63v32Ev,
  (VTBL_ENTRY)&_ZN6S214C63v33Ev,
  (VTBL_ENTRY)&_ZN6S214C63v34Ev,
  (VTBL_ENTRY)&_ZN6S214C63v35Ev,
  (VTBL_ENTRY)&_ZN6S214C63v36Ev,
  (VTBL_ENTRY)&_ZN6S214C63v37Ev,
  (VTBL_ENTRY)&_ZN6S214C63v38Ev,
  (VTBL_ENTRY)&_ZN6S214C63v39Ev,
  (VTBL_ENTRY)&_ZN6S214C63v40Ev,
  (VTBL_ENTRY)&_ZN6S214C63v41Ev,
  (VTBL_ENTRY)&_ZN6S214C63v42Ev,
  (VTBL_ENTRY)&_ZN6S214C63v43Ev,
  (VTBL_ENTRY)&_ZN6S214C63v44Ev,
  (VTBL_ENTRY)&_ZN6S214C63v45Ev,
  (VTBL_ENTRY)&_ZN6S214C63v46Ev,
  (VTBL_ENTRY)&_ZN6S214C63v47Ev,
  (VTBL_ENTRY)&_ZN6S214C63v48Ev,
  (VTBL_ENTRY)&_ZN6S214C63v49Ev,
  (VTBL_ENTRY)&_ZN6S214C63v50Ev,
  (VTBL_ENTRY)&_ZN6S214C63v51Ev,
  (VTBL_ENTRY)&_ZN6S214C63v52Ev,
  (VTBL_ENTRY)&_ZN6S214C63v53Ev,
  (VTBL_ENTRY)&_ZN6S214C63v54Ev,
  (VTBL_ENTRY)&_ZN6S214C63v55Ev,
  (VTBL_ENTRY)&_ZN6S214C63v56Ev,
  (VTBL_ENTRY)&_ZN6S214C63v57Ev,
  (VTBL_ENTRY)&_ZN6S214C63v58Ev,
  (VTBL_ENTRY)&_ZN6S214C63v59Ev,
  (VTBL_ENTRY)&_ZN6S214C63v60Ev,
  (VTBL_ENTRY)&_ZN6S214C63v61Ev,
  (VTBL_ENTRY)&_ZN6S214C63v62Ev,
  (VTBL_ENTRY)&_ZN6S214C63v63Ev,
  (VTBL_ENTRY)&_ZN6S214C63v64Ev,
  (VTBL_ENTRY)&_ZN6S214C63v65Ev,
  (VTBL_ENTRY)&_ZN6S214C63v66Ev,
  (VTBL_ENTRY)&_ZN6S214C63v67Ev,
  (VTBL_ENTRY)&_ZN6S214C53v68Ev,
  (VTBL_ENTRY)&_ZN6S214C53v69Ev,
  (VTBL_ENTRY)&_ZN6S214C53v70Ev,
  (VTBL_ENTRY)&_ZN6S214C53v71Ev,
  (VTBL_ENTRY)&_ZN6S214C53v72Ev,
  (VTBL_ENTRY)&_ZN6S214C53v73Ev,
  (VTBL_ENTRY)&_ZN6S214C53v74Ev,
  (VTBL_ENTRY)&_ZN6S214C53v75Ev,
  (VTBL_ENTRY)&_ZN6S214C53v76Ev,
  (VTBL_ENTRY)&_ZN6S214C53v77Ev,
  (VTBL_ENTRY)&_ZN6S214C53v78Ev,
  (VTBL_ENTRY)&_ZN6S214C53v79Ev,
  (VTBL_ENTRY)&_ZN6S214C53v80Ev,
  (VTBL_ENTRY)&_ZN6S214C53v81Ev,
  (VTBL_ENTRY)&_ZN6S214C53v82Ev,
  (VTBL_ENTRY)&_ZN6S214C53v83Ev,
  (VTBL_ENTRY)&_ZN6S214C53v84Ev,
  (VTBL_ENTRY)&_ZN6S214C53v85Ev,
  (VTBL_ENTRY)&_ZN6S214C53v86Ev,
  (VTBL_ENTRY)&_ZN6S214C53v87Ev,
  (VTBL_ENTRY)&_ZN6S214C53v88Ev,
  (VTBL_ENTRY)&_ZN6S214C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S214C5[];
extern  VTBL_ENTRY _ZTV6S214C5[];
Class_Descriptor cd_S214C5 = {  "S214C5", // class name
  bases_S214C5, 1,
  &(vtc_S214C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S214C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S214C5),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  S214C4  : S214C5 {
  unsigned int s214c4f0:1;
  unsigned int s214c4f1:1;
  unsigned int s214c4f2:1;
  ::S1503C28 s214c4f3;
  ::S1503C24 s214c4f4;
  ::S1503C18 s214c4f5;
  ::S1503C12 s214c4f6;
  int s214c4f7[3];
  virtual  ~S214C4(); // _ZN6S214C4D1Ev
  virtual void  v90(); // _ZN6S214C43v90Ev
  virtual void  v91(); // _ZN6S214C43v91Ev
  virtual void  v92(); // _ZN6S214C43v92Ev
  virtual void  v93(); // _ZN6S214C43v93Ev
  virtual void  v94(); // _ZN6S214C43v94Ev
  virtual void  v95(); // _ZN6S214C43v95Ev
  virtual void  v96(); // _ZN6S214C43v96Ev
  virtual void  v97(); // _ZN6S214C43v97Ev
  virtual void  v98(); // _ZN6S214C43v98Ev
  virtual void  v99(); // _ZN6S214C43v99Ev
  virtual void  v100(); // _ZN6S214C44v100Ev
  virtual void  v101(); // _ZN6S214C44v101Ev
  virtual void  v102(); // _ZN6S214C44v102Ev
  virtual void  v103(); // _ZN6S214C44v103Ev
  virtual void  v104(); // _ZN6S214C44v104Ev
  virtual void  v105(); // _ZN6S214C44v105Ev
  virtual void  v106(); // _ZN6S214C44v106Ev
  virtual void  v107(); // _ZN6S214C44v107Ev
  virtual void  v108(); // _ZN6S214C44v108Ev
  virtual void  v109(); // _ZN6S214C44v109Ev
  S214C4(); // tgen
};
//SIG(-1 S214C4) 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]}


 S214C4 ::~S214C4(){ note_dtor("S214C4", this);}
void  S214C4 ::v90(){vfunc_called(this, "_ZN6S214C43v90Ev");}
void  S214C4 ::v91(){vfunc_called(this, "_ZN6S214C43v91Ev");}
void  S214C4 ::v92(){vfunc_called(this, "_ZN6S214C43v92Ev");}
void  S214C4 ::v93(){vfunc_called(this, "_ZN6S214C43v93Ev");}
void  S214C4 ::v94(){vfunc_called(this, "_ZN6S214C43v94Ev");}
void  S214C4 ::v95(){vfunc_called(this, "_ZN6S214C43v95Ev");}
void  S214C4 ::v96(){vfunc_called(this, "_ZN6S214C43v96Ev");}
void  S214C4 ::v97(){vfunc_called(this, "_ZN6S214C43v97Ev");}
void  S214C4 ::v98(){vfunc_called(this, "_ZN6S214C43v98Ev");}
void  S214C4 ::v99(){vfunc_called(this, "_ZN6S214C43v99Ev");}
void  S214C4 ::v100(){vfunc_called(this, "_ZN6S214C44v100Ev");}
void  S214C4 ::v101(){vfunc_called(this, "_ZN6S214C44v101Ev");}
void  S214C4 ::v102(){vfunc_called(this, "_ZN6S214C44v102Ev");}
void  S214C4 ::v103(){vfunc_called(this, "_ZN6S214C44v103Ev");}
void  S214C4 ::v104(){vfunc_called(this, "_ZN6S214C44v104Ev");}
void  S214C4 ::v105(){vfunc_called(this, "_ZN6S214C44v105Ev");}
void  S214C4 ::v106(){vfunc_called(this, "_ZN6S214C44v106Ev");}
void  S214C4 ::v107(){vfunc_called(this, "_ZN6S214C44v107Ev");}
void  S214C4 ::v108(){vfunc_called(this, "_ZN6S214C44v108Ev");}
void  S214C4 ::v109(){vfunc_called(this, "_ZN6S214C44v109Ev");}
S214C4 ::S214C4(){ note_ctor("S214C4", this);} // tgen

static void Test_S214C4()
{
  extern Class_Descriptor cd_S214C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S214C4, buf);
    S214C4 *dp, &lv = *(dp=new (buf) S214C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S214C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S214C4)");
    check_base_class_offset(lv, (S214C6*)(S214C5*), 0, "S214C4");
    check_base_class_offset(lv, (S214C5*), 0, "S214C4");
    set_bf_and_test(lv, s214c4f0, ABISELECT(188,132), 0, 1, 1, "S214C4");
    set_bf_and_test(lv, s214c4f1, ABISELECT(188,132), 1, 1, 1, "S214C4");
    set_bf_and_test(lv, s214c4f2, ABISELECT(188,132), 2, 1, 1, "S214C4");
    check_field_offset(lv, s214c4f3, ABISELECT(192,136), "S214C4.s214c4f3");
    check_field_offset(lv, s214c4f4, ABISELECT(208,148), "S214C4.s214c4f4");
    check_field_offset(lv, s214c4f5, ABISELECT(224,160), "S214C4.s214c4f5");
    check_field_offset(lv, s214c4f6, ABISELECT(240,172), "S214C4.s214c4f6");
    check_field_offset(lv, s214c4f7, ABISELECT(256,184), "S214C4.s214c4f7");
    test_class_info(&lv, &cd_S214C4);
    dp->~S214C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS214C4(Test_S214C4, "S214C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S214C4C1Ev();
extern void _ZN6S214C4D1Ev();
Name_Map name_map_S214C4[] = {
  NSPAIR(_ZN6S214C4C1Ev),
  NSPAIR(_ZN6S214C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S214C6;
extern VTBL_ENTRY _ZTI6S214C6[];
extern  VTBL_ENTRY _ZTV6S214C6[];
extern Class_Descriptor cd_S214C5;
extern VTBL_ENTRY _ZTI6S214C5[];
extern  VTBL_ENTRY _ZTV6S214C5[];
static Base_Class bases_S214C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S214C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S214C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S214C4[];
extern void _ZN6S214C4D1Ev();
extern void _ZN6S214C4D0Ev();
extern void _ZN6S214C62v4Ev();
extern void _ZN6S214C62v5Ev();
extern void _ZN6S214C62v6Ev();
extern void _ZN6S214C62v7Ev();
extern void _ZN6S214C62v8Ev();
extern void _ZN6S214C62v9Ev();
extern void _ZN6S214C63v10Ev();
extern void _ZN6S214C63v11Ev();
extern void _ZN6S214C63v12Ev();
extern void _ZN6S214C63v13Ev();
extern void _ZN6S214C63v14Ev();
extern void _ZN6S214C63v15Ev();
extern void _ZN6S214C63v16Ev();
extern void _ZN6S214C63v17Ev();
extern void _ZN6S214C63v18Ev();
extern void _ZN6S214C63v19Ev();
extern void _ZN6S214C63v20Ev();
extern void _ZN6S214C63v21Ev();
extern void _ZN6S214C63v22Ev();
extern void _ZN6S214C63v23Ev();
extern void _ZN6S214C63v24Ev();
extern void _ZN6S214C63v25Ev();
extern void _ZN6S214C63v26Ev();
extern void _ZN6S214C63v27Ev();
extern void _ZN6S214C63v28Ev();
extern void _ZN6S214C63v29Ev();
extern void _ZN6S214C63v30Ev();
extern void _ZN6S214C63v31Ev();
extern void _ZN6S214C63v32Ev();
extern void _ZN6S214C63v33Ev();
extern void _ZN6S214C63v34Ev();
extern void _ZN6S214C63v35Ev();
extern void _ZN6S214C63v36Ev();
extern void _ZN6S214C63v37Ev();
extern void _ZN6S214C63v38Ev();
extern void _ZN6S214C63v39Ev();
extern void _ZN6S214C63v40Ev();
extern void _ZN6S214C63v41Ev();
extern void _ZN6S214C63v42Ev();
extern void _ZN6S214C63v43Ev();
extern void _ZN6S214C63v44Ev();
extern void _ZN6S214C63v45Ev();
extern void _ZN6S214C63v46Ev();
extern void _ZN6S214C63v47Ev();
extern void _ZN6S214C63v48Ev();
extern void _ZN6S214C63v49Ev();
extern void _ZN6S214C63v50Ev();
extern void _ZN6S214C63v51Ev();
extern void _ZN6S214C63v52Ev();
extern void _ZN6S214C63v53Ev();
extern void _ZN6S214C63v54Ev();
extern void _ZN6S214C63v55Ev();
extern void _ZN6S214C63v56Ev();
extern void _ZN6S214C63v57Ev();
extern void _ZN6S214C63v58Ev();
extern void _ZN6S214C63v59Ev();
extern void _ZN6S214C63v60Ev();
extern void _ZN6S214C63v61Ev();
extern void _ZN6S214C63v62Ev();
extern void _ZN6S214C63v63Ev();
extern void _ZN6S214C63v64Ev();
extern void _ZN6S214C63v65Ev();
extern void _ZN6S214C63v66Ev();
extern void _ZN6S214C63v67Ev();
extern void _ZN6S214C53v68Ev();
extern void _ZN6S214C53v69Ev();
extern void _ZN6S214C53v70Ev();
extern void _ZN6S214C53v71Ev();
extern void _ZN6S214C53v72Ev();
extern void _ZN6S214C53v73Ev();
extern void _ZN6S214C53v74Ev();
extern void _ZN6S214C53v75Ev();
extern void _ZN6S214C53v76Ev();
extern void _ZN6S214C53v77Ev();
extern void _ZN6S214C53v78Ev();
extern void _ZN6S214C53v79Ev();
extern void _ZN6S214C53v80Ev();
extern void _ZN6S214C53v81Ev();
extern void _ZN6S214C53v82Ev();
extern void _ZN6S214C53v83Ev();
extern void _ZN6S214C53v84Ev();
extern void _ZN6S214C53v85Ev();
extern void _ZN6S214C53v86Ev();
extern void _ZN6S214C53v87Ev();
extern void _ZN6S214C53v88Ev();
extern void _ZN6S214C53v89Ev();
extern void _ZN6S214C43v90Ev();
extern void _ZN6S214C43v91Ev();
extern void _ZN6S214C43v92Ev();
extern void _ZN6S214C43v93Ev();
extern void _ZN6S214C43v94Ev();
extern void _ZN6S214C43v95Ev();
extern void _ZN6S214C43v96Ev();
extern void _ZN6S214C43v97Ev();
extern void _ZN6S214C43v98Ev();
extern void _ZN6S214C43v99Ev();
extern void _ZN6S214C44v100Ev();
extern void _ZN6S214C44v101Ev();
extern void _ZN6S214C44v102Ev();
extern void _ZN6S214C44v103Ev();
extern void _ZN6S214C44v104Ev();
extern void _ZN6S214C44v105Ev();
extern void _ZN6S214C44v106Ev();
extern void _ZN6S214C44v107Ev();
extern void _ZN6S214C44v108Ev();
extern void _ZN6S214C44v109Ev();
static  VTBL_ENTRY vtc_S214C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S214C4[0]),
  (VTBL_ENTRY)&_ZN6S214C4D1Ev,
  (VTBL_ENTRY)&_ZN6S214C4D0Ev,
  (VTBL_ENTRY)&_ZN6S214C62v4Ev,
  (VTBL_ENTRY)&_ZN6S214C62v5Ev,
  (VTBL_ENTRY)&_ZN6S214C62v6Ev,
  (VTBL_ENTRY)&_ZN6S214C62v7Ev,
  (VTBL_ENTRY)&_ZN6S214C62v8Ev,
  (VTBL_ENTRY)&_ZN6S214C62v9Ev,
  (VTBL_ENTRY)&_ZN6S214C63v10Ev,
  (VTBL_ENTRY)&_ZN6S214C63v11Ev,
  (VTBL_ENTRY)&_ZN6S214C63v12Ev,
  (VTBL_ENTRY)&_ZN6S214C63v13Ev,
  (VTBL_ENTRY)&_ZN6S214C63v14Ev,
  (VTBL_ENTRY)&_ZN6S214C63v15Ev,
  (VTBL_ENTRY)&_ZN6S214C63v16Ev,
  (VTBL_ENTRY)&_ZN6S214C63v17Ev,
  (VTBL_ENTRY)&_ZN6S214C63v18Ev,
  (VTBL_ENTRY)&_ZN6S214C63v19Ev,
  (VTBL_ENTRY)&_ZN6S214C63v20Ev,
  (VTBL_ENTRY)&_ZN6S214C63v21Ev,
  (VTBL_ENTRY)&_ZN6S214C63v22Ev,
  (VTBL_ENTRY)&_ZN6S214C63v23Ev,
  (VTBL_ENTRY)&_ZN6S214C63v24Ev,
  (VTBL_ENTRY)&_ZN6S214C63v25Ev,
  (VTBL_ENTRY)&_ZN6S214C63v26Ev,
  (VTBL_ENTRY)&_ZN6S214C63v27Ev,
  (VTBL_ENTRY)&_ZN6S214C63v28Ev,
  (VTBL_ENTRY)&_ZN6S214C63v29Ev,
  (VTBL_ENTRY)&_ZN6S214C63v30Ev,
  (VTBL_ENTRY)&_ZN6S214C63v31Ev,
  (VTBL_ENTRY)&_ZN6S214C63v32Ev,
  (VTBL_ENTRY)&_ZN6S214C63v33Ev,
  (VTBL_ENTRY)&_ZN6S214C63v34Ev,
  (VTBL_ENTRY)&_ZN6S214C63v35Ev,
  (VTBL_ENTRY)&_ZN6S214C63v36Ev,
  (VTBL_ENTRY)&_ZN6S214C63v37Ev,
  (VTBL_ENTRY)&_ZN6S214C63v38Ev,
  (VTBL_ENTRY)&_ZN6S214C63v39Ev,
  (VTBL_ENTRY)&_ZN6S214C63v40Ev,
  (VTBL_ENTRY)&_ZN6S214C63v41Ev,
  (VTBL_ENTRY)&_ZN6S214C63v42Ev,
  (VTBL_ENTRY)&_ZN6S214C63v43Ev,
  (VTBL_ENTRY)&_ZN6S214C63v44Ev,
  (VTBL_ENTRY)&_ZN6S214C63v45Ev,
  (VTBL_ENTRY)&_ZN6S214C63v46Ev,
  (VTBL_ENTRY)&_ZN6S214C63v47Ev,
  (VTBL_ENTRY)&_ZN6S214C63v48Ev,
  (VTBL_ENTRY)&_ZN6S214C63v49Ev,
  (VTBL_ENTRY)&_ZN6S214C63v50Ev,
  (VTBL_ENTRY)&_ZN6S214C63v51Ev,
  (VTBL_ENTRY)&_ZN6S214C63v52Ev,
  (VTBL_ENTRY)&_ZN6S214C63v53Ev,
  (VTBL_ENTRY)&_ZN6S214C63v54Ev,
  (VTBL_ENTRY)&_ZN6S214C63v55Ev,
  (VTBL_ENTRY)&_ZN6S214C63v56Ev,
  (VTBL_ENTRY)&_ZN6S214C63v57Ev,
  (VTBL_ENTRY)&_ZN6S214C63v58Ev,
  (VTBL_ENTRY)&_ZN6S214C63v59Ev,
  (VTBL_ENTRY)&_ZN6S214C63v60Ev,
  (VTBL_ENTRY)&_ZN6S214C63v61Ev,
  (VTBL_ENTRY)&_ZN6S214C63v62Ev,
  (VTBL_ENTRY)&_ZN6S214C63v63Ev,
  (VTBL_ENTRY)&_ZN6S214C63v64Ev,
  (VTBL_ENTRY)&_ZN6S214C63v65Ev,
  (VTBL_ENTRY)&_ZN6S214C63v66Ev,
  (VTBL_ENTRY)&_ZN6S214C63v67Ev,
  (VTBL_ENTRY)&_ZN6S214C53v68Ev,
  (VTBL_ENTRY)&_ZN6S214C53v69Ev,
  (VTBL_ENTRY)&_ZN6S214C53v70Ev,
  (VTBL_ENTRY)&_ZN6S214C53v71Ev,
  (VTBL_ENTRY)&_ZN6S214C53v72Ev,
  (VTBL_ENTRY)&_ZN6S214C53v73Ev,
  (VTBL_ENTRY)&_ZN6S214C53v74Ev,
  (VTBL_ENTRY)&_ZN6S214C53v75Ev,
  (VTBL_ENTRY)&_ZN6S214C53v76Ev,
  (VTBL_ENTRY)&_ZN6S214C53v77Ev,
  (VTBL_ENTRY)&_ZN6S214C53v78Ev,
  (VTBL_ENTRY)&_ZN6S214C53v79Ev,
  (VTBL_ENTRY)&_ZN6S214C53v80Ev,
  (VTBL_ENTRY)&_ZN6S214C53v81Ev,
  (VTBL_ENTRY)&_ZN6S214C53v82Ev,
  (VTBL_ENTRY)&_ZN6S214C53v83Ev,
  (VTBL_ENTRY)&_ZN6S214C53v84Ev,
  (VTBL_ENTRY)&_ZN6S214C53v85Ev,
  (VTBL_ENTRY)&_ZN6S214C53v86Ev,
  (VTBL_ENTRY)&_ZN6S214C53v87Ev,
  (VTBL_ENTRY)&_ZN6S214C53v88Ev,
  (VTBL_ENTRY)&_ZN6S214C53v89Ev,
  (VTBL_ENTRY)&_ZN6S214C43v90Ev,
  (VTBL_ENTRY)&_ZN6S214C43v91Ev,
  (VTBL_ENTRY)&_ZN6S214C43v92Ev,
  (VTBL_ENTRY)&_ZN6S214C43v93Ev,
  (VTBL_ENTRY)&_ZN6S214C43v94Ev,
  (VTBL_ENTRY)&_ZN6S214C43v95Ev,
  (VTBL_ENTRY)&_ZN6S214C43v96Ev,
  (VTBL_ENTRY)&_ZN6S214C43v97Ev,
  (VTBL_ENTRY)&_ZN6S214C43v98Ev,
  (VTBL_ENTRY)&_ZN6S214C43v99Ev,
  (VTBL_ENTRY)&_ZN6S214C44v100Ev,
  (VTBL_ENTRY)&_ZN6S214C44v101Ev,
  (VTBL_ENTRY)&_ZN6S214C44v102Ev,
  (VTBL_ENTRY)&_ZN6S214C44v103Ev,
  (VTBL_ENTRY)&_ZN6S214C44v104Ev,
  (VTBL_ENTRY)&_ZN6S214C44v105Ev,
  (VTBL_ENTRY)&_ZN6S214C44v106Ev,
  (VTBL_ENTRY)&_ZN6S214C44v107Ev,
  (VTBL_ENTRY)&_ZN6S214C44v108Ev,
  (VTBL_ENTRY)&_ZN6S214C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S214C4[];
extern  VTBL_ENTRY _ZTV6S214C4[];
Class_Descriptor cd_S214C4 = {  "S214C4", // class name
  bases_S214C4, 2,
  &(vtc_S214C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S214C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S214C4),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  S214C3  : S214C4 {
  ::S1503C5_nt s214c3f0;
  unsigned int s214c3f1:1;
  ::S1503C6_nt s214c3f2;
  virtual  ~S214C3(); // _ZN6S214C3D1Ev
  virtual void  v110(); // _ZN6S214C34v110Ev
  virtual void  v111(); // _ZN6S214C34v111Ev
  virtual void  v112(); // _ZN6S214C34v112Ev
  virtual void  v113(); // _ZN6S214C34v113Ev
  S214C3(); // tgen
};
//SIG(-1 S214C3) 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}}}


 S214C3 ::~S214C3(){ note_dtor("S214C3", this);}
void  S214C3 ::v110(){vfunc_called(this, "_ZN6S214C34v110Ev");}
void  S214C3 ::v111(){vfunc_called(this, "_ZN6S214C34v111Ev");}
void  S214C3 ::v112(){vfunc_called(this, "_ZN6S214C34v112Ev");}
void  S214C3 ::v113(){vfunc_called(this, "_ZN6S214C34v113Ev");}
S214C3 ::S214C3(){ note_ctor("S214C3", this);} // tgen

static void Test_S214C3()
{
  extern Class_Descriptor cd_S214C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S214C3, buf);
    S214C3 *dp, &lv = *(dp=new (buf) S214C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S214C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S214C3)");
    check_base_class_offset(lv, (S214C6*)(S214C5*)(S214C4*), 0, "S214C3");
    check_base_class_offset(lv, (S214C5*)(S214C4*), 0, "S214C3");
    check_base_class_offset(lv, (S214C4*), 0, "S214C3");
    check_field_offset(lv, s214c3f0, ABISELECT(268,196), "S214C3.s214c3f0");
    set_bf_and_test(lv, s214c3f1, ABISELECT(276,204), 0, 1, 1, "S214C3");
    check_field_offset(lv, s214c3f2, ABISELECT(280,208), "S214C3.s214c3f2");
    test_class_info(&lv, &cd_S214C3);
    dp->~S214C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS214C3(Test_S214C3, "S214C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S214C3C1Ev();
extern void _ZN6S214C3D1Ev();
Name_Map name_map_S214C3[] = {
  NSPAIR(_ZN6S214C3C1Ev),
  NSPAIR(_ZN6S214C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S214C6;
extern VTBL_ENTRY _ZTI6S214C6[];
extern  VTBL_ENTRY _ZTV6S214C6[];
extern Class_Descriptor cd_S214C5;
extern VTBL_ENTRY _ZTI6S214C5[];
extern  VTBL_ENTRY _ZTV6S214C5[];
extern Class_Descriptor cd_S214C4;
extern VTBL_ENTRY _ZTI6S214C4[];
extern  VTBL_ENTRY _ZTV6S214C4[];
static Base_Class bases_S214C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S214C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S214C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S214C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S214C3[];
extern void _ZN6S214C3D1Ev();
extern void _ZN6S214C3D0Ev();
extern void _ZN6S214C62v4Ev();
extern void _ZN6S214C62v5Ev();
extern void _ZN6S214C62v6Ev();
extern void _ZN6S214C62v7Ev();
extern void _ZN6S214C62v8Ev();
extern void _ZN6S214C62v9Ev();
extern void _ZN6S214C63v10Ev();
extern void _ZN6S214C63v11Ev();
extern void _ZN6S214C63v12Ev();
extern void _ZN6S214C63v13Ev();
extern void _ZN6S214C63v14Ev();
extern void _ZN6S214C63v15Ev();
extern void _ZN6S214C63v16Ev();
extern void _ZN6S214C63v17Ev();
extern void _ZN6S214C63v18Ev();
extern void _ZN6S214C63v19Ev();
extern void _ZN6S214C63v20Ev();
extern void _ZN6S214C63v21Ev();
extern void _ZN6S214C63v22Ev();
extern void _ZN6S214C63v23Ev();
extern void _ZN6S214C63v24Ev();
extern void _ZN6S214C63v25Ev();
extern void _ZN6S214C63v26Ev();
extern void _ZN6S214C63v27Ev();
extern void _ZN6S214C63v28Ev();
extern void _ZN6S214C63v29Ev();
extern void _ZN6S214C63v30Ev();
extern void _ZN6S214C63v31Ev();
extern void _ZN6S214C63v32Ev();
extern void _ZN6S214C63v33Ev();
extern void _ZN6S214C63v34Ev();
extern void _ZN6S214C63v35Ev();
extern void _ZN6S214C63v36Ev();
extern void _ZN6S214C63v37Ev();
extern void _ZN6S214C63v38Ev();
extern void _ZN6S214C63v39Ev();
extern void _ZN6S214C63v40Ev();
extern void _ZN6S214C63v41Ev();
extern void _ZN6S214C63v42Ev();
extern void _ZN6S214C63v43Ev();
extern void _ZN6S214C63v44Ev();
extern void _ZN6S214C63v45Ev();
extern void _ZN6S214C63v46Ev();
extern void _ZN6S214C63v47Ev();
extern void _ZN6S214C63v48Ev();
extern void _ZN6S214C63v49Ev();
extern void _ZN6S214C63v50Ev();
extern void _ZN6S214C63v51Ev();
extern void _ZN6S214C63v52Ev();
extern void _ZN6S214C63v53Ev();
extern void _ZN6S214C63v54Ev();
extern void _ZN6S214C63v55Ev();
extern void _ZN6S214C63v56Ev();
extern void _ZN6S214C63v57Ev();
extern void _ZN6S214C63v58Ev();
extern void _ZN6S214C63v59Ev();
extern void _ZN6S214C63v60Ev();
extern void _ZN6S214C63v61Ev();
extern void _ZN6S214C63v62Ev();
extern void _ZN6S214C63v63Ev();
extern void _ZN6S214C63v64Ev();
extern void _ZN6S214C63v65Ev();
extern void _ZN6S214C63v66Ev();
extern void _ZN6S214C63v67Ev();
extern void _ZN6S214C53v68Ev();
extern void _ZN6S214C53v69Ev();
extern void _ZN6S214C53v70Ev();
extern void _ZN6S214C53v71Ev();
extern void _ZN6S214C53v72Ev();
extern void _ZN6S214C53v73Ev();
extern void _ZN6S214C53v74Ev();
extern void _ZN6S214C53v75Ev();
extern void _ZN6S214C53v76Ev();
extern void _ZN6S214C53v77Ev();
extern void _ZN6S214C53v78Ev();
extern void _ZN6S214C53v79Ev();
extern void _ZN6S214C53v80Ev();
extern void _ZN6S214C53v81Ev();
extern void _ZN6S214C53v82Ev();
extern void _ZN6S214C53v83Ev();
extern void _ZN6S214C53v84Ev();
extern void _ZN6S214C53v85Ev();
extern void _ZN6S214C53v86Ev();
extern void _ZN6S214C53v87Ev();
extern void _ZN6S214C53v88Ev();
extern void _ZN6S214C53v89Ev();
extern void _ZN6S214C43v90Ev();
extern void _ZN6S214C43v91Ev();
extern void _ZN6S214C43v92Ev();
extern void _ZN6S214C43v93Ev();
extern void _ZN6S214C43v94Ev();
extern void _ZN6S214C43v95Ev();
extern void _ZN6S214C43v96Ev();
extern void _ZN6S214C43v97Ev();
extern void _ZN6S214C43v98Ev();
extern void _ZN6S214C43v99Ev();
extern void _ZN6S214C44v100Ev();
extern void _ZN6S214C44v101Ev();
extern void _ZN6S214C44v102Ev();
extern void _ZN6S214C44v103Ev();
extern void _ZN6S214C44v104Ev();
extern void _ZN6S214C44v105Ev();
extern void _ZN6S214C44v106Ev();
extern void _ZN6S214C44v107Ev();
extern void _ZN6S214C44v108Ev();
extern void _ZN6S214C44v109Ev();
extern void _ZN6S214C34v110Ev();
extern void _ZN6S214C34v111Ev();
extern void _ZN6S214C34v112Ev();
extern void _ZN6S214C34v113Ev();
static  VTBL_ENTRY vtc_S214C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S214C3[0]),
  (VTBL_ENTRY)&_ZN6S214C3D1Ev,
  (VTBL_ENTRY)&_ZN6S214C3D0Ev,
  (VTBL_ENTRY)&_ZN6S214C62v4Ev,
  (VTBL_ENTRY)&_ZN6S214C62v5Ev,
  (VTBL_ENTRY)&_ZN6S214C62v6Ev,
  (VTBL_ENTRY)&_ZN6S214C62v7Ev,
  (VTBL_ENTRY)&_ZN6S214C62v8Ev,
  (VTBL_ENTRY)&_ZN6S214C62v9Ev,
  (VTBL_ENTRY)&_ZN6S214C63v10Ev,
  (VTBL_ENTRY)&_ZN6S214C63v11Ev,
  (VTBL_ENTRY)&_ZN6S214C63v12Ev,
  (VTBL_ENTRY)&_ZN6S214C63v13Ev,
  (VTBL_ENTRY)&_ZN6S214C63v14Ev,
  (VTBL_ENTRY)&_ZN6S214C63v15Ev,
  (VTBL_ENTRY)&_ZN6S214C63v16Ev,
  (VTBL_ENTRY)&_ZN6S214C63v17Ev,
  (VTBL_ENTRY)&_ZN6S214C63v18Ev,
  (VTBL_ENTRY)&_ZN6S214C63v19Ev,
  (VTBL_ENTRY)&_ZN6S214C63v20Ev,
  (VTBL_ENTRY)&_ZN6S214C63v21Ev,
  (VTBL_ENTRY)&_ZN6S214C63v22Ev,
  (VTBL_ENTRY)&_ZN6S214C63v23Ev,
  (VTBL_ENTRY)&_ZN6S214C63v24Ev,
  (VTBL_ENTRY)&_ZN6S214C63v25Ev,
  (VTBL_ENTRY)&_ZN6S214C63v26Ev,
  (VTBL_ENTRY)&_ZN6S214C63v27Ev,
  (VTBL_ENTRY)&_ZN6S214C63v28Ev,
  (VTBL_ENTRY)&_ZN6S214C63v29Ev,
  (VTBL_ENTRY)&_ZN6S214C63v30Ev,
  (VTBL_ENTRY)&_ZN6S214C63v31Ev,
  (VTBL_ENTRY)&_ZN6S214C63v32Ev,
  (VTBL_ENTRY)&_ZN6S214C63v33Ev,
  (VTBL_ENTRY)&_ZN6S214C63v34Ev,
  (VTBL_ENTRY)&_ZN6S214C63v35Ev,
  (VTBL_ENTRY)&_ZN6S214C63v36Ev,
  (VTBL_ENTRY)&_ZN6S214C63v37Ev,
  (VTBL_ENTRY)&_ZN6S214C63v38Ev,
  (VTBL_ENTRY)&_ZN6S214C63v39Ev,
  (VTBL_ENTRY)&_ZN6S214C63v40Ev,
  (VTBL_ENTRY)&_ZN6S214C63v41Ev,
  (VTBL_ENTRY)&_ZN6S214C63v42Ev,
  (VTBL_ENTRY)&_ZN6S214C63v43Ev,
  (VTBL_ENTRY)&_ZN6S214C63v44Ev,
  (VTBL_ENTRY)&_ZN6S214C63v45Ev,
  (VTBL_ENTRY)&_ZN6S214C63v46Ev,
  (VTBL_ENTRY)&_ZN6S214C63v47Ev,
  (VTBL_ENTRY)&_ZN6S214C63v48Ev,
  (VTBL_ENTRY)&_ZN6S214C63v49Ev,
  (VTBL_ENTRY)&_ZN6S214C63v50Ev,
  (VTBL_ENTRY)&_ZN6S214C63v51Ev,
  (VTBL_ENTRY)&_ZN6S214C63v52Ev,
  (VTBL_ENTRY)&_ZN6S214C63v53Ev,
  (VTBL_ENTRY)&_ZN6S214C63v54Ev,
  (VTBL_ENTRY)&_ZN6S214C63v55Ev,
  (VTBL_ENTRY)&_ZN6S214C63v56Ev,
  (VTBL_ENTRY)&_ZN6S214C63v57Ev,
  (VTBL_ENTRY)&_ZN6S214C63v58Ev,
  (VTBL_ENTRY)&_ZN6S214C63v59Ev,
  (VTBL_ENTRY)&_ZN6S214C63v60Ev,
  (VTBL_ENTRY)&_ZN6S214C63v61Ev,
  (VTBL_ENTRY)&_ZN6S214C63v62Ev,
  (VTBL_ENTRY)&_ZN6S214C63v63Ev,
  (VTBL_ENTRY)&_ZN6S214C63v64Ev,
  (VTBL_ENTRY)&_ZN6S214C63v65Ev,
  (VTBL_ENTRY)&_ZN6S214C63v66Ev,
  (VTBL_ENTRY)&_ZN6S214C63v67Ev,
  (VTBL_ENTRY)&_ZN6S214C53v68Ev,
  (VTBL_ENTRY)&_ZN6S214C53v69Ev,
  (VTBL_ENTRY)&_ZN6S214C53v70Ev,
  (VTBL_ENTRY)&_ZN6S214C53v71Ev,
  (VTBL_ENTRY)&_ZN6S214C53v72Ev,
  (VTBL_ENTRY)&_ZN6S214C53v73Ev,
  (VTBL_ENTRY)&_ZN6S214C53v74Ev,
  (VTBL_ENTRY)&_ZN6S214C53v75Ev,
  (VTBL_ENTRY)&_ZN6S214C53v76Ev,
  (VTBL_ENTRY)&_ZN6S214C53v77Ev,
  (VTBL_ENTRY)&_ZN6S214C53v78Ev,
  (VTBL_ENTRY)&_ZN6S214C53v79Ev,
  (VTBL_ENTRY)&_ZN6S214C53v80Ev,
  (VTBL_ENTRY)&_ZN6S214C53v81Ev,
  (VTBL_ENTRY)&_ZN6S214C53v82Ev,
  (VTBL_ENTRY)&_ZN6S214C53v83Ev,
  (VTBL_ENTRY)&_ZN6S214C53v84Ev,
  (VTBL_ENTRY)&_ZN6S214C53v85Ev,
  (VTBL_ENTRY)&_ZN6S214C53v86Ev,
  (VTBL_ENTRY)&_ZN6S214C53v87Ev,
  (VTBL_ENTRY)&_ZN6S214C53v88Ev,
  (VTBL_ENTRY)&_ZN6S214C53v89Ev,
  (VTBL_ENTRY)&_ZN6S214C43v90Ev,
  (VTBL_ENTRY)&_ZN6S214C43v91Ev,
  (VTBL_ENTRY)&_ZN6S214C43v92Ev,
  (VTBL_ENTRY)&_ZN6S214C43v93Ev,
  (VTBL_ENTRY)&_ZN6S214C43v94Ev,
  (VTBL_ENTRY)&_ZN6S214C43v95Ev,
  (VTBL_ENTRY)&_ZN6S214C43v96Ev,
  (VTBL_ENTRY)&_ZN6S214C43v97Ev,
  (VTBL_ENTRY)&_ZN6S214C43v98Ev,
  (VTBL_ENTRY)&_ZN6S214C43v99Ev,
  (VTBL_ENTRY)&_ZN6S214C44v100Ev,
  (VTBL_ENTRY)&_ZN6S214C44v101Ev,
  (VTBL_ENTRY)&_ZN6S214C44v102Ev,
  (VTBL_ENTRY)&_ZN6S214C44v103Ev,
  (VTBL_ENTRY)&_ZN6S214C44v104Ev,
  (VTBL_ENTRY)&_ZN6S214C44v105Ev,
  (VTBL_ENTRY)&_ZN6S214C44v106Ev,
  (VTBL_ENTRY)&_ZN6S214C44v107Ev,
  (VTBL_ENTRY)&_ZN6S214C44v108Ev,
  (VTBL_ENTRY)&_ZN6S214C44v109Ev,
  (VTBL_ENTRY)&_ZN6S214C34v110Ev,
  (VTBL_ENTRY)&_ZN6S214C34v111Ev,
  (VTBL_ENTRY)&_ZN6S214C34v112Ev,
  (VTBL_ENTRY)&_ZN6S214C34v113Ev,
};
extern VTBL_ENTRY _ZTI6S214C3[];
extern  VTBL_ENTRY _ZTV6S214C3[];
Class_Descriptor cd_S214C3 = {  "S214C3", // class name
  bases_S214C3, 3,
  &(vtc_S214C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S214C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S214C3),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  S214C2  : S214C3 {
  virtual  ~S214C2(); // _ZN6S214C2D1Ev
  virtual void  v114(); // _ZN6S214C24v114Ev
  virtual void  v115(); // _ZN6S214C24v115Ev
  S214C2(); // tgen
};
//SIG(-1 S214C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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] 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 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 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v109 v110 v111 v112 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2}


 S214C2 ::~S214C2(){ note_dtor("S214C2", this);}
void  S214C2 ::v114(){vfunc_called(this, "_ZN6S214C24v114Ev");}
void  S214C2 ::v115(){vfunc_called(this, "_ZN6S214C24v115Ev");}
S214C2 ::S214C2(){ note_ctor("S214C2", this);} // tgen

static void Test_S214C2()
{
  extern Class_Descriptor cd_S214C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S214C2, buf);
    S214C2 *dp, &lv = *(dp=new (buf) S214C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S214C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S214C2)");
    check_base_class_offset(lv, (S214C6*)(S214C5*)(S214C4*)(S214C3*), 0, "S214C2");
    check_base_class_offset(lv, (S214C5*)(S214C4*)(S214C3*), 0, "S214C2");
    check_base_class_offset(lv, (S214C4*)(S214C3*), 0, "S214C2");
    check_base_class_offset(lv, (S214C3*), 0, "S214C2");
    test_class_info(&lv, &cd_S214C2);
    dp->~S214C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS214C2(Test_S214C2, "S214C2", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S214C2C1Ev();
extern void _ZN6S214C2D1Ev();
Name_Map name_map_S214C2[] = {
  NSPAIR(_ZN6S214C2C1Ev),
  NSPAIR(_ZN6S214C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S214C6;
extern VTBL_ENTRY _ZTI6S214C6[];
extern  VTBL_ENTRY _ZTV6S214C6[];
extern Class_Descriptor cd_S214C5;
extern VTBL_ENTRY _ZTI6S214C5[];
extern  VTBL_ENTRY _ZTV6S214C5[];
extern Class_Descriptor cd_S214C4;
extern VTBL_ENTRY _ZTI6S214C4[];
extern  VTBL_ENTRY _ZTV6S214C4[];
extern Class_Descriptor cd_S214C3;
extern VTBL_ENTRY _ZTI6S214C3[];
extern  VTBL_ENTRY _ZTV6S214C3[];
static Base_Class bases_S214C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S214C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S214C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S214C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S214C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S214C2[];
extern void _ZN6S214C2D1Ev();
extern void _ZN6S214C2D0Ev();
extern void _ZN6S214C62v4Ev();
extern void _ZN6S214C62v5Ev();
extern void _ZN6S214C62v6Ev();
extern void _ZN6S214C62v7Ev();
extern void _ZN6S214C62v8Ev();
extern void _ZN6S214C62v9Ev();
extern void _ZN6S214C63v10Ev();
extern void _ZN6S214C63v11Ev();
extern void _ZN6S214C63v12Ev();
extern void _ZN6S214C63v13Ev();
extern void _ZN6S214C63v14Ev();
extern void _ZN6S214C63v15Ev();
extern void _ZN6S214C63v16Ev();
extern void _ZN6S214C63v17Ev();
extern void _ZN6S214C63v18Ev();
extern void _ZN6S214C63v19Ev();
extern void _ZN6S214C63v20Ev();
extern void _ZN6S214C63v21Ev();
extern void _ZN6S214C63v22Ev();
extern void _ZN6S214C63v23Ev();
extern void _ZN6S214C63v24Ev();
extern void _ZN6S214C63v25Ev();
extern void _ZN6S214C63v26Ev();
extern void _ZN6S214C63v27Ev();
extern void _ZN6S214C63v28Ev();
extern void _ZN6S214C63v29Ev();
extern void _ZN6S214C63v30Ev();
extern void _ZN6S214C63v31Ev();
extern void _ZN6S214C63v32Ev();
extern void _ZN6S214C63v33Ev();
extern void _ZN6S214C63v34Ev();
extern void _ZN6S214C63v35Ev();
extern void _ZN6S214C63v36Ev();
extern void _ZN6S214C63v37Ev();
extern void _ZN6S214C63v38Ev();
extern void _ZN6S214C63v39Ev();
extern void _ZN6S214C63v40Ev();
extern void _ZN6S214C63v41Ev();
extern void _ZN6S214C63v42Ev();
extern void _ZN6S214C63v43Ev();
extern void _ZN6S214C63v44Ev();
extern void _ZN6S214C63v45Ev();
extern void _ZN6S214C63v46Ev();
extern void _ZN6S214C63v47Ev();
extern void _ZN6S214C63v48Ev();
extern void _ZN6S214C63v49Ev();
extern void _ZN6S214C63v50Ev();
extern void _ZN6S214C63v51Ev();
extern void _ZN6S214C63v52Ev();
extern void _ZN6S214C63v53Ev();
extern void _ZN6S214C63v54Ev();
extern void _ZN6S214C63v55Ev();
extern void _ZN6S214C63v56Ev();
extern void _ZN6S214C63v57Ev();
extern void _ZN6S214C63v58Ev();
extern void _ZN6S214C63v59Ev();
extern void _ZN6S214C63v60Ev();
extern void _ZN6S214C63v61Ev();
extern void _ZN6S214C63v62Ev();
extern void _ZN6S214C63v63Ev();
extern void _ZN6S214C63v64Ev();
extern void _ZN6S214C63v65Ev();
extern void _ZN6S214C63v66Ev();
extern void _ZN6S214C63v67Ev();
extern void _ZN6S214C53v68Ev();
extern void _ZN6S214C53v69Ev();
extern void _ZN6S214C53v70Ev();
extern void _ZN6S214C53v71Ev();
extern void _ZN6S214C53v72Ev();
extern void _ZN6S214C53v73Ev();
extern void _ZN6S214C53v74Ev();
extern void _ZN6S214C53v75Ev();
extern void _ZN6S214C53v76Ev();
extern void _ZN6S214C53v77Ev();
extern void _ZN6S214C53v78Ev();
extern void _ZN6S214C53v79Ev();
extern void _ZN6S214C53v80Ev();
extern void _ZN6S214C53v81Ev();
extern void _ZN6S214C53v82Ev();
extern void _ZN6S214C53v83Ev();
extern void _ZN6S214C53v84Ev();
extern void _ZN6S214C53v85Ev();
extern void _ZN6S214C53v86Ev();
extern void _ZN6S214C53v87Ev();
extern void _ZN6S214C53v88Ev();
extern void _ZN6S214C53v89Ev();
extern void _ZN6S214C43v90Ev();
extern void _ZN6S214C43v91Ev();
extern void _ZN6S214C43v92Ev();
extern void _ZN6S214C43v93Ev();
extern void _ZN6S214C43v94Ev();
extern void _ZN6S214C43v95Ev();
extern void _ZN6S214C43v96Ev();
extern void _ZN6S214C43v97Ev();
extern void _ZN6S214C43v98Ev();
extern void _ZN6S214C43v99Ev();
extern void _ZN6S214C44v100Ev();
extern void _ZN6S214C44v101Ev();
extern void _ZN6S214C44v102Ev();
extern void _ZN6S214C44v103Ev();
extern void _ZN6S214C44v104Ev();
extern void _ZN6S214C44v105Ev();
extern void _ZN6S214C44v106Ev();
extern void _ZN6S214C44v107Ev();
extern void _ZN6S214C44v108Ev();
extern void _ZN6S214C44v109Ev();
extern void _ZN6S214C34v110Ev();
extern void _ZN6S214C34v111Ev();
extern void _ZN6S214C34v112Ev();
extern void _ZN6S214C34v113Ev();
extern void _ZN6S214C24v114Ev();
extern void _ZN6S214C24v115Ev();
static  VTBL_ENTRY vtc_S214C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S214C2[0]),
  (VTBL_ENTRY)&_ZN6S214C2D1Ev,
  (VTBL_ENTRY)&_ZN6S214C2D0Ev,
  (VTBL_ENTRY)&_ZN6S214C62v4Ev,
  (VTBL_ENTRY)&_ZN6S214C62v5Ev,
  (VTBL_ENTRY)&_ZN6S214C62v6Ev,
  (VTBL_ENTRY)&_ZN6S214C62v7Ev,
  (VTBL_ENTRY)&_ZN6S214C62v8Ev,
  (VTBL_ENTRY)&_ZN6S214C62v9Ev,
  (VTBL_ENTRY)&_ZN6S214C63v10Ev,
  (VTBL_ENTRY)&_ZN6S214C63v11Ev,
  (VTBL_ENTRY)&_ZN6S214C63v12Ev,
  (VTBL_ENTRY)&_ZN6S214C63v13Ev,
  (VTBL_ENTRY)&_ZN6S214C63v14Ev,
  (VTBL_ENTRY)&_ZN6S214C63v15Ev,
  (VTBL_ENTRY)&_ZN6S214C63v16Ev,
  (VTBL_ENTRY)&_ZN6S214C63v17Ev,
  (VTBL_ENTRY)&_ZN6S214C63v18Ev,
  (VTBL_ENTRY)&_ZN6S214C63v19Ev,
  (VTBL_ENTRY)&_ZN6S214C63v20Ev,
  (VTBL_ENTRY)&_ZN6S214C63v21Ev,
  (VTBL_ENTRY)&_ZN6S214C63v22Ev,
  (VTBL_ENTRY)&_ZN6S214C63v23Ev,
  (VTBL_ENTRY)&_ZN6S214C63v24Ev,
  (VTBL_ENTRY)&_ZN6S214C63v25Ev,
  (VTBL_ENTRY)&_ZN6S214C63v26Ev,
  (VTBL_ENTRY)&_ZN6S214C63v27Ev,
  (VTBL_ENTRY)&_ZN6S214C63v28Ev,
  (VTBL_ENTRY)&_ZN6S214C63v29Ev,
  (VTBL_ENTRY)&_ZN6S214C63v30Ev,
  (VTBL_ENTRY)&_ZN6S214C63v31Ev,
  (VTBL_ENTRY)&_ZN6S214C63v32Ev,
  (VTBL_ENTRY)&_ZN6S214C63v33Ev,
  (VTBL_ENTRY)&_ZN6S214C63v34Ev,
  (VTBL_ENTRY)&_ZN6S214C63v35Ev,
  (VTBL_ENTRY)&_ZN6S214C63v36Ev,
  (VTBL_ENTRY)&_ZN6S214C63v37Ev,
  (VTBL_ENTRY)&_ZN6S214C63v38Ev,
  (VTBL_ENTRY)&_ZN6S214C63v39Ev,
  (VTBL_ENTRY)&_ZN6S214C63v40Ev,
  (VTBL_ENTRY)&_ZN6S214C63v41Ev,
  (VTBL_ENTRY)&_ZN6S214C63v42Ev,
  (VTBL_ENTRY)&_ZN6S214C63v43Ev,
  (VTBL_ENTRY)&_ZN6S214C63v44Ev,
  (VTBL_ENTRY)&_ZN6S214C63v45Ev,
  (VTBL_ENTRY)&_ZN6S214C63v46Ev,
  (VTBL_ENTRY)&_ZN6S214C63v47Ev,
  (VTBL_ENTRY)&_ZN6S214C63v48Ev,
  (VTBL_ENTRY)&_ZN6S214C63v49Ev,
  (VTBL_ENTRY)&_ZN6S214C63v50Ev,
  (VTBL_ENTRY)&_ZN6S214C63v51Ev,
  (VTBL_ENTRY)&_ZN6S214C63v52Ev,
  (VTBL_ENTRY)&_ZN6S214C63v53Ev,
  (VTBL_ENTRY)&_ZN6S214C63v54Ev,
  (VTBL_ENTRY)&_ZN6S214C63v55Ev,
  (VTBL_ENTRY)&_ZN6S214C63v56Ev,
  (VTBL_ENTRY)&_ZN6S214C63v57Ev,
  (VTBL_ENTRY)&_ZN6S214C63v58Ev,
  (VTBL_ENTRY)&_ZN6S214C63v59Ev,
  (VTBL_ENTRY)&_ZN6S214C63v60Ev,
  (VTBL_ENTRY)&_ZN6S214C63v61Ev,
  (VTBL_ENTRY)&_ZN6S214C63v62Ev,
  (VTBL_ENTRY)&_ZN6S214C63v63Ev,
  (VTBL_ENTRY)&_ZN6S214C63v64Ev,
  (VTBL_ENTRY)&_ZN6S214C63v65Ev,
  (VTBL_ENTRY)&_ZN6S214C63v66Ev,
  (VTBL_ENTRY)&_ZN6S214C63v67Ev,
  (VTBL_ENTRY)&_ZN6S214C53v68Ev,
  (VTBL_ENTRY)&_ZN6S214C53v69Ev,
  (VTBL_ENTRY)&_ZN6S214C53v70Ev,
  (VTBL_ENTRY)&_ZN6S214C53v71Ev,
  (VTBL_ENTRY)&_ZN6S214C53v72Ev,
  (VTBL_ENTRY)&_ZN6S214C53v73Ev,
  (VTBL_ENTRY)&_ZN6S214C53v74Ev,
  (VTBL_ENTRY)&_ZN6S214C53v75Ev,
  (VTBL_ENTRY)&_ZN6S214C53v76Ev,
  (VTBL_ENTRY)&_ZN6S214C53v77Ev,
  (VTBL_ENTRY)&_ZN6S214C53v78Ev,
  (VTBL_ENTRY)&_ZN6S214C53v79Ev,
  (VTBL_ENTRY)&_ZN6S214C53v80Ev,
  (VTBL_ENTRY)&_ZN6S214C53v81Ev,
  (VTBL_ENTRY)&_ZN6S214C53v82Ev,
  (VTBL_ENTRY)&_ZN6S214C53v83Ev,
  (VTBL_ENTRY)&_ZN6S214C53v84Ev,
  (VTBL_ENTRY)&_ZN6S214C53v85Ev,
  (VTBL_ENTRY)&_ZN6S214C53v86Ev,
  (VTBL_ENTRY)&_ZN6S214C53v87Ev,
  (VTBL_ENTRY)&_ZN6S214C53v88Ev,
  (VTBL_ENTRY)&_ZN6S214C53v89Ev,
  (VTBL_ENTRY)&_ZN6S214C43v90Ev,
  (VTBL_ENTRY)&_ZN6S214C43v91Ev,
  (VTBL_ENTRY)&_ZN6S214C43v92Ev,
  (VTBL_ENTRY)&_ZN6S214C43v93Ev,
  (VTBL_ENTRY)&_ZN6S214C43v94Ev,
  (VTBL_ENTRY)&_ZN6S214C43v95Ev,
  (VTBL_ENTRY)&_ZN6S214C43v96Ev,
  (VTBL_ENTRY)&_ZN6S214C43v97Ev,
  (VTBL_ENTRY)&_ZN6S214C43v98Ev,
  (VTBL_ENTRY)&_ZN6S214C43v99Ev,
  (VTBL_ENTRY)&_ZN6S214C44v100Ev,
  (VTBL_ENTRY)&_ZN6S214C44v101Ev,
  (VTBL_ENTRY)&_ZN6S214C44v102Ev,
  (VTBL_ENTRY)&_ZN6S214C44v103Ev,
  (VTBL_ENTRY)&_ZN6S214C44v104Ev,
  (VTBL_ENTRY)&_ZN6S214C44v105Ev,
  (VTBL_ENTRY)&_ZN6S214C44v106Ev,
  (VTBL_ENTRY)&_ZN6S214C44v107Ev,
  (VTBL_ENTRY)&_ZN6S214C44v108Ev,
  (VTBL_ENTRY)&_ZN6S214C44v109Ev,
  (VTBL_ENTRY)&_ZN6S214C34v110Ev,
  (VTBL_ENTRY)&_ZN6S214C34v111Ev,
  (VTBL_ENTRY)&_ZN6S214C34v112Ev,
  (VTBL_ENTRY)&_ZN6S214C34v113Ev,
  (VTBL_ENTRY)&_ZN6S214C24v114Ev,
  (VTBL_ENTRY)&_ZN6S214C24v115Ev,
};
extern VTBL_ENTRY _ZTI6S214C2[];
extern  VTBL_ENTRY _ZTV6S214C2[];
Class_Descriptor cd_S214C2 = {  "S214C2", // class name
  bases_S214C2, 4,
  &(vtc_S214C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S214C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S214C2),116, //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  S214C1  : S214C2 {
  void *s214c1f0[2];
  virtual  ~S214C1(); // _ZN6S214C1D1Ev
  virtual void  v1(); // _ZN6S214C12v1Ev
  virtual void  v2(); // _ZN6S214C12v2Ev
  virtual void  v3(); // _ZN6S214C12v3Ev
  S214C1(); // tgen
};
//SIG(1 S214C1) 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 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v114 v115} vd v1 v2 v3 Fp[2]}


 S214C1 ::~S214C1(){ note_dtor("S214C1", this);}
void  S214C1 ::v1(){vfunc_called(this, "_ZN6S214C12v1Ev");}
void  S214C1 ::v2(){vfunc_called(this, "_ZN6S214C12v2Ev");}
void  S214C1 ::v3(){vfunc_called(this, "_ZN6S214C12v3Ev");}
S214C1 ::S214C1(){ note_ctor("S214C1", this);} // tgen

static void Test_S214C1()
{
  extern Class_Descriptor cd_S214C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,58)];
    init_test(&cd_S214C1, buf);
    S214C1 *dp, &lv = *(dp=new (buf) S214C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,228), "sizeof(S214C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S214C1)");
    check_base_class_offset(lv, (S214C6*)(S214C5*)(S214C4*)(S214C3*)(S214C2*), 0, "S214C1");
    check_base_class_offset(lv, (S214C5*)(S214C4*)(S214C3*)(S214C2*), 0, "S214C1");
    check_base_class_offset(lv, (S214C4*)(S214C3*)(S214C2*), 0, "S214C1");
    check_base_class_offset(lv, (S214C3*)(S214C2*), 0, "S214C1");
    check_base_class_offset(lv, (S214C2*), 0, "S214C1");
    check_field_offset(lv, s214c1f0, ABISELECT(296,220), "S214C1.s214c1f0");
    test_class_info(&lv, &cd_S214C1);
    dp->~S214C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS214C1(Test_S214C1, "S214C1", ABISELECT(312,228));

#else // __cplusplus

extern void _ZN6S214C1C1Ev();
extern void _ZN6S214C1D1Ev();
Name_Map name_map_S214C1[] = {
  NSPAIR(_ZN6S214C1C1Ev),
  NSPAIR(_ZN6S214C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S214C6;
extern VTBL_ENTRY _ZTI6S214C6[];
extern  VTBL_ENTRY _ZTV6S214C6[];
extern Class_Descriptor cd_S214C5;
extern VTBL_ENTRY _ZTI6S214C5[];
extern  VTBL_ENTRY _ZTV6S214C5[];
extern Class_Descriptor cd_S214C4;
extern VTBL_ENTRY _ZTI6S214C4[];
extern  VTBL_ENTRY _ZTV6S214C4[];
extern Class_Descriptor cd_S214C3;
extern VTBL_ENTRY _ZTI6S214C3[];
extern  VTBL_ENTRY _ZTV6S214C3[];
extern Class_Descriptor cd_S214C2;
extern VTBL_ENTRY _ZTI6S214C2[];
extern  VTBL_ENTRY _ZTV6S214C2[];
static Base_Class bases_S214C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S214C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S214C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S214C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S214C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S214C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S214C1[];
extern void _ZN6S214C1D1Ev();
extern void _ZN6S214C1D0Ev();
extern void _ZN6S214C62v4Ev();
extern void _ZN6S214C62v5Ev();
extern void _ZN6S214C62v6Ev();
extern void _ZN6S214C62v7Ev();
extern void _ZN6S214C62v8Ev();
extern void _ZN6S214C62v9Ev();
extern void _ZN6S214C63v10Ev();
extern void _ZN6S214C63v11Ev();
extern void _ZN6S214C63v12Ev();
extern void _ZN6S214C63v13Ev();
extern void _ZN6S214C63v14Ev();
extern void _ZN6S214C63v15Ev();
extern void _ZN6S214C63v16Ev();
extern void _ZN6S214C63v17Ev();
extern void _ZN6S214C63v18Ev();
extern void _ZN6S214C63v19Ev();
extern void _ZN6S214C63v20Ev();
extern void _ZN6S214C63v21Ev();
extern void _ZN6S214C63v22Ev();
extern void _ZN6S214C63v23Ev();
extern void _ZN6S214C63v24Ev();
extern void _ZN6S214C63v25Ev();
extern void _ZN6S214C63v26Ev();
extern void _ZN6S214C63v27Ev();
extern void _ZN6S214C63v28Ev();
extern void _ZN6S214C63v29Ev();
extern void _ZN6S214C63v30Ev();
extern void _ZN6S214C63v31Ev();
extern void _ZN6S214C63v32Ev();
extern void _ZN6S214C63v33Ev();
extern void _ZN6S214C63v34Ev();
extern void _ZN6S214C63v35Ev();
extern void _ZN6S214C63v36Ev();
extern void _ZN6S214C63v37Ev();
extern void _ZN6S214C63v38Ev();
extern void _ZN6S214C63v39Ev();
extern void _ZN6S214C63v40Ev();
extern void _ZN6S214C63v41Ev();
extern void _ZN6S214C63v42Ev();
extern void _ZN6S214C63v43Ev();
extern void _ZN6S214C63v44Ev();
extern void _ZN6S214C63v45Ev();
extern void _ZN6S214C63v46Ev();
extern void _ZN6S214C63v47Ev();
extern void _ZN6S214C63v48Ev();
extern void _ZN6S214C63v49Ev();
extern void _ZN6S214C63v50Ev();
extern void _ZN6S214C63v51Ev();
extern void _ZN6S214C63v52Ev();
extern void _ZN6S214C63v53Ev();
extern void _ZN6S214C63v54Ev();
extern void _ZN6S214C63v55Ev();
extern void _ZN6S214C63v56Ev();
extern void _ZN6S214C63v57Ev();
extern void _ZN6S214C63v58Ev();
extern void _ZN6S214C63v59Ev();
extern void _ZN6S214C63v60Ev();
extern void _ZN6S214C63v61Ev();
extern void _ZN6S214C63v62Ev();
extern void _ZN6S214C63v63Ev();
extern void _ZN6S214C63v64Ev();
extern void _ZN6S214C63v65Ev();
extern void _ZN6S214C63v66Ev();
extern void _ZN6S214C63v67Ev();
extern void _ZN6S214C53v68Ev();
extern void _ZN6S214C53v69Ev();
extern void _ZN6S214C53v70Ev();
extern void _ZN6S214C53v71Ev();
extern void _ZN6S214C53v72Ev();
extern void _ZN6S214C53v73Ev();
extern void _ZN6S214C53v74Ev();
extern void _ZN6S214C53v75Ev();
extern void _ZN6S214C53v76Ev();
extern void _ZN6S214C53v77Ev();
extern void _ZN6S214C53v78Ev();
extern void _ZN6S214C53v79Ev();
extern void _ZN6S214C53v80Ev();
extern void _ZN6S214C53v81Ev();
extern void _ZN6S214C53v82Ev();
extern void _ZN6S214C53v83Ev();
extern void _ZN6S214C53v84Ev();
extern void _ZN6S214C53v85Ev();
extern void _ZN6S214C53v86Ev();
extern void _ZN6S214C53v87Ev();
extern void _ZN6S214C53v88Ev();
extern void _ZN6S214C53v89Ev();
extern void _ZN6S214C43v90Ev();
extern void _ZN6S214C43v91Ev();
extern void _ZN6S214C43v92Ev();
extern void _ZN6S214C43v93Ev();
extern void _ZN6S214C43v94Ev();
extern void _ZN6S214C43v95Ev();
extern void _ZN6S214C43v96Ev();
extern void _ZN6S214C43v97Ev();
extern void _ZN6S214C43v98Ev();
extern void _ZN6S214C43v99Ev();
extern void _ZN6S214C44v100Ev();
extern void _ZN6S214C44v101Ev();
extern void _ZN6S214C44v102Ev();
extern void _ZN6S214C44v103Ev();
extern void _ZN6S214C44v104Ev();
extern void _ZN6S214C44v105Ev();
extern void _ZN6S214C44v106Ev();
extern void _ZN6S214C44v107Ev();
extern void _ZN6S214C44v108Ev();
extern void _ZN6S214C44v109Ev();
extern void _ZN6S214C34v110Ev();
extern void _ZN6S214C34v111Ev();
extern void _ZN6S214C34v112Ev();
extern void _ZN6S214C34v113Ev();
extern void _ZN6S214C24v114Ev();
extern void _ZN6S214C24v115Ev();
extern void _ZN6S214C12v1Ev();
extern void _ZN6S214C12v2Ev();
extern void _ZN6S214C12v3Ev();
static  VTBL_ENTRY vtc_S214C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S214C1[0]),
  (VTBL_ENTRY)&_ZN6S214C1D1Ev,
  (VTBL_ENTRY)&_ZN6S214C1D0Ev,
  (VTBL_ENTRY)&_ZN6S214C62v4Ev,
  (VTBL_ENTRY)&_ZN6S214C62v5Ev,
  (VTBL_ENTRY)&_ZN6S214C62v6Ev,
  (VTBL_ENTRY)&_ZN6S214C62v7Ev,
  (VTBL_ENTRY)&_ZN6S214C62v8Ev,
  (VTBL_ENTRY)&_ZN6S214C62v9Ev,
  (VTBL_ENTRY)&_ZN6S214C63v10Ev,
  (VTBL_ENTRY)&_ZN6S214C63v11Ev,
  (VTBL_ENTRY)&_ZN6S214C63v12Ev,
  (VTBL_ENTRY)&_ZN6S214C63v13Ev,
  (VTBL_ENTRY)&_ZN6S214C63v14Ev,
  (VTBL_ENTRY)&_ZN6S214C63v15Ev,
  (VTBL_ENTRY)&_ZN6S214C63v16Ev,
  (VTBL_ENTRY)&_ZN6S214C63v17Ev,
  (VTBL_ENTRY)&_ZN6S214C63v18Ev,
  (VTBL_ENTRY)&_ZN6S214C63v19Ev,
  (VTBL_ENTRY)&_ZN6S214C63v20Ev,
  (VTBL_ENTRY)&_ZN6S214C63v21Ev,
  (VTBL_ENTRY)&_ZN6S214C63v22Ev,
  (VTBL_ENTRY)&_ZN6S214C63v23Ev,
  (VTBL_ENTRY)&_ZN6S214C63v24Ev,
  (VTBL_ENTRY)&_ZN6S214C63v25Ev,
  (VTBL_ENTRY)&_ZN6S214C63v26Ev,
  (VTBL_ENTRY)&_ZN6S214C63v27Ev,
  (VTBL_ENTRY)&_ZN6S214C63v28Ev,
  (VTBL_ENTRY)&_ZN6S214C63v29Ev,
  (VTBL_ENTRY)&_ZN6S214C63v30Ev,
  (VTBL_ENTRY)&_ZN6S214C63v31Ev,
  (VTBL_ENTRY)&_ZN6S214C63v32Ev,
  (VTBL_ENTRY)&_ZN6S214C63v33Ev,
  (VTBL_ENTRY)&_ZN6S214C63v34Ev,
  (VTBL_ENTRY)&_ZN6S214C63v35Ev,
  (VTBL_ENTRY)&_ZN6S214C63v36Ev,
  (VTBL_ENTRY)&_ZN6S214C63v37Ev,
  (VTBL_ENTRY)&_ZN6S214C63v38Ev,
  (VTBL_ENTRY)&_ZN6S214C63v39Ev,
  (VTBL_ENTRY)&_ZN6S214C63v40Ev,
  (VTBL_ENTRY)&_ZN6S214C63v41Ev,
  (VTBL_ENTRY)&_ZN6S214C63v42Ev,
  (VTBL_ENTRY)&_ZN6S214C63v43Ev,
  (VTBL_ENTRY)&_ZN6S214C63v44Ev,
  (VTBL_ENTRY)&_ZN6S214C63v45Ev,
  (VTBL_ENTRY)&_ZN6S214C63v46Ev,
  (VTBL_ENTRY)&_ZN6S214C63v47Ev,
  (VTBL_ENTRY)&_ZN6S214C63v48Ev,
  (VTBL_ENTRY)&_ZN6S214C63v49Ev,
  (VTBL_ENTRY)&_ZN6S214C63v50Ev,
  (VTBL_ENTRY)&_ZN6S214C63v51Ev,
  (VTBL_ENTRY)&_ZN6S214C63v52Ev,
  (VTBL_ENTRY)&_ZN6S214C63v53Ev,
  (VTBL_ENTRY)&_ZN6S214C63v54Ev,
  (VTBL_ENTRY)&_ZN6S214C63v55Ev,
  (VTBL_ENTRY)&_ZN6S214C63v56Ev,
  (VTBL_ENTRY)&_ZN6S214C63v57Ev,
  (VTBL_ENTRY)&_ZN6S214C63v58Ev,
  (VTBL_ENTRY)&_ZN6S214C63v59Ev,
  (VTBL_ENTRY)&_ZN6S214C63v60Ev,
  (VTBL_ENTRY)&_ZN6S214C63v61Ev,
  (VTBL_ENTRY)&_ZN6S214C63v62Ev,
  (VTBL_ENTRY)&_ZN6S214C63v63Ev,
  (VTBL_ENTRY)&_ZN6S214C63v64Ev,
  (VTBL_ENTRY)&_ZN6S214C63v65Ev,
  (VTBL_ENTRY)&_ZN6S214C63v66Ev,
  (VTBL_ENTRY)&_ZN6S214C63v67Ev,
  (VTBL_ENTRY)&_ZN6S214C53v68Ev,
  (VTBL_ENTRY)&_ZN6S214C53v69Ev,
  (VTBL_ENTRY)&_ZN6S214C53v70Ev,
  (VTBL_ENTRY)&_ZN6S214C53v71Ev,
  (VTBL_ENTRY)&_ZN6S214C53v72Ev,
  (VTBL_ENTRY)&_ZN6S214C53v73Ev,
  (VTBL_ENTRY)&_ZN6S214C53v74Ev,
  (VTBL_ENTRY)&_ZN6S214C53v75Ev,
  (VTBL_ENTRY)&_ZN6S214C53v76Ev,
  (VTBL_ENTRY)&_ZN6S214C53v77Ev,
  (VTBL_ENTRY)&_ZN6S214C53v78Ev,
  (VTBL_ENTRY)&_ZN6S214C53v79Ev,
  (VTBL_ENTRY)&_ZN6S214C53v80Ev,
  (VTBL_ENTRY)&_ZN6S214C53v81Ev,
  (VTBL_ENTRY)&_ZN6S214C53v82Ev,
  (VTBL_ENTRY)&_ZN6S214C53v83Ev,
  (VTBL_ENTRY)&_ZN6S214C53v84Ev,
  (VTBL_ENTRY)&_ZN6S214C53v85Ev,
  (VTBL_ENTRY)&_ZN6S214C53v86Ev,
  (VTBL_ENTRY)&_ZN6S214C53v87Ev,
  (VTBL_ENTRY)&_ZN6S214C53v88Ev,
  (VTBL_ENTRY)&_ZN6S214C53v89Ev,
  (VTBL_ENTRY)&_ZN6S214C43v90Ev,
  (VTBL_ENTRY)&_ZN6S214C43v91Ev,
  (VTBL_ENTRY)&_ZN6S214C43v92Ev,
  (VTBL_ENTRY)&_ZN6S214C43v93Ev,
  (VTBL_ENTRY)&_ZN6S214C43v94Ev,
  (VTBL_ENTRY)&_ZN6S214C43v95Ev,
  (VTBL_ENTRY)&_ZN6S214C43v96Ev,
  (VTBL_ENTRY)&_ZN6S214C43v97Ev,
  (VTBL_ENTRY)&_ZN6S214C43v98Ev,
  (VTBL_ENTRY)&_ZN6S214C43v99Ev,
  (VTBL_ENTRY)&_ZN6S214C44v100Ev,
  (VTBL_ENTRY)&_ZN6S214C44v101Ev,
  (VTBL_ENTRY)&_ZN6S214C44v102Ev,
  (VTBL_ENTRY)&_ZN6S214C44v103Ev,
  (VTBL_ENTRY)&_ZN6S214C44v104Ev,
  (VTBL_ENTRY)&_ZN6S214C44v105Ev,
  (VTBL_ENTRY)&_ZN6S214C44v106Ev,
  (VTBL_ENTRY)&_ZN6S214C44v107Ev,
  (VTBL_ENTRY)&_ZN6S214C44v108Ev,
  (VTBL_ENTRY)&_ZN6S214C44v109Ev,
  (VTBL_ENTRY)&_ZN6S214C34v110Ev,
  (VTBL_ENTRY)&_ZN6S214C34v111Ev,
  (VTBL_ENTRY)&_ZN6S214C34v112Ev,
  (VTBL_ENTRY)&_ZN6S214C34v113Ev,
  (VTBL_ENTRY)&_ZN6S214C24v114Ev,
  (VTBL_ENTRY)&_ZN6S214C24v115Ev,
  (VTBL_ENTRY)&_ZN6S214C12v1Ev,
  (VTBL_ENTRY)&_ZN6S214C12v2Ev,
  (VTBL_ENTRY)&_ZN6S214C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S214C1[];
extern  VTBL_ENTRY _ZTV6S214C1[];
Class_Descriptor cd_S214C1 = {  "S214C1", // class name
  bases_S214C1, 5,
  &(vtc_S214C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,228), // object size
  NSPAIRA(_ZTI6S214C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S214C1),119, //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  S213C6  {
  int s213c6f0;
  __tsi64 s213c6f1;
  void *s213c6f2[4];
  int s213c6f3[2];
  void *s213c6f4;
  ::S1503C5_nt s213c6f5;
  void *s213c6f6[2];
  virtual  ~S213C6(); // _ZN6S213C6D1Ev
  virtual void  v4(); // _ZN6S213C62v4Ev
  virtual void  v5(); // _ZN6S213C62v5Ev
  virtual void  v6(); // _ZN6S213C62v6Ev
  virtual void  v7(); // _ZN6S213C62v7Ev
  virtual void  v8(); // _ZN6S213C62v8Ev
  virtual void  v9(); // _ZN6S213C62v9Ev
  virtual void  v10(); // _ZN6S213C63v10Ev
  virtual void  v11(); // _ZN6S213C63v11Ev
  virtual void  v12(); // _ZN6S213C63v12Ev
  virtual void  v13(); // _ZN6S213C63v13Ev
  virtual void  v14(); // _ZN6S213C63v14Ev
  virtual void  v15(); // _ZN6S213C63v15Ev
  virtual void  v16(); // _ZN6S213C63v16Ev
  virtual void  v17(); // _ZN6S213C63v17Ev
  virtual void  v18(); // _ZN6S213C63v18Ev
  virtual void  v19(); // _ZN6S213C63v19Ev
  virtual void  v20(); // _ZN6S213C63v20Ev
  virtual void  v21(); // _ZN6S213C63v21Ev
  virtual void  v22(); // _ZN6S213C63v22Ev
  virtual void  v23(); // _ZN6S213C63v23Ev
  virtual void  v24(); // _ZN6S213C63v24Ev
  virtual void  v25(); // _ZN6S213C63v25Ev
  virtual void  v26(); // _ZN6S213C63v26Ev
  virtual void  v27(); // _ZN6S213C63v27Ev
  virtual void  v28(); // _ZN6S213C63v28Ev
  virtual void  v29(); // _ZN6S213C63v29Ev
  virtual void  v30(); // _ZN6S213C63v30Ev
  virtual void  v31(); // _ZN6S213C63v31Ev
  virtual void  v32(); // _ZN6S213C63v32Ev
  virtual void  v33(); // _ZN6S213C63v33Ev
  virtual void  v34(); // _ZN6S213C63v34Ev
  virtual void  v35(); // _ZN6S213C63v35Ev
  virtual void  v36(); // _ZN6S213C63v36Ev
  virtual void  v37(); // _ZN6S213C63v37Ev
  virtual void  v38(); // _ZN6S213C63v38Ev
  virtual void  v39(); // _ZN6S213C63v39Ev
  virtual void  v40(); // _ZN6S213C63v40Ev
  virtual void  v41(); // _ZN6S213C63v41Ev
  virtual void  v42(); // _ZN6S213C63v42Ev
  virtual void  v43(); // _ZN6S213C63v43Ev
  virtual void  v44(); // _ZN6S213C63v44Ev
  virtual void  v45(); // _ZN6S213C63v45Ev
  virtual void  v46(); // _ZN6S213C63v46Ev
  virtual void  v47(); // _ZN6S213C63v47Ev
  virtual void  v48(); // _ZN6S213C63v48Ev
  virtual void  v49(); // _ZN6S213C63v49Ev
  virtual void  v50(); // _ZN6S213C63v50Ev
  virtual void  v51(); // _ZN6S213C63v51Ev
  virtual void  v52(); // _ZN6S213C63v52Ev
  virtual void  v53(); // _ZN6S213C63v53Ev
  virtual void  v54(); // _ZN6S213C63v54Ev
  virtual void  v55(); // _ZN6S213C63v55Ev
  virtual void  v56(); // _ZN6S213C63v56Ev
  virtual void  v57(); // _ZN6S213C63v57Ev
  virtual void  v58(); // _ZN6S213C63v58Ev
  virtual void  v59(); // _ZN6S213C63v59Ev
  virtual void  v60(); // _ZN6S213C63v60Ev
  virtual void  v61(); // _ZN6S213C63v61Ev
  virtual void  v62(); // _ZN6S213C63v62Ev
  virtual void  v63(); // _ZN6S213C63v63Ev
  virtual void  v64(); // _ZN6S213C63v64Ev
  virtual void  v65(); // _ZN6S213C63v65Ev
  virtual void  v66(); // _ZN6S213C63v66Ev
  virtual void  v67(); // _ZN6S213C63v67Ev
  S213C6(); // tgen
};
//SIG(-1 S213C6) 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]}


 S213C6 ::~S213C6(){ note_dtor("S213C6", this);}
void  S213C6 ::v4(){vfunc_called(this, "_ZN6S213C62v4Ev");}
void  S213C6 ::v5(){vfunc_called(this, "_ZN6S213C62v5Ev");}
void  S213C6 ::v6(){vfunc_called(this, "_ZN6S213C62v6Ev");}
void  S213C6 ::v7(){vfunc_called(this, "_ZN6S213C62v7Ev");}
void  S213C6 ::v8(){vfunc_called(this, "_ZN6S213C62v8Ev");}
void  S213C6 ::v9(){vfunc_called(this, "_ZN6S213C62v9Ev");}
void  S213C6 ::v10(){vfunc_called(this, "_ZN6S213C63v10Ev");}
void  S213C6 ::v11(){vfunc_called(this, "_ZN6S213C63v11Ev");}
void  S213C6 ::v12(){vfunc_called(this, "_ZN6S213C63v12Ev");}
void  S213C6 ::v13(){vfunc_called(this, "_ZN6S213C63v13Ev");}
void  S213C6 ::v14(){vfunc_called(this, "_ZN6S213C63v14Ev");}
void  S213C6 ::v15(){vfunc_called(this, "_ZN6S213C63v15Ev");}
void  S213C6 ::v16(){vfunc_called(this, "_ZN6S213C63v16Ev");}
void  S213C6 ::v17(){vfunc_called(this, "_ZN6S213C63v17Ev");}
void  S213C6 ::v18(){vfunc_called(this, "_ZN6S213C63v18Ev");}
void  S213C6 ::v19(){vfunc_called(this, "_ZN6S213C63v19Ev");}
void  S213C6 ::v20(){vfunc_called(this, "_ZN6S213C63v20Ev");}
void  S213C6 ::v21(){vfunc_called(this, "_ZN6S213C63v21Ev");}
void  S213C6 ::v22(){vfunc_called(this, "_ZN6S213C63v22Ev");}
void  S213C6 ::v23(){vfunc_called(this, "_ZN6S213C63v23Ev");}
void  S213C6 ::v24(){vfunc_called(this, "_ZN6S213C63v24Ev");}
void  S213C6 ::v25(){vfunc_called(this, "_ZN6S213C63v25Ev");}
void  S213C6 ::v26(){vfunc_called(this, "_ZN6S213C63v26Ev");}
void  S213C6 ::v27(){vfunc_called(this, "_ZN6S213C63v27Ev");}
void  S213C6 ::v28(){vfunc_called(this, "_ZN6S213C63v28Ev");}
void  S213C6 ::v29(){vfunc_called(this, "_ZN6S213C63v29Ev");}
void  S213C6 ::v30(){vfunc_called(this, "_ZN6S213C63v30Ev");}
void  S213C6 ::v31(){vfunc_called(this, "_ZN6S213C63v31Ev");}
void  S213C6 ::v32(){vfunc_called(this, "_ZN6S213C63v32Ev");}
void  S213C6 ::v33(){vfunc_called(this, "_ZN6S213C63v33Ev");}
void  S213C6 ::v34(){vfunc_called(this, "_ZN6S213C63v34Ev");}
void  S213C6 ::v35(){vfunc_called(this, "_ZN6S213C63v35Ev");}
void  S213C6 ::v36(){vfunc_called(this, "_ZN6S213C63v36Ev");}
void  S213C6 ::v37(){vfunc_called(this, "_ZN6S213C63v37Ev");}
void  S213C6 ::v38(){vfunc_called(this, "_ZN6S213C63v38Ev");}
void  S213C6 ::v39(){vfunc_called(this, "_ZN6S213C63v39Ev");}
void  S213C6 ::v40(){vfunc_called(this, "_ZN6S213C63v40Ev");}
void  S213C6 ::v41(){vfunc_called(this, "_ZN6S213C63v41Ev");}
void  S213C6 ::v42(){vfunc_called(this, "_ZN6S213C63v42Ev");}
void  S213C6 ::v43(){vfunc_called(this, "_ZN6S213C63v43Ev");}
void  S213C6 ::v44(){vfunc_called(this, "_ZN6S213C63v44Ev");}
void  S213C6 ::v45(){vfunc_called(this, "_ZN6S213C63v45Ev");}
void  S213C6 ::v46(){vfunc_called(this, "_ZN6S213C63v46Ev");}
void  S213C6 ::v47(){vfunc_called(this, "_ZN6S213C63v47Ev");}
void  S213C6 ::v48(){vfunc_called(this, "_ZN6S213C63v48Ev");}
void  S213C6 ::v49(){vfunc_called(this, "_ZN6S213C63v49Ev");}
void  S213C6 ::v50(){vfunc_called(this, "_ZN6S213C63v50Ev");}
void  S213C6 ::v51(){vfunc_called(this, "_ZN6S213C63v51Ev");}
void  S213C6 ::v52(){vfunc_called(this, "_ZN6S213C63v52Ev");}
void  S213C6 ::v53(){vfunc_called(this, "_ZN6S213C63v53Ev");}
void  S213C6 ::v54(){vfunc_called(this, "_ZN6S213C63v54Ev");}
void  S213C6 ::v55(){vfunc_called(this, "_ZN6S213C63v55Ev");}
void  S213C6 ::v56(){vfunc_called(this, "_ZN6S213C63v56Ev");}
void  S213C6 ::v57(){vfunc_called(this, "_ZN6S213C63v57Ev");}
void  S213C6 ::v58(){vfunc_called(this, "_ZN6S213C63v58Ev");}
void  S213C6 ::v59(){vfunc_called(this, "_ZN6S213C63v59Ev");}
void  S213C6 ::v60(){vfunc_called(this, "_ZN6S213C63v60Ev");}
void  S213C6 ::v61(){vfunc_called(this, "_ZN6S213C63v61Ev");}
void  S213C6 ::v62(){vfunc_called(this, "_ZN6S213C63v62Ev");}
void  S213C6 ::v63(){vfunc_called(this, "_ZN6S213C63v63Ev");}
void  S213C6 ::v64(){vfunc_called(this, "_ZN6S213C63v64Ev");}
void  S213C6 ::v65(){vfunc_called(this, "_ZN6S213C63v65Ev");}
void  S213C6 ::v66(){vfunc_called(this, "_ZN6S213C63v66Ev");}
void  S213C6 ::v67(){vfunc_called(this, "_ZN6S213C63v67Ev");}
S213C6 ::S213C6(){ note_ctor("S213C6", this);} // tgen

static void Test_S213C6()
{
  extern Class_Descriptor cd_S213C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S213C6, buf);
    S213C6 *dp, &lv = *(dp=new (buf) S213C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S213C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S213C6)");
    check_field_offset(lv, s213c6f0, ABISELECT(8,4), "S213C6.s213c6f0");
    check_field_offset(lv, s213c6f1, ABISELECT(16,8), "S213C6.s213c6f1");
    check_field_offset(lv, s213c6f2, ABISELECT(24,16), "S213C6.s213c6f2");
    check_field_offset(lv, s213c6f3, ABISELECT(56,32), "S213C6.s213c6f3");
    check_field_offset(lv, s213c6f4, ABISELECT(64,40), "S213C6.s213c6f4");
    check_field_offset(lv, s213c6f5, ABISELECT(72,44), "S213C6.s213c6f5");
    check_field_offset(lv, s213c6f6, ABISELECT(80,52), "S213C6.s213c6f6");
    test_class_info(&lv, &cd_S213C6);
    dp->~S213C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS213C6(Test_S213C6, "S213C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S213C6C1Ev();
extern void _ZN6S213C6D1Ev();
Name_Map name_map_S213C6[] = {
  NSPAIR(_ZN6S213C6C1Ev),
  NSPAIR(_ZN6S213C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S213C6[];
extern void _ZN6S213C6D1Ev();
extern void _ZN6S213C6D0Ev();
extern void _ZN6S213C62v4Ev();
extern void _ZN6S213C62v5Ev();
extern void _ZN6S213C62v6Ev();
extern void _ZN6S213C62v7Ev();
extern void _ZN6S213C62v8Ev();
extern void _ZN6S213C62v9Ev();
extern void _ZN6S213C63v10Ev();
extern void _ZN6S213C63v11Ev();
extern void _ZN6S213C63v12Ev();
extern void _ZN6S213C63v13Ev();
extern void _ZN6S213C63v14Ev();
extern void _ZN6S213C63v15Ev();
extern void _ZN6S213C63v16Ev();
extern void _ZN6S213C63v17Ev();
extern void _ZN6S213C63v18Ev();
extern void _ZN6S213C63v19Ev();
extern void _ZN6S213C63v20Ev();
extern void _ZN6S213C63v21Ev();
extern void _ZN6S213C63v22Ev();
extern void _ZN6S213C63v23Ev();
extern void _ZN6S213C63v24Ev();
extern void _ZN6S213C63v25Ev();
extern void _ZN6S213C63v26Ev();
extern void _ZN6S213C63v27Ev();
extern void _ZN6S213C63v28Ev();
extern void _ZN6S213C63v29Ev();
extern void _ZN6S213C63v30Ev();
extern void _ZN6S213C63v31Ev();
extern void _ZN6S213C63v32Ev();
extern void _ZN6S213C63v33Ev();
extern void _ZN6S213C63v34Ev();
extern void _ZN6S213C63v35Ev();
extern void _ZN6S213C63v36Ev();
extern void _ZN6S213C63v37Ev();
extern void _ZN6S213C63v38Ev();
extern void _ZN6S213C63v39Ev();
extern void _ZN6S213C63v40Ev();
extern void _ZN6S213C63v41Ev();
extern void _ZN6S213C63v42Ev();
extern void _ZN6S213C63v43Ev();
extern void _ZN6S213C63v44Ev();
extern void _ZN6S213C63v45Ev();
extern void _ZN6S213C63v46Ev();
extern void _ZN6S213C63v47Ev();
extern void _ZN6S213C63v48Ev();
extern void _ZN6S213C63v49Ev();
extern void _ZN6S213C63v50Ev();
extern void _ZN6S213C63v51Ev();
extern void _ZN6S213C63v52Ev();
extern void _ZN6S213C63v53Ev();
extern void _ZN6S213C63v54Ev();
extern void _ZN6S213C63v55Ev();
extern void _ZN6S213C63v56Ev();
extern void _ZN6S213C63v57Ev();
extern void _ZN6S213C63v58Ev();
extern void _ZN6S213C63v59Ev();
extern void _ZN6S213C63v60Ev();
extern void _ZN6S213C63v61Ev();
extern void _ZN6S213C63v62Ev();
extern void _ZN6S213C63v63Ev();
extern void _ZN6S213C63v64Ev();
extern void _ZN6S213C63v65Ev();
extern void _ZN6S213C63v66Ev();
extern void _ZN6S213C63v67Ev();
static  VTBL_ENTRY vtc_S213C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S213C6[0]),
  (VTBL_ENTRY)&_ZN6S213C6D1Ev,
  (VTBL_ENTRY)&_ZN6S213C6D0Ev,
  (VTBL_ENTRY)&_ZN6S213C62v4Ev,
  (VTBL_ENTRY)&_ZN6S213C62v5Ev,
  (VTBL_ENTRY)&_ZN6S213C62v6Ev,
  (VTBL_ENTRY)&_ZN6S213C62v7Ev,
  (VTBL_ENTRY)&_ZN6S213C62v8Ev,
  (VTBL_ENTRY)&_ZN6S213C62v9Ev,
  (VTBL_ENTRY)&_ZN6S213C63v10Ev,
  (VTBL_ENTRY)&_ZN6S213C63v11Ev,
  (VTBL_ENTRY)&_ZN6S213C63v12Ev,
  (VTBL_ENTRY)&_ZN6S213C63v13Ev,
  (VTBL_ENTRY)&_ZN6S213C63v14Ev,
  (VTBL_ENTRY)&_ZN6S213C63v15Ev,
  (VTBL_ENTRY)&_ZN6S213C63v16Ev,
  (VTBL_ENTRY)&_ZN6S213C63v17Ev,
  (VTBL_ENTRY)&_ZN6S213C63v18Ev,
  (VTBL_ENTRY)&_ZN6S213C63v19Ev,
  (VTBL_ENTRY)&_ZN6S213C63v20Ev,
  (VTBL_ENTRY)&_ZN6S213C63v21Ev,
  (VTBL_ENTRY)&_ZN6S213C63v22Ev,
  (VTBL_ENTRY)&_ZN6S213C63v23Ev,
  (VTBL_ENTRY)&_ZN6S213C63v24Ev,
  (VTBL_ENTRY)&_ZN6S213C63v25Ev,
  (VTBL_ENTRY)&_ZN6S213C63v26Ev,
  (VTBL_ENTRY)&_ZN6S213C63v27Ev,
  (VTBL_ENTRY)&_ZN6S213C63v28Ev,
  (VTBL_ENTRY)&_ZN6S213C63v29Ev,
  (VTBL_ENTRY)&_ZN6S213C63v30Ev,
  (VTBL_ENTRY)&_ZN6S213C63v31Ev,
  (VTBL_ENTRY)&_ZN6S213C63v32Ev,
  (VTBL_ENTRY)&_ZN6S213C63v33Ev,
  (VTBL_ENTRY)&_ZN6S213C63v34Ev,
  (VTBL_ENTRY)&_ZN6S213C63v35Ev,
  (VTBL_ENTRY)&_ZN6S213C63v36Ev,
  (VTBL_ENTRY)&_ZN6S213C63v37Ev,
  (VTBL_ENTRY)&_ZN6S213C63v38Ev,
  (VTBL_ENTRY)&_ZN6S213C63v39Ev,
  (VTBL_ENTRY)&_ZN6S213C63v40Ev,
  (VTBL_ENTRY)&_ZN6S213C63v41Ev,
  (VTBL_ENTRY)&_ZN6S213C63v42Ev,
  (VTBL_ENTRY)&_ZN6S213C63v43Ev,
  (VTBL_ENTRY)&_ZN6S213C63v44Ev,
  (VTBL_ENTRY)&_ZN6S213C63v45Ev,
  (VTBL_ENTRY)&_ZN6S213C63v46Ev,
  (VTBL_ENTRY)&_ZN6S213C63v47Ev,
  (VTBL_ENTRY)&_ZN6S213C63v48Ev,
  (VTBL_ENTRY)&_ZN6S213C63v49Ev,
  (VTBL_ENTRY)&_ZN6S213C63v50Ev,
  (VTBL_ENTRY)&_ZN6S213C63v51Ev,
  (VTBL_ENTRY)&_ZN6S213C63v52Ev,
  (VTBL_ENTRY)&_ZN6S213C63v53Ev,
  (VTBL_ENTRY)&_ZN6S213C63v54Ev,
  (VTBL_ENTRY)&_ZN6S213C63v55Ev,
  (VTBL_ENTRY)&_ZN6S213C63v56Ev,
  (VTBL_ENTRY)&_ZN6S213C63v57Ev,
  (VTBL_ENTRY)&_ZN6S213C63v58Ev,
  (VTBL_ENTRY)&_ZN6S213C63v59Ev,
  (VTBL_ENTRY)&_ZN6S213C63v60Ev,
  (VTBL_ENTRY)&_ZN6S213C63v61Ev,
  (VTBL_ENTRY)&_ZN6S213C63v62Ev,
  (VTBL_ENTRY)&_ZN6S213C63v63Ev,
  (VTBL_ENTRY)&_ZN6S213C63v64Ev,
  (VTBL_ENTRY)&_ZN6S213C63v65Ev,
  (VTBL_ENTRY)&_ZN6S213C63v66Ev,
  (VTBL_ENTRY)&_ZN6S213C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S213C6[];
extern  VTBL_ENTRY _ZTV6S213C6[];
Class_Descriptor cd_S213C6 = {  "S213C6", // class name
  0,0,//no base classes
  &(vtc_S213C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S213C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S213C6),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  S213C5  : S213C6 {
  int s213c5f0[2];
  void *s213c5f1;
  int s213c5f2[2];
  ::S210C8_nt s213c5f3;
  ::S210C8_nt s213c5f4;
  ::S629C14 s213c5f5;
  ::S210C8_nt s213c5f6;
  unsigned int s213c5f7:1;
  unsigned int s213c5f8:1;
  unsigned int s213c5f9:1;
  unsigned int s213c5f10:1;
  unsigned int s213c5f11:1;
  int s213c5f12[2];
  virtual  ~S213C5(); // _ZN6S213C5D1Ev
  virtual void  v68(); // _ZN6S213C53v68Ev
  virtual void  v69(); // _ZN6S213C53v69Ev
  virtual void  v70(); // _ZN6S213C53v70Ev
  virtual void  v71(); // _ZN6S213C53v71Ev
  virtual void  v72(); // _ZN6S213C53v72Ev
  virtual void  v73(); // _ZN6S213C53v73Ev
  virtual void  v74(); // _ZN6S213C53v74Ev
  virtual void  v75(); // _ZN6S213C53v75Ev
  virtual void  v76(); // _ZN6S213C53v76Ev
  virtual void  v77(); // _ZN6S213C53v77Ev
  virtual void  v78(); // _ZN6S213C53v78Ev
  virtual void  v79(); // _ZN6S213C53v79Ev
  virtual void  v80(); // _ZN6S213C53v80Ev
  virtual void  v81(); // _ZN6S213C53v81Ev
  virtual void  v82(); // _ZN6S213C53v82Ev
  virtual void  v83(); // _ZN6S213C53v83Ev
  virtual void  v84(); // _ZN6S213C53v84Ev
  virtual void  v85(); // _ZN6S213C53v85Ev
  virtual void  v86(); // _ZN6S213C53v86Ev
  virtual void  v87(); // _ZN6S213C53v87Ev
  virtual void  v88(); // _ZN6S213C53v88Ev
  virtual void  v89(); // _ZN6S213C53v89Ev
  S213C5(); // tgen
};
//SIG(-1 S213C5) 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]}


 S213C5 ::~S213C5(){ note_dtor("S213C5", this);}
void  S213C5 ::v68(){vfunc_called(this, "_ZN6S213C53v68Ev");}
void  S213C5 ::v69(){vfunc_called(this, "_ZN6S213C53v69Ev");}
void  S213C5 ::v70(){vfunc_called(this, "_ZN6S213C53v70Ev");}
void  S213C5 ::v71(){vfunc_called(this, "_ZN6S213C53v71Ev");}
void  S213C5 ::v72(){vfunc_called(this, "_ZN6S213C53v72Ev");}
void  S213C5 ::v73(){vfunc_called(this, "_ZN6S213C53v73Ev");}
void  S213C5 ::v74(){vfunc_called(this, "_ZN6S213C53v74Ev");}
void  S213C5 ::v75(){vfunc_called(this, "_ZN6S213C53v75Ev");}
void  S213C5 ::v76(){vfunc_called(this, "_ZN6S213C53v76Ev");}
void  S213C5 ::v77(){vfunc_called(this, "_ZN6S213C53v77Ev");}
void  S213C5 ::v78(){vfunc_called(this, "_ZN6S213C53v78Ev");}
void  S213C5 ::v79(){vfunc_called(this, "_ZN6S213C53v79Ev");}
void  S213C5 ::v80(){vfunc_called(this, "_ZN6S213C53v80Ev");}
void  S213C5 ::v81(){vfunc_called(this, "_ZN6S213C53v81Ev");}
void  S213C5 ::v82(){vfunc_called(this, "_ZN6S213C53v82Ev");}
void  S213C5 ::v83(){vfunc_called(this, "_ZN6S213C53v83Ev");}
void  S213C5 ::v84(){vfunc_called(this, "_ZN6S213C53v84Ev");}
void  S213C5 ::v85(){vfunc_called(this, "_ZN6S213C53v85Ev");}
void  S213C5 ::v86(){vfunc_called(this, "_ZN6S213C53v86Ev");}
void  S213C5 ::v87(){vfunc_called(this, "_ZN6S213C53v87Ev");}
void  S213C5 ::v88(){vfunc_called(this, "_ZN6S213C53v88Ev");}
void  S213C5 ::v89(){vfunc_called(this, "_ZN6S213C53v89Ev");}
S213C5 ::S213C5(){ note_ctor("S213C5", this);} // tgen

static void Test_S213C5()
{
  extern Class_Descriptor cd_S213C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S213C5, buf);
    S213C5 *dp, &lv = *(dp=new (buf) S213C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S213C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S213C5)");
    check_base_class_offset(lv, (S213C6*), 0, "S213C5");
    check_field_offset(lv, s213c5f0, ABISELECT(96,60), "S213C5.s213c5f0");
    check_field_offset(lv, s213c5f1, ABISELECT(104,68), "S213C5.s213c5f1");
    check_field_offset(lv, s213c5f2, ABISELECT(112,72), "S213C5.s213c5f2");
    check_field_offset(lv, s213c5f3, ABISELECT(120,80), "S213C5.s213c5f3");
    check_field_offset(lv, s213c5f4, ABISELECT(136,92), "S213C5.s213c5f4");
    check_field_offset(lv, s213c5f5, ABISELECT(152,104), "S213C5.s213c5f5");
    check_field_offset(lv, s213c5f6, ABISELECT(160,108), "S213C5.s213c5f6");
    set_bf_and_test(lv, s213c5f7, ABISELECT(176,120), 0, 1, 1, "S213C5");
    set_bf_and_test(lv, s213c5f8, ABISELECT(176,120), 1, 1, 1, "S213C5");
    set_bf_and_test(lv, s213c5f9, ABISELECT(176,120), 2, 1, 1, "S213C5");
    set_bf_and_test(lv, s213c5f10, ABISELECT(176,120), 3, 1, 1, "S213C5");
    set_bf_and_test(lv, s213c5f11, ABISELECT(176,120), 4, 1, 1, "S213C5");
    check_field_offset(lv, s213c5f12, ABISELECT(180,124), "S213C5.s213c5f12");
    test_class_info(&lv, &cd_S213C5);
    dp->~S213C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS213C5(Test_S213C5, "S213C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S213C5C1Ev();
extern void _ZN6S213C5D1Ev();
Name_Map name_map_S213C5[] = {
  NSPAIR(_ZN6S213C5C1Ev),
  NSPAIR(_ZN6S213C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S213C6;
extern VTBL_ENTRY _ZTI6S213C6[];
extern  VTBL_ENTRY _ZTV6S213C6[];
static Base_Class bases_S213C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S213C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI6S213C5[];
extern void _ZN6S213C5D1Ev();
extern void _ZN6S213C5D0Ev();
extern void _ZN6S213C62v4Ev();
extern void _ZN6S213C62v5Ev();
extern void _ZN6S213C62v6Ev();
extern void _ZN6S213C62v7Ev();
extern void _ZN6S213C62v8Ev();
extern void _ZN6S213C62v9Ev();
extern void _ZN6S213C63v10Ev();
extern void _ZN6S213C63v11Ev();
extern void _ZN6S213C63v12Ev();
extern void _ZN6S213C63v13Ev();
extern void _ZN6S213C63v14Ev();
extern void _ZN6S213C63v15Ev();
extern void _ZN6S213C63v16Ev();
extern void _ZN6S213C63v17Ev();
extern void _ZN6S213C63v18Ev();
extern void _ZN6S213C63v19Ev();
extern void _ZN6S213C63v20Ev();
extern void _ZN6S213C63v21Ev();
extern void _ZN6S213C63v22Ev();
extern void _ZN6S213C63v23Ev();
extern void _ZN6S213C63v24Ev();
extern void _ZN6S213C63v25Ev();
extern void _ZN6S213C63v26Ev();
extern void _ZN6S213C63v27Ev();
extern void _ZN6S213C63v28Ev();
extern void _ZN6S213C63v29Ev();
extern void _ZN6S213C63v30Ev();
extern void _ZN6S213C63v31Ev();
extern void _ZN6S213C63v32Ev();
extern void _ZN6S213C63v33Ev();
extern void _ZN6S213C63v34Ev();
extern void _ZN6S213C63v35Ev();
extern void _ZN6S213C63v36Ev();
extern void _ZN6S213C63v37Ev();
extern void _ZN6S213C63v38Ev();
extern void _ZN6S213C63v39Ev();
extern void _ZN6S213C63v40Ev();
extern void _ZN6S213C63v41Ev();
extern void _ZN6S213C63v42Ev();
extern void _ZN6S213C63v43Ev();
extern void _ZN6S213C63v44Ev();
extern void _ZN6S213C63v45Ev();
extern void _ZN6S213C63v46Ev();
extern void _ZN6S213C63v47Ev();
extern void _ZN6S213C63v48Ev();
extern void _ZN6S213C63v49Ev();
extern void _ZN6S213C63v50Ev();
extern void _ZN6S213C63v51Ev();
extern void _ZN6S213C63v52Ev();
extern void _ZN6S213C63v53Ev();
extern void _ZN6S213C63v54Ev();
extern void _ZN6S213C63v55Ev();
extern void _ZN6S213C63v56Ev();
extern void _ZN6S213C63v57Ev();
extern void _ZN6S213C63v58Ev();
extern void _ZN6S213C63v59Ev();
extern void _ZN6S213C63v60Ev();
extern void _ZN6S213C63v61Ev();
extern void _ZN6S213C63v62Ev();
extern void _ZN6S213C63v63Ev();
extern void _ZN6S213C63v64Ev();
extern void _ZN6S213C63v65Ev();
extern void _ZN6S213C63v66Ev();
extern void _ZN6S213C63v67Ev();
extern void _ZN6S213C53v68Ev();
extern void _ZN6S213C53v69Ev();
extern void _ZN6S213C53v70Ev();
extern void _ZN6S213C53v71Ev();
extern void _ZN6S213C53v72Ev();
extern void _ZN6S213C53v73Ev();
extern void _ZN6S213C53v74Ev();
extern void _ZN6S213C53v75Ev();
extern void _ZN6S213C53v76Ev();
extern void _ZN6S213C53v77Ev();
extern void _ZN6S213C53v78Ev();
extern void _ZN6S213C53v79Ev();
extern void _ZN6S213C53v80Ev();
extern void _ZN6S213C53v81Ev();
extern void _ZN6S213C53v82Ev();
extern void _ZN6S213C53v83Ev();
extern void _ZN6S213C53v84Ev();
extern void _ZN6S213C53v85Ev();
extern void _ZN6S213C53v86Ev();
extern void _ZN6S213C53v87Ev();
extern void _ZN6S213C53v88Ev();
extern void _ZN6S213C53v89Ev();
static  VTBL_ENTRY vtc_S213C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S213C5[0]),
  (VTBL_ENTRY)&_ZN6S213C5D1Ev,
  (VTBL_ENTRY)&_ZN6S213C5D0Ev,
  (VTBL_ENTRY)&_ZN6S213C62v4Ev,
  (VTBL_ENTRY)&_ZN6S213C62v5Ev,
  (VTBL_ENTRY)&_ZN6S213C62v6Ev,
  (VTBL_ENTRY)&_ZN6S213C62v7Ev,
  (VTBL_ENTRY)&_ZN6S213C62v8Ev,
  (VTBL_ENTRY)&_ZN6S213C62v9Ev,
  (VTBL_ENTRY)&_ZN6S213C63v10Ev,
  (VTBL_ENTRY)&_ZN6S213C63v11Ev,
  (VTBL_ENTRY)&_ZN6S213C63v12Ev,
  (VTBL_ENTRY)&_ZN6S213C63v13Ev,
  (VTBL_ENTRY)&_ZN6S213C63v14Ev,
  (VTBL_ENTRY)&_ZN6S213C63v15Ev,
  (VTBL_ENTRY)&_ZN6S213C63v16Ev,
  (VTBL_ENTRY)&_ZN6S213C63v17Ev,
  (VTBL_ENTRY)&_ZN6S213C63v18Ev,
  (VTBL_ENTRY)&_ZN6S213C63v19Ev,
  (VTBL_ENTRY)&_ZN6S213C63v20Ev,
  (VTBL_ENTRY)&_ZN6S213C63v21Ev,
  (VTBL_ENTRY)&_ZN6S213C63v22Ev,
  (VTBL_ENTRY)&_ZN6S213C63v23Ev,
  (VTBL_ENTRY)&_ZN6S213C63v24Ev,
  (VTBL_ENTRY)&_ZN6S213C63v25Ev,
  (VTBL_ENTRY)&_ZN6S213C63v26Ev,
  (VTBL_ENTRY)&_ZN6S213C63v27Ev,
  (VTBL_ENTRY)&_ZN6S213C63v28Ev,
  (VTBL_ENTRY)&_ZN6S213C63v29Ev,
  (VTBL_ENTRY)&_ZN6S213C63v30Ev,
  (VTBL_ENTRY)&_ZN6S213C63v31Ev,
  (VTBL_ENTRY)&_ZN6S213C63v32Ev,
  (VTBL_ENTRY)&_ZN6S213C63v33Ev,
  (VTBL_ENTRY)&_ZN6S213C63v34Ev,
  (VTBL_ENTRY)&_ZN6S213C63v35Ev,
  (VTBL_ENTRY)&_ZN6S213C63v36Ev,
  (VTBL_ENTRY)&_ZN6S213C63v37Ev,
  (VTBL_ENTRY)&_ZN6S213C63v38Ev,
  (VTBL_ENTRY)&_ZN6S213C63v39Ev,
  (VTBL_ENTRY)&_ZN6S213C63v40Ev,
  (VTBL_ENTRY)&_ZN6S213C63v41Ev,
  (VTBL_ENTRY)&_ZN6S213C63v42Ev,
  (VTBL_ENTRY)&_ZN6S213C63v43Ev,
  (VTBL_ENTRY)&_ZN6S213C63v44Ev,
  (VTBL_ENTRY)&_ZN6S213C63v45Ev,
  (VTBL_ENTRY)&_ZN6S213C63v46Ev,
  (VTBL_ENTRY)&_ZN6S213C63v47Ev,
  (VTBL_ENTRY)&_ZN6S213C63v48Ev,
  (VTBL_ENTRY)&_ZN6S213C63v49Ev,
  (VTBL_ENTRY)&_ZN6S213C63v50Ev,
  (VTBL_ENTRY)&_ZN6S213C63v51Ev,
  (VTBL_ENTRY)&_ZN6S213C63v52Ev,
  (VTBL_ENTRY)&_ZN6S213C63v53Ev,
  (VTBL_ENTRY)&_ZN6S213C63v54Ev,
  (VTBL_ENTRY)&_ZN6S213C63v55Ev,
  (VTBL_ENTRY)&_ZN6S213C63v56Ev,
  (VTBL_ENTRY)&_ZN6S213C63v57Ev,
  (VTBL_ENTRY)&_ZN6S213C63v58Ev,
  (VTBL_ENTRY)&_ZN6S213C63v59Ev,
  (VTBL_ENTRY)&_ZN6S213C63v60Ev,
  (VTBL_ENTRY)&_ZN6S213C63v61Ev,
  (VTBL_ENTRY)&_ZN6S213C63v62Ev,
  (VTBL_ENTRY)&_ZN6S213C63v63Ev,
  (VTBL_ENTRY)&_ZN6S213C63v64Ev,
  (VTBL_ENTRY)&_ZN6S213C63v65Ev,
  (VTBL_ENTRY)&_ZN6S213C63v66Ev,
  (VTBL_ENTRY)&_ZN6S213C63v67Ev,
  (VTBL_ENTRY)&_ZN6S213C53v68Ev,
  (VTBL_ENTRY)&_ZN6S213C53v69Ev,
  (VTBL_ENTRY)&_ZN6S213C53v70Ev,
  (VTBL_ENTRY)&_ZN6S213C53v71Ev,
  (VTBL_ENTRY)&_ZN6S213C53v72Ev,
  (VTBL_ENTRY)&_ZN6S213C53v73Ev,
  (VTBL_ENTRY)&_ZN6S213C53v74Ev,
  (VTBL_ENTRY)&_ZN6S213C53v75Ev,
  (VTBL_ENTRY)&_ZN6S213C53v76Ev,
  (VTBL_ENTRY)&_ZN6S213C53v77Ev,
  (VTBL_ENTRY)&_ZN6S213C53v78Ev,
  (VTBL_ENTRY)&_ZN6S213C53v79Ev,
  (VTBL_ENTRY)&_ZN6S213C53v80Ev,
  (VTBL_ENTRY)&_ZN6S213C53v81Ev,
  (VTBL_ENTRY)&_ZN6S213C53v82Ev,
  (VTBL_ENTRY)&_ZN6S213C53v83Ev,
  (VTBL_ENTRY)&_ZN6S213C53v84Ev,
  (VTBL_ENTRY)&_ZN6S213C53v85Ev,
  (VTBL_ENTRY)&_ZN6S213C53v86Ev,
  (VTBL_ENTRY)&_ZN6S213C53v87Ev,
  (VTBL_ENTRY)&_ZN6S213C53v88Ev,
  (VTBL_ENTRY)&_ZN6S213C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S213C5[];
extern  VTBL_ENTRY _ZTV6S213C5[];
Class_Descriptor cd_S213C5 = {  "S213C5", // class name
  bases_S213C5, 1,
  &(vtc_S213C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S213C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S213C5),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  S213C4  : S213C5 {
  unsigned int s213c4f0:1;
  unsigned int s213c4f1:1;
  unsigned int s213c4f2:1;
  ::S1503C28 s213c4f3;
  ::S1503C24 s213c4f4;
  ::S1503C18 s213c4f5;
  ::S1503C12 s213c4f6;
  int s213c4f7[3];
  virtual  ~S213C4(); // _ZN6S213C4D1Ev
  virtual void  v90(); // _ZN6S213C43v90Ev
  virtual void  v91(); // _ZN6S213C43v91Ev
  virtual void  v92(); // _ZN6S213C43v92Ev
  virtual void  v93(); // _ZN6S213C43v93Ev
  virtual void  v94(); // _ZN6S213C43v94Ev
  virtual void  v95(); // _ZN6S213C43v95Ev
  virtual void  v96(); // _ZN6S213C43v96Ev
  virtual void  v97(); // _ZN6S213C43v97Ev
  virtual void  v98(); // _ZN6S213C43v98Ev
  virtual void  v99(); // _ZN6S213C43v99Ev
  virtual void  v100(); // _ZN6S213C44v100Ev
  virtual void  v101(); // _ZN6S213C44v101Ev
  virtual void  v102(); // _ZN6S213C44v102Ev
  virtual void  v103(); // _ZN6S213C44v103Ev
  virtual void  v104(); // _ZN6S213C44v104Ev
  virtual void  v105(); // _ZN6S213C44v105Ev
  virtual void  v106(); // _ZN6S213C44v106Ev
  virtual void  v107(); // _ZN6S213C44v107Ev
  virtual void  v108(); // _ZN6S213C44v108Ev
  virtual void  v109(); // _ZN6S213C44v109Ev
  S213C4(); // tgen
};
//SIG(-1 S213C4) 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]}


 S213C4 ::~S213C4(){ note_dtor("S213C4", this);}
void  S213C4 ::v90(){vfunc_called(this, "_ZN6S213C43v90Ev");}
void  S213C4 ::v91(){vfunc_called(this, "_ZN6S213C43v91Ev");}
void  S213C4 ::v92(){vfunc_called(this, "_ZN6S213C43v92Ev");}
void  S213C4 ::v93(){vfunc_called(this, "_ZN6S213C43v93Ev");}
void  S213C4 ::v94(){vfunc_called(this, "_ZN6S213C43v94Ev");}
void  S213C4 ::v95(){vfunc_called(this, "_ZN6S213C43v95Ev");}
void  S213C4 ::v96(){vfunc_called(this, "_ZN6S213C43v96Ev");}
void  S213C4 ::v97(){vfunc_called(this, "_ZN6S213C43v97Ev");}
void  S213C4 ::v98(){vfunc_called(this, "_ZN6S213C43v98Ev");}
void  S213C4 ::v99(){vfunc_called(this, "_ZN6S213C43v99Ev");}
void  S213C4 ::v100(){vfunc_called(this, "_ZN6S213C44v100Ev");}
void  S213C4 ::v101(){vfunc_called(this, "_ZN6S213C44v101Ev");}
void  S213C4 ::v102(){vfunc_called(this, "_ZN6S213C44v102Ev");}
void  S213C4 ::v103(){vfunc_called(this, "_ZN6S213C44v103Ev");}
void  S213C4 ::v104(){vfunc_called(this, "_ZN6S213C44v104Ev");}
void  S213C4 ::v105(){vfunc_called(this, "_ZN6S213C44v105Ev");}
void  S213C4 ::v106(){vfunc_called(this, "_ZN6S213C44v106Ev");}
void  S213C4 ::v107(){vfunc_called(this, "_ZN6S213C44v107Ev");}
void  S213C4 ::v108(){vfunc_called(this, "_ZN6S213C44v108Ev");}
void  S213C4 ::v109(){vfunc_called(this, "_ZN6S213C44v109Ev");}
S213C4 ::S213C4(){ note_ctor("S213C4", this);} // tgen

static void Test_S213C4()
{
  extern Class_Descriptor cd_S213C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S213C4, buf);
    S213C4 *dp, &lv = *(dp=new (buf) S213C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S213C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S213C4)");
    check_base_class_offset(lv, (S213C6*)(S213C5*), 0, "S213C4");
    check_base_class_offset(lv, (S213C5*), 0, "S213C4");
    set_bf_and_test(lv, s213c4f0, ABISELECT(188,132), 0, 1, 1, "S213C4");
    set_bf_and_test(lv, s213c4f1, ABISELECT(188,132), 1, 1, 1, "S213C4");
    set_bf_and_test(lv, s213c4f2, ABISELECT(188,132), 2, 1, 1, "S213C4");
    check_field_offset(lv, s213c4f3, ABISELECT(192,136), "S213C4.s213c4f3");
    check_field_offset(lv, s213c4f4, ABISELECT(208,148), "S213C4.s213c4f4");
    check_field_offset(lv, s213c4f5, ABISELECT(224,160), "S213C4.s213c4f5");
    check_field_offset(lv, s213c4f6, ABISELECT(240,172), "S213C4.s213c4f6");
    check_field_offset(lv, s213c4f7, ABISELECT(256,184), "S213C4.s213c4f7");
    test_class_info(&lv, &cd_S213C4);
    dp->~S213C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS213C4(Test_S213C4, "S213C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S213C4C1Ev();
extern void _ZN6S213C4D1Ev();
Name_Map name_map_S213C4[] = {
  NSPAIR(_ZN6S213C4C1Ev),
  NSPAIR(_ZN6S213C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S213C6;
extern VTBL_ENTRY _ZTI6S213C6[];
extern  VTBL_ENTRY _ZTV6S213C6[];
extern Class_Descriptor cd_S213C5;
extern VTBL_ENTRY _ZTI6S213C5[];
extern  VTBL_ENTRY _ZTV6S213C5[];
static Base_Class bases_S213C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S213C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S213C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S213C4[];
extern void _ZN6S213C4D1Ev();
extern void _ZN6S213C4D0Ev();
extern void _ZN6S213C62v4Ev();
extern void _ZN6S213C62v5Ev();
extern void _ZN6S213C62v6Ev();
extern void _ZN6S213C62v7Ev();
extern void _ZN6S213C62v8Ev();
extern void _ZN6S213C62v9Ev();
extern void _ZN6S213C63v10Ev();
extern void _ZN6S213C63v11Ev();
extern void _ZN6S213C63v12Ev();
extern void _ZN6S213C63v13Ev();
extern void _ZN6S213C63v14Ev();
extern void _ZN6S213C63v15Ev();
extern void _ZN6S213C63v16Ev();
extern void _ZN6S213C63v17Ev();
extern void _ZN6S213C63v18Ev();
extern void _ZN6S213C63v19Ev();
extern void _ZN6S213C63v20Ev();
extern void _ZN6S213C63v21Ev();
extern void _ZN6S213C63v22Ev();
extern void _ZN6S213C63v23Ev();
extern void _ZN6S213C63v24Ev();
extern void _ZN6S213C63v25Ev();
extern void _ZN6S213C63v26Ev();
extern void _ZN6S213C63v27Ev();
extern void _ZN6S213C63v28Ev();
extern void _ZN6S213C63v29Ev();
extern void _ZN6S213C63v30Ev();
extern void _ZN6S213C63v31Ev();
extern void _ZN6S213C63v32Ev();
extern void _ZN6S213C63v33Ev();
extern void _ZN6S213C63v34Ev();
extern void _ZN6S213C63v35Ev();
extern void _ZN6S213C63v36Ev();
extern void _ZN6S213C63v37Ev();
extern void _ZN6S213C63v38Ev();
extern void _ZN6S213C63v39Ev();
extern void _ZN6S213C63v40Ev();
extern void _ZN6S213C63v41Ev();
extern void _ZN6S213C63v42Ev();
extern void _ZN6S213C63v43Ev();
extern void _ZN6S213C63v44Ev();
extern void _ZN6S213C63v45Ev();
extern void _ZN6S213C63v46Ev();
extern void _ZN6S213C63v47Ev();
extern void _ZN6S213C63v48Ev();
extern void _ZN6S213C63v49Ev();
extern void _ZN6S213C63v50Ev();
extern void _ZN6S213C63v51Ev();
extern void _ZN6S213C63v52Ev();
extern void _ZN6S213C63v53Ev();
extern void _ZN6S213C63v54Ev();
extern void _ZN6S213C63v55Ev();
extern void _ZN6S213C63v56Ev();
extern void _ZN6S213C63v57Ev();
extern void _ZN6S213C63v58Ev();
extern void _ZN6S213C63v59Ev();
extern void _ZN6S213C63v60Ev();
extern void _ZN6S213C63v61Ev();
extern void _ZN6S213C63v62Ev();
extern void _ZN6S213C63v63Ev();
extern void _ZN6S213C63v64Ev();
extern void _ZN6S213C63v65Ev();
extern void _ZN6S213C63v66Ev();
extern void _ZN6S213C63v67Ev();
extern void _ZN6S213C53v68Ev();
extern void _ZN6S213C53v69Ev();
extern void _ZN6S213C53v70Ev();
extern void _ZN6S213C53v71Ev();
extern void _ZN6S213C53v72Ev();
extern void _ZN6S213C53v73Ev();
extern void _ZN6S213C53v74Ev();
extern void _ZN6S213C53v75Ev();
extern void _ZN6S213C53v76Ev();
extern void _ZN6S213C53v77Ev();
extern void _ZN6S213C53v78Ev();
extern void _ZN6S213C53v79Ev();
extern void _ZN6S213C53v80Ev();
extern void _ZN6S213C53v81Ev();
extern void _ZN6S213C53v82Ev();
extern void _ZN6S213C53v83Ev();
extern void _ZN6S213C53v84Ev();
extern void _ZN6S213C53v85Ev();
extern void _ZN6S213C53v86Ev();
extern void _ZN6S213C53v87Ev();
extern void _ZN6S213C53v88Ev();
extern void _ZN6S213C53v89Ev();
extern void _ZN6S213C43v90Ev();
extern void _ZN6S213C43v91Ev();
extern void _ZN6S213C43v92Ev();
extern void _ZN6S213C43v93Ev();
extern void _ZN6S213C43v94Ev();
extern void _ZN6S213C43v95Ev();
extern void _ZN6S213C43v96Ev();
extern void _ZN6S213C43v97Ev();
extern void _ZN6S213C43v98Ev();
extern void _ZN6S213C43v99Ev();
extern void _ZN6S213C44v100Ev();
extern void _ZN6S213C44v101Ev();
extern void _ZN6S213C44v102Ev();
extern void _ZN6S213C44v103Ev();
extern void _ZN6S213C44v104Ev();
extern void _ZN6S213C44v105Ev();
extern void _ZN6S213C44v106Ev();
extern void _ZN6S213C44v107Ev();
extern void _ZN6S213C44v108Ev();
extern void _ZN6S213C44v109Ev();
static  VTBL_ENTRY vtc_S213C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S213C4[0]),
  (VTBL_ENTRY)&_ZN6S213C4D1Ev,
  (VTBL_ENTRY)&_ZN6S213C4D0Ev,
  (VTBL_ENTRY)&_ZN6S213C62v4Ev,
  (VTBL_ENTRY)&_ZN6S213C62v5Ev,
  (VTBL_ENTRY)&_ZN6S213C62v6Ev,
  (VTBL_ENTRY)&_ZN6S213C62v7Ev,
  (VTBL_ENTRY)&_ZN6S213C62v8Ev,
  (VTBL_ENTRY)&_ZN6S213C62v9Ev,
  (VTBL_ENTRY)&_ZN6S213C63v10Ev,
  (VTBL_ENTRY)&_ZN6S213C63v11Ev,
  (VTBL_ENTRY)&_ZN6S213C63v12Ev,
  (VTBL_ENTRY)&_ZN6S213C63v13Ev,
  (VTBL_ENTRY)&_ZN6S213C63v14Ev,
  (VTBL_ENTRY)&_ZN6S213C63v15Ev,
  (VTBL_ENTRY)&_ZN6S213C63v16Ev,
  (VTBL_ENTRY)&_ZN6S213C63v17Ev,
  (VTBL_ENTRY)&_ZN6S213C63v18Ev,
  (VTBL_ENTRY)&_ZN6S213C63v19Ev,
  (VTBL_ENTRY)&_ZN6S213C63v20Ev,
  (VTBL_ENTRY)&_ZN6S213C63v21Ev,
  (VTBL_ENTRY)&_ZN6S213C63v22Ev,
  (VTBL_ENTRY)&_ZN6S213C63v23Ev,
  (VTBL_ENTRY)&_ZN6S213C63v24Ev,
  (VTBL_ENTRY)&_ZN6S213C63v25Ev,
  (VTBL_ENTRY)&_ZN6S213C63v26Ev,
  (VTBL_ENTRY)&_ZN6S213C63v27Ev,
  (VTBL_ENTRY)&_ZN6S213C63v28Ev,
  (VTBL_ENTRY)&_ZN6S213C63v29Ev,
  (VTBL_ENTRY)&_ZN6S213C63v30Ev,
  (VTBL_ENTRY)&_ZN6S213C63v31Ev,
  (VTBL_ENTRY)&_ZN6S213C63v32Ev,
  (VTBL_ENTRY)&_ZN6S213C63v33Ev,
  (VTBL_ENTRY)&_ZN6S213C63v34Ev,
  (VTBL_ENTRY)&_ZN6S213C63v35Ev,
  (VTBL_ENTRY)&_ZN6S213C63v36Ev,
  (VTBL_ENTRY)&_ZN6S213C63v37Ev,
  (VTBL_ENTRY)&_ZN6S213C63v38Ev,
  (VTBL_ENTRY)&_ZN6S213C63v39Ev,
  (VTBL_ENTRY)&_ZN6S213C63v40Ev,
  (VTBL_ENTRY)&_ZN6S213C63v41Ev,
  (VTBL_ENTRY)&_ZN6S213C63v42Ev,
  (VTBL_ENTRY)&_ZN6S213C63v43Ev,
  (VTBL_ENTRY)&_ZN6S213C63v44Ev,
  (VTBL_ENTRY)&_ZN6S213C63v45Ev,
  (VTBL_ENTRY)&_ZN6S213C63v46Ev,
  (VTBL_ENTRY)&_ZN6S213C63v47Ev,
  (VTBL_ENTRY)&_ZN6S213C63v48Ev,
  (VTBL_ENTRY)&_ZN6S213C63v49Ev,
  (VTBL_ENTRY)&_ZN6S213C63v50Ev,
  (VTBL_ENTRY)&_ZN6S213C63v51Ev,
  (VTBL_ENTRY)&_ZN6S213C63v52Ev,
  (VTBL_ENTRY)&_ZN6S213C63v53Ev,
  (VTBL_ENTRY)&_ZN6S213C63v54Ev,
  (VTBL_ENTRY)&_ZN6S213C63v55Ev,
  (VTBL_ENTRY)&_ZN6S213C63v56Ev,
  (VTBL_ENTRY)&_ZN6S213C63v57Ev,
  (VTBL_ENTRY)&_ZN6S213C63v58Ev,
  (VTBL_ENTRY)&_ZN6S213C63v59Ev,
  (VTBL_ENTRY)&_ZN6S213C63v60Ev,
  (VTBL_ENTRY)&_ZN6S213C63v61Ev,
  (VTBL_ENTRY)&_ZN6S213C63v62Ev,
  (VTBL_ENTRY)&_ZN6S213C63v63Ev,
  (VTBL_ENTRY)&_ZN6S213C63v64Ev,
  (VTBL_ENTRY)&_ZN6S213C63v65Ev,
  (VTBL_ENTRY)&_ZN6S213C63v66Ev,
  (VTBL_ENTRY)&_ZN6S213C63v67Ev,
  (VTBL_ENTRY)&_ZN6S213C53v68Ev,
  (VTBL_ENTRY)&_ZN6S213C53v69Ev,
  (VTBL_ENTRY)&_ZN6S213C53v70Ev,
  (VTBL_ENTRY)&_ZN6S213C53v71Ev,
  (VTBL_ENTRY)&_ZN6S213C53v72Ev,
  (VTBL_ENTRY)&_ZN6S213C53v73Ev,
  (VTBL_ENTRY)&_ZN6S213C53v74Ev,
  (VTBL_ENTRY)&_ZN6S213C53v75Ev,
  (VTBL_ENTRY)&_ZN6S213C53v76Ev,
  (VTBL_ENTRY)&_ZN6S213C53v77Ev,
  (VTBL_ENTRY)&_ZN6S213C53v78Ev,
  (VTBL_ENTRY)&_ZN6S213C53v79Ev,
  (VTBL_ENTRY)&_ZN6S213C53v80Ev,
  (VTBL_ENTRY)&_ZN6S213C53v81Ev,
  (VTBL_ENTRY)&_ZN6S213C53v82Ev,
  (VTBL_ENTRY)&_ZN6S213C53v83Ev,
  (VTBL_ENTRY)&_ZN6S213C53v84Ev,
  (VTBL_ENTRY)&_ZN6S213C53v85Ev,
  (VTBL_ENTRY)&_ZN6S213C53v86Ev,
  (VTBL_ENTRY)&_ZN6S213C53v87Ev,
  (VTBL_ENTRY)&_ZN6S213C53v88Ev,
  (VTBL_ENTRY)&_ZN6S213C53v89Ev,
  (VTBL_ENTRY)&_ZN6S213C43v90Ev,
  (VTBL_ENTRY)&_ZN6S213C43v91Ev,
  (VTBL_ENTRY)&_ZN6S213C43v92Ev,
  (VTBL_ENTRY)&_ZN6S213C43v93Ev,
  (VTBL_ENTRY)&_ZN6S213C43v94Ev,
  (VTBL_ENTRY)&_ZN6S213C43v95Ev,
  (VTBL_ENTRY)&_ZN6S213C43v96Ev,
  (VTBL_ENTRY)&_ZN6S213C43v97Ev,
  (VTBL_ENTRY)&_ZN6S213C43v98Ev,
  (VTBL_ENTRY)&_ZN6S213C43v99Ev,
  (VTBL_ENTRY)&_ZN6S213C44v100Ev,
  (VTBL_ENTRY)&_ZN6S213C44v101Ev,
  (VTBL_ENTRY)&_ZN6S213C44v102Ev,
  (VTBL_ENTRY)&_ZN6S213C44v103Ev,
  (VTBL_ENTRY)&_ZN6S213C44v104Ev,
  (VTBL_ENTRY)&_ZN6S213C44v105Ev,
  (VTBL_ENTRY)&_ZN6S213C44v106Ev,
  (VTBL_ENTRY)&_ZN6S213C44v107Ev,
  (VTBL_ENTRY)&_ZN6S213C44v108Ev,
  (VTBL_ENTRY)&_ZN6S213C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S213C4[];
extern  VTBL_ENTRY _ZTV6S213C4[];
Class_Descriptor cd_S213C4 = {  "S213C4", // class name
  bases_S213C4, 2,
  &(vtc_S213C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S213C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S213C4),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  S213C3  : S213C4 {
  ::S1503C5_nt s213c3f0;
  unsigned int s213c3f1:1;
  ::S1503C6_nt s213c3f2;
  virtual  ~S213C3(); // _ZN6S213C3D1Ev
  virtual void  v110(); // _ZN6S213C34v110Ev
  virtual void  v111(); // _ZN6S213C34v111Ev
  virtual void  v112(); // _ZN6S213C34v112Ev
  virtual void  v113(); // _ZN6S213C34v113Ev
  S213C3(); // tgen
};
//SIG(-1 S213C3) 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}}}


 S213C3 ::~S213C3(){ note_dtor("S213C3", this);}
void  S213C3 ::v110(){vfunc_called(this, "_ZN6S213C34v110Ev");}
void  S213C3 ::v111(){vfunc_called(this, "_ZN6S213C34v111Ev");}
void  S213C3 ::v112(){vfunc_called(this, "_ZN6S213C34v112Ev");}
void  S213C3 ::v113(){vfunc_called(this, "_ZN6S213C34v113Ev");}
S213C3 ::S213C3(){ note_ctor("S213C3", this);} // tgen

static void Test_S213C3()
{
  extern Class_Descriptor cd_S213C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S213C3, buf);
    S213C3 *dp, &lv = *(dp=new (buf) S213C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S213C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S213C3)");
    check_base_class_offset(lv, (S213C6*)(S213C5*)(S213C4*), 0, "S213C3");
    check_base_class_offset(lv, (S213C5*)(S213C4*), 0, "S213C3");
    check_base_class_offset(lv, (S213C4*), 0, "S213C3");
    check_field_offset(lv, s213c3f0, ABISELECT(268,196), "S213C3.s213c3f0");
    set_bf_and_test(lv, s213c3f1, ABISELECT(276,204), 0, 1, 1, "S213C3");
    check_field_offset(lv, s213c3f2, ABISELECT(280,208), "S213C3.s213c3f2");
    test_class_info(&lv, &cd_S213C3);
    dp->~S213C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS213C3(Test_S213C3, "S213C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S213C3C1Ev();
extern void _ZN6S213C3D1Ev();
Name_Map name_map_S213C3[] = {
  NSPAIR(_ZN6S213C3C1Ev),
  NSPAIR(_ZN6S213C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S213C6;
extern VTBL_ENTRY _ZTI6S213C6[];
extern  VTBL_ENTRY _ZTV6S213C6[];
extern Class_Descriptor cd_S213C5;
extern VTBL_ENTRY _ZTI6S213C5[];
extern  VTBL_ENTRY _ZTV6S213C5[];
extern Class_Descriptor cd_S213C4;
extern VTBL_ENTRY _ZTI6S213C4[];
extern  VTBL_ENTRY _ZTV6S213C4[];
static Base_Class bases_S213C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S213C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S213C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S213C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S213C3[];
extern void _ZN6S213C3D1Ev();
extern void _ZN6S213C3D0Ev();
extern void _ZN6S213C62v4Ev();
extern void _ZN6S213C62v5Ev();
extern void _ZN6S213C62v6Ev();
extern void _ZN6S213C62v7Ev();
extern void _ZN6S213C62v8Ev();
extern void _ZN6S213C62v9Ev();
extern void _ZN6S213C63v10Ev();
extern void _ZN6S213C63v11Ev();
extern void _ZN6S213C63v12Ev();
extern void _ZN6S213C63v13Ev();
extern void _ZN6S213C63v14Ev();
extern void _ZN6S213C63v15Ev();
extern void _ZN6S213C63v16Ev();
extern void _ZN6S213C63v17Ev();
extern void _ZN6S213C63v18Ev();
extern void _ZN6S213C63v19Ev();
extern void _ZN6S213C63v20Ev();
extern void _ZN6S213C63v21Ev();
extern void _ZN6S213C63v22Ev();
extern void _ZN6S213C63v23Ev();
extern void _ZN6S213C63v24Ev();
extern void _ZN6S213C63v25Ev();
extern void _ZN6S213C63v26Ev();
extern void _ZN6S213C63v27Ev();
extern void _ZN6S213C63v28Ev();
extern void _ZN6S213C63v29Ev();
extern void _ZN6S213C63v30Ev();
extern void _ZN6S213C63v31Ev();
extern void _ZN6S213C63v32Ev();
extern void _ZN6S213C63v33Ev();
extern void _ZN6S213C63v34Ev();
extern void _ZN6S213C63v35Ev();
extern void _ZN6S213C63v36Ev();
extern void _ZN6S213C63v37Ev();
extern void _ZN6S213C63v38Ev();
extern void _ZN6S213C63v39Ev();
extern void _ZN6S213C63v40Ev();
extern void _ZN6S213C63v41Ev();
extern void _ZN6S213C63v42Ev();
extern void _ZN6S213C63v43Ev();
extern void _ZN6S213C63v44Ev();
extern void _ZN6S213C63v45Ev();
extern void _ZN6S213C63v46Ev();
extern void _ZN6S213C63v47Ev();
extern void _ZN6S213C63v48Ev();
extern void _ZN6S213C63v49Ev();
extern void _ZN6S213C63v50Ev();
extern void _ZN6S213C63v51Ev();
extern void _ZN6S213C63v52Ev();
extern void _ZN6S213C63v53Ev();
extern void _ZN6S213C63v54Ev();
extern void _ZN6S213C63v55Ev();
extern void _ZN6S213C63v56Ev();
extern void _ZN6S213C63v57Ev();
extern void _ZN6S213C63v58Ev();
extern void _ZN6S213C63v59Ev();
extern void _ZN6S213C63v60Ev();
extern void _ZN6S213C63v61Ev();
extern void _ZN6S213C63v62Ev();
extern void _ZN6S213C63v63Ev();
extern void _ZN6S213C63v64Ev();
extern void _ZN6S213C63v65Ev();
extern void _ZN6S213C63v66Ev();
extern void _ZN6S213C63v67Ev();
extern void _ZN6S213C53v68Ev();
extern void _ZN6S213C53v69Ev();
extern void _ZN6S213C53v70Ev();
extern void _ZN6S213C53v71Ev();
extern void _ZN6S213C53v72Ev();
extern void _ZN6S213C53v73Ev();
extern void _ZN6S213C53v74Ev();
extern void _ZN6S213C53v75Ev();
extern void _ZN6S213C53v76Ev();
extern void _ZN6S213C53v77Ev();
extern void _ZN6S213C53v78Ev();
extern void _ZN6S213C53v79Ev();
extern void _ZN6S213C53v80Ev();
extern void _ZN6S213C53v81Ev();
extern void _ZN6S213C53v82Ev();
extern void _ZN6S213C53v83Ev();
extern void _ZN6S213C53v84Ev();
extern void _ZN6S213C53v85Ev();
extern void _ZN6S213C53v86Ev();
extern void _ZN6S213C53v87Ev();
extern void _ZN6S213C53v88Ev();
extern void _ZN6S213C53v89Ev();
extern void _ZN6S213C43v90Ev();
extern void _ZN6S213C43v91Ev();
extern void _ZN6S213C43v92Ev();
extern void _ZN6S213C43v93Ev();
extern void _ZN6S213C43v94Ev();
extern void _ZN6S213C43v95Ev();
extern void _ZN6S213C43v96Ev();
extern void _ZN6S213C43v97Ev();
extern void _ZN6S213C43v98Ev();
extern void _ZN6S213C43v99Ev();
extern void _ZN6S213C44v100Ev();
extern void _ZN6S213C44v101Ev();
extern void _ZN6S213C44v102Ev();
extern void _ZN6S213C44v103Ev();
extern void _ZN6S213C44v104Ev();
extern void _ZN6S213C44v105Ev();
extern void _ZN6S213C44v106Ev();
extern void _ZN6S213C44v107Ev();
extern void _ZN6S213C44v108Ev();
extern void _ZN6S213C44v109Ev();
extern void _ZN6S213C34v110Ev();
extern void _ZN6S213C34v111Ev();
extern void _ZN6S213C34v112Ev();
extern void _ZN6S213C34v113Ev();
static  VTBL_ENTRY vtc_S213C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S213C3[0]),
  (VTBL_ENTRY)&_ZN6S213C3D1Ev,
  (VTBL_ENTRY)&_ZN6S213C3D0Ev,
  (VTBL_ENTRY)&_ZN6S213C62v4Ev,
  (VTBL_ENTRY)&_ZN6S213C62v5Ev,
  (VTBL_ENTRY)&_ZN6S213C62v6Ev,
  (VTBL_ENTRY)&_ZN6S213C62v7Ev,
  (VTBL_ENTRY)&_ZN6S213C62v8Ev,
  (VTBL_ENTRY)&_ZN6S213C62v9Ev,
  (VTBL_ENTRY)&_ZN6S213C63v10Ev,
  (VTBL_ENTRY)&_ZN6S213C63v11Ev,
  (VTBL_ENTRY)&_ZN6S213C63v12Ev,
  (VTBL_ENTRY)&_ZN6S213C63v13Ev,
  (VTBL_ENTRY)&_ZN6S213C63v14Ev,
  (VTBL_ENTRY)&_ZN6S213C63v15Ev,
  (VTBL_ENTRY)&_ZN6S213C63v16Ev,
  (VTBL_ENTRY)&_ZN6S213C63v17Ev,
  (VTBL_ENTRY)&_ZN6S213C63v18Ev,
  (VTBL_ENTRY)&_ZN6S213C63v19Ev,
  (VTBL_ENTRY)&_ZN6S213C63v20Ev,
  (VTBL_ENTRY)&_ZN6S213C63v21Ev,
  (VTBL_ENTRY)&_ZN6S213C63v22Ev,
  (VTBL_ENTRY)&_ZN6S213C63v23Ev,
  (VTBL_ENTRY)&_ZN6S213C63v24Ev,
  (VTBL_ENTRY)&_ZN6S213C63v25Ev,
  (VTBL_ENTRY)&_ZN6S213C63v26Ev,
  (VTBL_ENTRY)&_ZN6S213C63v27Ev,
  (VTBL_ENTRY)&_ZN6S213C63v28Ev,
  (VTBL_ENTRY)&_ZN6S213C63v29Ev,
  (VTBL_ENTRY)&_ZN6S213C63v30Ev,
  (VTBL_ENTRY)&_ZN6S213C63v31Ev,
  (VTBL_ENTRY)&_ZN6S213C63v32Ev,
  (VTBL_ENTRY)&_ZN6S213C63v33Ev,
  (VTBL_ENTRY)&_ZN6S213C63v34Ev,
  (VTBL_ENTRY)&_ZN6S213C63v35Ev,
  (VTBL_ENTRY)&_ZN6S213C63v36Ev,
  (VTBL_ENTRY)&_ZN6S213C63v37Ev,
  (VTBL_ENTRY)&_ZN6S213C63v38Ev,
  (VTBL_ENTRY)&_ZN6S213C63v39Ev,
  (VTBL_ENTRY)&_ZN6S213C63v40Ev,
  (VTBL_ENTRY)&_ZN6S213C63v41Ev,
  (VTBL_ENTRY)&_ZN6S213C63v42Ev,
  (VTBL_ENTRY)&_ZN6S213C63v43Ev,
  (VTBL_ENTRY)&_ZN6S213C63v44Ev,
  (VTBL_ENTRY)&_ZN6S213C63v45Ev,
  (VTBL_ENTRY)&_ZN6S213C63v46Ev,
  (VTBL_ENTRY)&_ZN6S213C63v47Ev,
  (VTBL_ENTRY)&_ZN6S213C63v48Ev,
  (VTBL_ENTRY)&_ZN6S213C63v49Ev,
  (VTBL_ENTRY)&_ZN6S213C63v50Ev,
  (VTBL_ENTRY)&_ZN6S213C63v51Ev,
  (VTBL_ENTRY)&_ZN6S213C63v52Ev,
  (VTBL_ENTRY)&_ZN6S213C63v53Ev,
  (VTBL_ENTRY)&_ZN6S213C63v54Ev,
  (VTBL_ENTRY)&_ZN6S213C63v55Ev,
  (VTBL_ENTRY)&_ZN6S213C63v56Ev,
  (VTBL_ENTRY)&_ZN6S213C63v57Ev,
  (VTBL_ENTRY)&_ZN6S213C63v58Ev,
  (VTBL_ENTRY)&_ZN6S213C63v59Ev,
  (VTBL_ENTRY)&_ZN6S213C63v60Ev,
  (VTBL_ENTRY)&_ZN6S213C63v61Ev,
  (VTBL_ENTRY)&_ZN6S213C63v62Ev,
  (VTBL_ENTRY)&_ZN6S213C63v63Ev,
  (VTBL_ENTRY)&_ZN6S213C63v64Ev,
  (VTBL_ENTRY)&_ZN6S213C63v65Ev,
  (VTBL_ENTRY)&_ZN6S213C63v66Ev,
  (VTBL_ENTRY)&_ZN6S213C63v67Ev,
  (VTBL_ENTRY)&_ZN6S213C53v68Ev,
  (VTBL_ENTRY)&_ZN6S213C53v69Ev,
  (VTBL_ENTRY)&_ZN6S213C53v70Ev,
  (VTBL_ENTRY)&_ZN6S213C53v71Ev,
  (VTBL_ENTRY)&_ZN6S213C53v72Ev,
  (VTBL_ENTRY)&_ZN6S213C53v73Ev,
  (VTBL_ENTRY)&_ZN6S213C53v74Ev,
  (VTBL_ENTRY)&_ZN6S213C53v75Ev,
  (VTBL_ENTRY)&_ZN6S213C53v76Ev,
  (VTBL_ENTRY)&_ZN6S213C53v77Ev,
  (VTBL_ENTRY)&_ZN6S213C53v78Ev,
  (VTBL_ENTRY)&_ZN6S213C53v79Ev,
  (VTBL_ENTRY)&_ZN6S213C53v80Ev,
  (VTBL_ENTRY)&_ZN6S213C53v81Ev,
  (VTBL_ENTRY)&_ZN6S213C53v82Ev,
  (VTBL_ENTRY)&_ZN6S213C53v83Ev,
  (VTBL_ENTRY)&_ZN6S213C53v84Ev,
  (VTBL_ENTRY)&_ZN6S213C53v85Ev,
  (VTBL_ENTRY)&_ZN6S213C53v86Ev,
  (VTBL_ENTRY)&_ZN6S213C53v87Ev,
  (VTBL_ENTRY)&_ZN6S213C53v88Ev,
  (VTBL_ENTRY)&_ZN6S213C53v89Ev,
  (VTBL_ENTRY)&_ZN6S213C43v90Ev,
  (VTBL_ENTRY)&_ZN6S213C43v91Ev,
  (VTBL_ENTRY)&_ZN6S213C43v92Ev,
  (VTBL_ENTRY)&_ZN6S213C43v93Ev,
  (VTBL_ENTRY)&_ZN6S213C43v94Ev,
  (VTBL_ENTRY)&_ZN6S213C43v95Ev,
  (VTBL_ENTRY)&_ZN6S213C43v96Ev,
  (VTBL_ENTRY)&_ZN6S213C43v97Ev,
  (VTBL_ENTRY)&_ZN6S213C43v98Ev,
  (VTBL_ENTRY)&_ZN6S213C43v99Ev,
  (VTBL_ENTRY)&_ZN6S213C44v100Ev,
  (VTBL_ENTRY)&_ZN6S213C44v101Ev,
  (VTBL_ENTRY)&_ZN6S213C44v102Ev,
  (VTBL_ENTRY)&_ZN6S213C44v103Ev,
  (VTBL_ENTRY)&_ZN6S213C44v104Ev,
  (VTBL_ENTRY)&_ZN6S213C44v105Ev,
  (VTBL_ENTRY)&_ZN6S213C44v106Ev,
  (VTBL_ENTRY)&_ZN6S213C44v107Ev,
  (VTBL_ENTRY)&_ZN6S213C44v108Ev,
  (VTBL_ENTRY)&_ZN6S213C44v109Ev,
  (VTBL_ENTRY)&_ZN6S213C34v110Ev,
  (VTBL_ENTRY)&_ZN6S213C34v111Ev,
  (VTBL_ENTRY)&_ZN6S213C34v112Ev,
  (VTBL_ENTRY)&_ZN6S213C34v113Ev,
};
extern VTBL_ENTRY _ZTI6S213C3[];
extern  VTBL_ENTRY _ZTV6S213C3[];
Class_Descriptor cd_S213C3 = {  "S213C3", // class name
  bases_S213C3, 3,
  &(vtc_S213C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S213C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S213C3),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  S213C2  : S213C3 {
  virtual  ~S213C2(); // _ZN6S213C2D1Ev
  virtual void  v114(); // _ZN6S213C24v114Ev
  virtual void  v115(); // _ZN6S213C24v115Ev
  S213C2(); // tgen
};
//SIG(-1 S213C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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] 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 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 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v109 v110 v111 v112 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2}


 S213C2 ::~S213C2(){ note_dtor("S213C2", this);}
void  S213C2 ::v114(){vfunc_called(this, "_ZN6S213C24v114Ev");}
void  S213C2 ::v115(){vfunc_called(this, "_ZN6S213C24v115Ev");}
S213C2 ::S213C2(){ note_ctor("S213C2", this);} // tgen

static void Test_S213C2()
{
  extern Class_Descriptor cd_S213C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S213C2, buf);
    S213C2 *dp, &lv = *(dp=new (buf) S213C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S213C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S213C2)");
    check_base_class_offset(lv, (S213C6*)(S213C5*)(S213C4*)(S213C3*), 0, "S213C2");
    check_base_class_offset(lv, (S213C5*)(S213C4*)(S213C3*), 0, "S213C2");
    check_base_class_offset(lv, (S213C4*)(S213C3*), 0, "S213C2");
    check_base_class_offset(lv, (S213C3*), 0, "S213C2");
    test_class_info(&lv, &cd_S213C2);
    dp->~S213C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS213C2(Test_S213C2, "S213C2", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S213C2C1Ev();
extern void _ZN6S213C2D1Ev();
Name_Map name_map_S213C2[] = {
  NSPAIR(_ZN6S213C2C1Ev),
  NSPAIR(_ZN6S213C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S213C6;
extern VTBL_ENTRY _ZTI6S213C6[];
extern  VTBL_ENTRY _ZTV6S213C6[];
extern Class_Descriptor cd_S213C5;
extern VTBL_ENTRY _ZTI6S213C5[];
extern  VTBL_ENTRY _ZTV6S213C5[];
extern Class_Descriptor cd_S213C4;
extern VTBL_ENTRY _ZTI6S213C4[];
extern  VTBL_ENTRY _ZTV6S213C4[];
extern Class_Descriptor cd_S213C3;
extern VTBL_ENTRY _ZTI6S213C3[];
extern  VTBL_ENTRY _ZTV6S213C3[];
static Base_Class bases_S213C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S213C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S213C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S213C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S213C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S213C2[];
extern void _ZN6S213C2D1Ev();
extern void _ZN6S213C2D0Ev();
extern void _ZN6S213C62v4Ev();
extern void _ZN6S213C62v5Ev();
extern void _ZN6S213C62v6Ev();
extern void _ZN6S213C62v7Ev();
extern void _ZN6S213C62v8Ev();
extern void _ZN6S213C62v9Ev();
extern void _ZN6S213C63v10Ev();
extern void _ZN6S213C63v11Ev();
extern void _ZN6S213C63v12Ev();
extern void _ZN6S213C63v13Ev();
extern void _ZN6S213C63v14Ev();
extern void _ZN6S213C63v15Ev();
extern void _ZN6S213C63v16Ev();
extern void _ZN6S213C63v17Ev();
extern void _ZN6S213C63v18Ev();
extern void _ZN6S213C63v19Ev();
extern void _ZN6S213C63v20Ev();
extern void _ZN6S213C63v21Ev();
extern void _ZN6S213C63v22Ev();
extern void _ZN6S213C63v23Ev();
extern void _ZN6S213C63v24Ev();
extern void _ZN6S213C63v25Ev();
extern void _ZN6S213C63v26Ev();
extern void _ZN6S213C63v27Ev();
extern void _ZN6S213C63v28Ev();
extern void _ZN6S213C63v29Ev();
extern void _ZN6S213C63v30Ev();
extern void _ZN6S213C63v31Ev();
extern void _ZN6S213C63v32Ev();
extern void _ZN6S213C63v33Ev();
extern void _ZN6S213C63v34Ev();
extern void _ZN6S213C63v35Ev();
extern void _ZN6S213C63v36Ev();
extern void _ZN6S213C63v37Ev();
extern void _ZN6S213C63v38Ev();
extern void _ZN6S213C63v39Ev();
extern void _ZN6S213C63v40Ev();
extern void _ZN6S213C63v41Ev();
extern void _ZN6S213C63v42Ev();
extern void _ZN6S213C63v43Ev();
extern void _ZN6S213C63v44Ev();
extern void _ZN6S213C63v45Ev();
extern void _ZN6S213C63v46Ev();
extern void _ZN6S213C63v47Ev();
extern void _ZN6S213C63v48Ev();
extern void _ZN6S213C63v49Ev();
extern void _ZN6S213C63v50Ev();
extern void _ZN6S213C63v51Ev();
extern void _ZN6S213C63v52Ev();
extern void _ZN6S213C63v53Ev();
extern void _ZN6S213C63v54Ev();
extern void _ZN6S213C63v55Ev();
extern void _ZN6S213C63v56Ev();
extern void _ZN6S213C63v57Ev();
extern void _ZN6S213C63v58Ev();
extern void _ZN6S213C63v59Ev();
extern void _ZN6S213C63v60Ev();
extern void _ZN6S213C63v61Ev();
extern void _ZN6S213C63v62Ev();
extern void _ZN6S213C63v63Ev();
extern void _ZN6S213C63v64Ev();
extern void _ZN6S213C63v65Ev();
extern void _ZN6S213C63v66Ev();
extern void _ZN6S213C63v67Ev();
extern void _ZN6S213C53v68Ev();
extern void _ZN6S213C53v69Ev();
extern void _ZN6S213C53v70Ev();
extern void _ZN6S213C53v71Ev();
extern void _ZN6S213C53v72Ev();
extern void _ZN6S213C53v73Ev();
extern void _ZN6S213C53v74Ev();
extern void _ZN6S213C53v75Ev();
extern void _ZN6S213C53v76Ev();
extern void _ZN6S213C53v77Ev();
extern void _ZN6S213C53v78Ev();
extern void _ZN6S213C53v79Ev();
extern void _ZN6S213C53v80Ev();
extern void _ZN6S213C53v81Ev();
extern void _ZN6S213C53v82Ev();
extern void _ZN6S213C53v83Ev();
extern void _ZN6S213C53v84Ev();
extern void _ZN6S213C53v85Ev();
extern void _ZN6S213C53v86Ev();
extern void _ZN6S213C53v87Ev();
extern void _ZN6S213C53v88Ev();
extern void _ZN6S213C53v89Ev();
extern void _ZN6S213C43v90Ev();
extern void _ZN6S213C43v91Ev();
extern void _ZN6S213C43v92Ev();
extern void _ZN6S213C43v93Ev();
extern void _ZN6S213C43v94Ev();
extern void _ZN6S213C43v95Ev();
extern void _ZN6S213C43v96Ev();
extern void _ZN6S213C43v97Ev();
extern void _ZN6S213C43v98Ev();
extern void _ZN6S213C43v99Ev();
extern void _ZN6S213C44v100Ev();
extern void _ZN6S213C44v101Ev();
extern void _ZN6S213C44v102Ev();
extern void _ZN6S213C44v103Ev();
extern void _ZN6S213C44v104Ev();
extern void _ZN6S213C44v105Ev();
extern void _ZN6S213C44v106Ev();
extern void _ZN6S213C44v107Ev();
extern void _ZN6S213C44v108Ev();
extern void _ZN6S213C44v109Ev();
extern void _ZN6S213C34v110Ev();
extern void _ZN6S213C34v111Ev();
extern void _ZN6S213C34v112Ev();
extern void _ZN6S213C34v113Ev();
extern void _ZN6S213C24v114Ev();
extern void _ZN6S213C24v115Ev();
static  VTBL_ENTRY vtc_S213C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S213C2[0]),
  (VTBL_ENTRY)&_ZN6S213C2D1Ev,
  (VTBL_ENTRY)&_ZN6S213C2D0Ev,
  (VTBL_ENTRY)&_ZN6S213C62v4Ev,
  (VTBL_ENTRY)&_ZN6S213C62v5Ev,
  (VTBL_ENTRY)&_ZN6S213C62v6Ev,
  (VTBL_ENTRY)&_ZN6S213C62v7Ev,
  (VTBL_ENTRY)&_ZN6S213C62v8Ev,
  (VTBL_ENTRY)&_ZN6S213C62v9Ev,
  (VTBL_ENTRY)&_ZN6S213C63v10Ev,
  (VTBL_ENTRY)&_ZN6S213C63v11Ev,
  (VTBL_ENTRY)&_ZN6S213C63v12Ev,
  (VTBL_ENTRY)&_ZN6S213C63v13Ev,
  (VTBL_ENTRY)&_ZN6S213C63v14Ev,
  (VTBL_ENTRY)&_ZN6S213C63v15Ev,
  (VTBL_ENTRY)&_ZN6S213C63v16Ev,
  (VTBL_ENTRY)&_ZN6S213C63v17Ev,
  (VTBL_ENTRY)&_ZN6S213C63v18Ev,
  (VTBL_ENTRY)&_ZN6S213C63v19Ev,
  (VTBL_ENTRY)&_ZN6S213C63v20Ev,
  (VTBL_ENTRY)&_ZN6S213C63v21Ev,
  (VTBL_ENTRY)&_ZN6S213C63v22Ev,
  (VTBL_ENTRY)&_ZN6S213C63v23Ev,
  (VTBL_ENTRY)&_ZN6S213C63v24Ev,
  (VTBL_ENTRY)&_ZN6S213C63v25Ev,
  (VTBL_ENTRY)&_ZN6S213C63v26Ev,
  (VTBL_ENTRY)&_ZN6S213C63v27Ev,
  (VTBL_ENTRY)&_ZN6S213C63v28Ev,
  (VTBL_ENTRY)&_ZN6S213C63v29Ev,
  (VTBL_ENTRY)&_ZN6S213C63v30Ev,
  (VTBL_ENTRY)&_ZN6S213C63v31Ev,
  (VTBL_ENTRY)&_ZN6S213C63v32Ev,
  (VTBL_ENTRY)&_ZN6S213C63v33Ev,
  (VTBL_ENTRY)&_ZN6S213C63v34Ev,
  (VTBL_ENTRY)&_ZN6S213C63v35Ev,
  (VTBL_ENTRY)&_ZN6S213C63v36Ev,
  (VTBL_ENTRY)&_ZN6S213C63v37Ev,
  (VTBL_ENTRY)&_ZN6S213C63v38Ev,
  (VTBL_ENTRY)&_ZN6S213C63v39Ev,
  (VTBL_ENTRY)&_ZN6S213C63v40Ev,
  (VTBL_ENTRY)&_ZN6S213C63v41Ev,
  (VTBL_ENTRY)&_ZN6S213C63v42Ev,
  (VTBL_ENTRY)&_ZN6S213C63v43Ev,
  (VTBL_ENTRY)&_ZN6S213C63v44Ev,
  (VTBL_ENTRY)&_ZN6S213C63v45Ev,
  (VTBL_ENTRY)&_ZN6S213C63v46Ev,
  (VTBL_ENTRY)&_ZN6S213C63v47Ev,
  (VTBL_ENTRY)&_ZN6S213C63v48Ev,
  (VTBL_ENTRY)&_ZN6S213C63v49Ev,
  (VTBL_ENTRY)&_ZN6S213C63v50Ev,
  (VTBL_ENTRY)&_ZN6S213C63v51Ev,
  (VTBL_ENTRY)&_ZN6S213C63v52Ev,
  (VTBL_ENTRY)&_ZN6S213C63v53Ev,
  (VTBL_ENTRY)&_ZN6S213C63v54Ev,
  (VTBL_ENTRY)&_ZN6S213C63v55Ev,
  (VTBL_ENTRY)&_ZN6S213C63v56Ev,
  (VTBL_ENTRY)&_ZN6S213C63v57Ev,
  (VTBL_ENTRY)&_ZN6S213C63v58Ev,
  (VTBL_ENTRY)&_ZN6S213C63v59Ev,
  (VTBL_ENTRY)&_ZN6S213C63v60Ev,
  (VTBL_ENTRY)&_ZN6S213C63v61Ev,
  (VTBL_ENTRY)&_ZN6S213C63v62Ev,
  (VTBL_ENTRY)&_ZN6S213C63v63Ev,
  (VTBL_ENTRY)&_ZN6S213C63v64Ev,
  (VTBL_ENTRY)&_ZN6S213C63v65Ev,
  (VTBL_ENTRY)&_ZN6S213C63v66Ev,
  (VTBL_ENTRY)&_ZN6S213C63v67Ev,
  (VTBL_ENTRY)&_ZN6S213C53v68Ev,
  (VTBL_ENTRY)&_ZN6S213C53v69Ev,
  (VTBL_ENTRY)&_ZN6S213C53v70Ev,
  (VTBL_ENTRY)&_ZN6S213C53v71Ev,
  (VTBL_ENTRY)&_ZN6S213C53v72Ev,
  (VTBL_ENTRY)&_ZN6S213C53v73Ev,
  (VTBL_ENTRY)&_ZN6S213C53v74Ev,
  (VTBL_ENTRY)&_ZN6S213C53v75Ev,
  (VTBL_ENTRY)&_ZN6S213C53v76Ev,
  (VTBL_ENTRY)&_ZN6S213C53v77Ev,
  (VTBL_ENTRY)&_ZN6S213C53v78Ev,
  (VTBL_ENTRY)&_ZN6S213C53v79Ev,
  (VTBL_ENTRY)&_ZN6S213C53v80Ev,
  (VTBL_ENTRY)&_ZN6S213C53v81Ev,
  (VTBL_ENTRY)&_ZN6S213C53v82Ev,
  (VTBL_ENTRY)&_ZN6S213C53v83Ev,
  (VTBL_ENTRY)&_ZN6S213C53v84Ev,
  (VTBL_ENTRY)&_ZN6S213C53v85Ev,
  (VTBL_ENTRY)&_ZN6S213C53v86Ev,
  (VTBL_ENTRY)&_ZN6S213C53v87Ev,
  (VTBL_ENTRY)&_ZN6S213C53v88Ev,
  (VTBL_ENTRY)&_ZN6S213C53v89Ev,
  (VTBL_ENTRY)&_ZN6S213C43v90Ev,
  (VTBL_ENTRY)&_ZN6S213C43v91Ev,
  (VTBL_ENTRY)&_ZN6S213C43v92Ev,
  (VTBL_ENTRY)&_ZN6S213C43v93Ev,
  (VTBL_ENTRY)&_ZN6S213C43v94Ev,
  (VTBL_ENTRY)&_ZN6S213C43v95Ev,
  (VTBL_ENTRY)&_ZN6S213C43v96Ev,
  (VTBL_ENTRY)&_ZN6S213C43v97Ev,
  (VTBL_ENTRY)&_ZN6S213C43v98Ev,
  (VTBL_ENTRY)&_ZN6S213C43v99Ev,
  (VTBL_ENTRY)&_ZN6S213C44v100Ev,
  (VTBL_ENTRY)&_ZN6S213C44v101Ev,
  (VTBL_ENTRY)&_ZN6S213C44v102Ev,
  (VTBL_ENTRY)&_ZN6S213C44v103Ev,
  (VTBL_ENTRY)&_ZN6S213C44v104Ev,
  (VTBL_ENTRY)&_ZN6S213C44v105Ev,
  (VTBL_ENTRY)&_ZN6S213C44v106Ev,
  (VTBL_ENTRY)&_ZN6S213C44v107Ev,
  (VTBL_ENTRY)&_ZN6S213C44v108Ev,
  (VTBL_ENTRY)&_ZN6S213C44v109Ev,
  (VTBL_ENTRY)&_ZN6S213C34v110Ev,
  (VTBL_ENTRY)&_ZN6S213C34v111Ev,
  (VTBL_ENTRY)&_ZN6S213C34v112Ev,
  (VTBL_ENTRY)&_ZN6S213C34v113Ev,
  (VTBL_ENTRY)&_ZN6S213C24v114Ev,
  (VTBL_ENTRY)&_ZN6S213C24v115Ev,
};
extern VTBL_ENTRY _ZTI6S213C2[];
extern  VTBL_ENTRY _ZTV6S213C2[];
Class_Descriptor cd_S213C2 = {  "S213C2", // class name
  bases_S213C2, 4,
  &(vtc_S213C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S213C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S213C2),116, //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  S213C1  : S213C2 {
  int s213c1f0[4];
  virtual  ~S213C1(); // _ZN6S213C1D1Ev
  virtual void  v1(); // _ZN6S213C12v1Ev
  virtual void  v2(); // _ZN6S213C12v2Ev
  virtual void  v3(); // _ZN6S213C12v3Ev
  S213C1(); // tgen
};
//SIG(1 S213C1) 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 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v114 v115} vd v1 v2 v3 Fi[4]}


 S213C1 ::~S213C1(){ note_dtor("S213C1", this);}
void  S213C1 ::v1(){vfunc_called(this, "_ZN6S213C12v1Ev");}
void  S213C1 ::v2(){vfunc_called(this, "_ZN6S213C12v2Ev");}
void  S213C1 ::v3(){vfunc_called(this, "_ZN6S213C12v3Ev");}
S213C1 ::S213C1(){ note_ctor("S213C1", this);} // tgen

static void Test_S213C1()
{
  extern Class_Descriptor cd_S213C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,60)];
    init_test(&cd_S213C1, buf);
    S213C1 *dp, &lv = *(dp=new (buf) S213C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,236), "sizeof(S213C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S213C1)");
    check_base_class_offset(lv, (S213C6*)(S213C5*)(S213C4*)(S213C3*)(S213C2*), 0, "S213C1");
    check_base_class_offset(lv, (S213C5*)(S213C4*)(S213C3*)(S213C2*), 0, "S213C1");
    check_base_class_offset(lv, (S213C4*)(S213C3*)(S213C2*), 0, "S213C1");
    check_base_class_offset(lv, (S213C3*)(S213C2*), 0, "S213C1");
    check_base_class_offset(lv, (S213C2*), 0, "S213C1");
    check_field_offset(lv, s213c1f0, ABISELECT(296,220), "S213C1.s213c1f0");
    test_class_info(&lv, &cd_S213C1);
    dp->~S213C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS213C1(Test_S213C1, "S213C1", ABISELECT(312,236));

#else // __cplusplus

extern void _ZN6S213C1C1Ev();
extern void _ZN6S213C1D1Ev();
Name_Map name_map_S213C1[] = {
  NSPAIR(_ZN6S213C1C1Ev),
  NSPAIR(_ZN6S213C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S213C6;
extern VTBL_ENTRY _ZTI6S213C6[];
extern  VTBL_ENTRY _ZTV6S213C6[];
extern Class_Descriptor cd_S213C5;
extern VTBL_ENTRY _ZTI6S213C5[];
extern  VTBL_ENTRY _ZTV6S213C5[];
extern Class_Descriptor cd_S213C4;
extern VTBL_ENTRY _ZTI6S213C4[];
extern  VTBL_ENTRY _ZTV6S213C4[];
extern Class_Descriptor cd_S213C3;
extern VTBL_ENTRY _ZTI6S213C3[];
extern  VTBL_ENTRY _ZTV6S213C3[];
extern Class_Descriptor cd_S213C2;
extern VTBL_ENTRY _ZTI6S213C2[];
extern  VTBL_ENTRY _ZTV6S213C2[];
static Base_Class bases_S213C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S213C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S213C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S213C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S213C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S213C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S213C1[];
extern void _ZN6S213C1D1Ev();
extern void _ZN6S213C1D0Ev();
extern void _ZN6S213C62v4Ev();
extern void _ZN6S213C62v5Ev();
extern void _ZN6S213C62v6Ev();
extern void _ZN6S213C62v7Ev();
extern void _ZN6S213C62v8Ev();
extern void _ZN6S213C62v9Ev();
extern void _ZN6S213C63v10Ev();
extern void _ZN6S213C63v11Ev();
extern void _ZN6S213C63v12Ev();
extern void _ZN6S213C63v13Ev();
extern void _ZN6S213C63v14Ev();
extern void _ZN6S213C63v15Ev();
extern void _ZN6S213C63v16Ev();
extern void _ZN6S213C63v17Ev();
extern void _ZN6S213C63v18Ev();
extern void _ZN6S213C63v19Ev();
extern void _ZN6S213C63v20Ev();
extern void _ZN6S213C63v21Ev();
extern void _ZN6S213C63v22Ev();
extern void _ZN6S213C63v23Ev();
extern void _ZN6S213C63v24Ev();
extern void _ZN6S213C63v25Ev();
extern void _ZN6S213C63v26Ev();
extern void _ZN6S213C63v27Ev();
extern void _ZN6S213C63v28Ev();
extern void _ZN6S213C63v29Ev();
extern void _ZN6S213C63v30Ev();
extern void _ZN6S213C63v31Ev();
extern void _ZN6S213C63v32Ev();
extern void _ZN6S213C63v33Ev();
extern void _ZN6S213C63v34Ev();
extern void _ZN6S213C63v35Ev();
extern void _ZN6S213C63v36Ev();
extern void _ZN6S213C63v37Ev();
extern void _ZN6S213C63v38Ev();
extern void _ZN6S213C63v39Ev();
extern void _ZN6S213C63v40Ev();
extern void _ZN6S213C63v41Ev();
extern void _ZN6S213C63v42Ev();
extern void _ZN6S213C63v43Ev();
extern void _ZN6S213C63v44Ev();
extern void _ZN6S213C63v45Ev();
extern void _ZN6S213C63v46Ev();
extern void _ZN6S213C63v47Ev();
extern void _ZN6S213C63v48Ev();
extern void _ZN6S213C63v49Ev();
extern void _ZN6S213C63v50Ev();
extern void _ZN6S213C63v51Ev();
extern void _ZN6S213C63v52Ev();
extern void _ZN6S213C63v53Ev();
extern void _ZN6S213C63v54Ev();
extern void _ZN6S213C63v55Ev();
extern void _ZN6S213C63v56Ev();
extern void _ZN6S213C63v57Ev();
extern void _ZN6S213C63v58Ev();
extern void _ZN6S213C63v59Ev();
extern void _ZN6S213C63v60Ev();
extern void _ZN6S213C63v61Ev();
extern void _ZN6S213C63v62Ev();
extern void _ZN6S213C63v63Ev();
extern void _ZN6S213C63v64Ev();
extern void _ZN6S213C63v65Ev();
extern void _ZN6S213C63v66Ev();
extern void _ZN6S213C63v67Ev();
extern void _ZN6S213C53v68Ev();
extern void _ZN6S213C53v69Ev();
extern void _ZN6S213C53v70Ev();
extern void _ZN6S213C53v71Ev();
extern void _ZN6S213C53v72Ev();
extern void _ZN6S213C53v73Ev();
extern void _ZN6S213C53v74Ev();
extern void _ZN6S213C53v75Ev();
extern void _ZN6S213C53v76Ev();
extern void _ZN6S213C53v77Ev();
extern void _ZN6S213C53v78Ev();
extern void _ZN6S213C53v79Ev();
extern void _ZN6S213C53v80Ev();
extern void _ZN6S213C53v81Ev();
extern void _ZN6S213C53v82Ev();
extern void _ZN6S213C53v83Ev();
extern void _ZN6S213C53v84Ev();
extern void _ZN6S213C53v85Ev();
extern void _ZN6S213C53v86Ev();
extern void _ZN6S213C53v87Ev();
extern void _ZN6S213C53v88Ev();
extern void _ZN6S213C53v89Ev();
extern void _ZN6S213C43v90Ev();
extern void _ZN6S213C43v91Ev();
extern void _ZN6S213C43v92Ev();
extern void _ZN6S213C43v93Ev();
extern void _ZN6S213C43v94Ev();
extern void _ZN6S213C43v95Ev();
extern void _ZN6S213C43v96Ev();
extern void _ZN6S213C43v97Ev();
extern void _ZN6S213C43v98Ev();
extern void _ZN6S213C43v99Ev();
extern void _ZN6S213C44v100Ev();
extern void _ZN6S213C44v101Ev();
extern void _ZN6S213C44v102Ev();
extern void _ZN6S213C44v103Ev();
extern void _ZN6S213C44v104Ev();
extern void _ZN6S213C44v105Ev();
extern void _ZN6S213C44v106Ev();
extern void _ZN6S213C44v107Ev();
extern void _ZN6S213C44v108Ev();
extern void _ZN6S213C44v109Ev();
extern void _ZN6S213C34v110Ev();
extern void _ZN6S213C34v111Ev();
extern void _ZN6S213C34v112Ev();
extern void _ZN6S213C34v113Ev();
extern void _ZN6S213C24v114Ev();
extern void _ZN6S213C24v115Ev();
extern void _ZN6S213C12v1Ev();
extern void _ZN6S213C12v2Ev();
extern void _ZN6S213C12v3Ev();
static  VTBL_ENTRY vtc_S213C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S213C1[0]),
  (VTBL_ENTRY)&_ZN6S213C1D1Ev,
  (VTBL_ENTRY)&_ZN6S213C1D0Ev,
  (VTBL_ENTRY)&_ZN6S213C62v4Ev,
  (VTBL_ENTRY)&_ZN6S213C62v5Ev,
  (VTBL_ENTRY)&_ZN6S213C62v6Ev,
  (VTBL_ENTRY)&_ZN6S213C62v7Ev,
  (VTBL_ENTRY)&_ZN6S213C62v8Ev,
  (VTBL_ENTRY)&_ZN6S213C62v9Ev,
  (VTBL_ENTRY)&_ZN6S213C63v10Ev,
  (VTBL_ENTRY)&_ZN6S213C63v11Ev,
  (VTBL_ENTRY)&_ZN6S213C63v12Ev,
  (VTBL_ENTRY)&_ZN6S213C63v13Ev,
  (VTBL_ENTRY)&_ZN6S213C63v14Ev,
  (VTBL_ENTRY)&_ZN6S213C63v15Ev,
  (VTBL_ENTRY)&_ZN6S213C63v16Ev,
  (VTBL_ENTRY)&_ZN6S213C63v17Ev,
  (VTBL_ENTRY)&_ZN6S213C63v18Ev,
  (VTBL_ENTRY)&_ZN6S213C63v19Ev,
  (VTBL_ENTRY)&_ZN6S213C63v20Ev,
  (VTBL_ENTRY)&_ZN6S213C63v21Ev,
  (VTBL_ENTRY)&_ZN6S213C63v22Ev,
  (VTBL_ENTRY)&_ZN6S213C63v23Ev,
  (VTBL_ENTRY)&_ZN6S213C63v24Ev,
  (VTBL_ENTRY)&_ZN6S213C63v25Ev,
  (VTBL_ENTRY)&_ZN6S213C63v26Ev,
  (VTBL_ENTRY)&_ZN6S213C63v27Ev,
  (VTBL_ENTRY)&_ZN6S213C63v28Ev,
  (VTBL_ENTRY)&_ZN6S213C63v29Ev,
  (VTBL_ENTRY)&_ZN6S213C63v30Ev,
  (VTBL_ENTRY)&_ZN6S213C63v31Ev,
  (VTBL_ENTRY)&_ZN6S213C63v32Ev,
  (VTBL_ENTRY)&_ZN6S213C63v33Ev,
  (VTBL_ENTRY)&_ZN6S213C63v34Ev,
  (VTBL_ENTRY)&_ZN6S213C63v35Ev,
  (VTBL_ENTRY)&_ZN6S213C63v36Ev,
  (VTBL_ENTRY)&_ZN6S213C63v37Ev,
  (VTBL_ENTRY)&_ZN6S213C63v38Ev,
  (VTBL_ENTRY)&_ZN6S213C63v39Ev,
  (VTBL_ENTRY)&_ZN6S213C63v40Ev,
  (VTBL_ENTRY)&_ZN6S213C63v41Ev,
  (VTBL_ENTRY)&_ZN6S213C63v42Ev,
  (VTBL_ENTRY)&_ZN6S213C63v43Ev,
  (VTBL_ENTRY)&_ZN6S213C63v44Ev,
  (VTBL_ENTRY)&_ZN6S213C63v45Ev,
  (VTBL_ENTRY)&_ZN6S213C63v46Ev,
  (VTBL_ENTRY)&_ZN6S213C63v47Ev,
  (VTBL_ENTRY)&_ZN6S213C63v48Ev,
  (VTBL_ENTRY)&_ZN6S213C63v49Ev,
  (VTBL_ENTRY)&_ZN6S213C63v50Ev,
  (VTBL_ENTRY)&_ZN6S213C63v51Ev,
  (VTBL_ENTRY)&_ZN6S213C63v52Ev,
  (VTBL_ENTRY)&_ZN6S213C63v53Ev,
  (VTBL_ENTRY)&_ZN6S213C63v54Ev,
  (VTBL_ENTRY)&_ZN6S213C63v55Ev,
  (VTBL_ENTRY)&_ZN6S213C63v56Ev,
  (VTBL_ENTRY)&_ZN6S213C63v57Ev,
  (VTBL_ENTRY)&_ZN6S213C63v58Ev,
  (VTBL_ENTRY)&_ZN6S213C63v59Ev,
  (VTBL_ENTRY)&_ZN6S213C63v60Ev,
  (VTBL_ENTRY)&_ZN6S213C63v61Ev,
  (VTBL_ENTRY)&_ZN6S213C63v62Ev,
  (VTBL_ENTRY)&_ZN6S213C63v63Ev,
  (VTBL_ENTRY)&_ZN6S213C63v64Ev,
  (VTBL_ENTRY)&_ZN6S213C63v65Ev,
  (VTBL_ENTRY)&_ZN6S213C63v66Ev,
  (VTBL_ENTRY)&_ZN6S213C63v67Ev,
  (VTBL_ENTRY)&_ZN6S213C53v68Ev,
  (VTBL_ENTRY)&_ZN6S213C53v69Ev,
  (VTBL_ENTRY)&_ZN6S213C53v70Ev,
  (VTBL_ENTRY)&_ZN6S213C53v71Ev,
  (VTBL_ENTRY)&_ZN6S213C53v72Ev,
  (VTBL_ENTRY)&_ZN6S213C53v73Ev,
  (VTBL_ENTRY)&_ZN6S213C53v74Ev,
  (VTBL_ENTRY)&_ZN6S213C53v75Ev,
  (VTBL_ENTRY)&_ZN6S213C53v76Ev,
  (VTBL_ENTRY)&_ZN6S213C53v77Ev,
  (VTBL_ENTRY)&_ZN6S213C53v78Ev,
  (VTBL_ENTRY)&_ZN6S213C53v79Ev,
  (VTBL_ENTRY)&_ZN6S213C53v80Ev,
  (VTBL_ENTRY)&_ZN6S213C53v81Ev,
  (VTBL_ENTRY)&_ZN6S213C53v82Ev,
  (VTBL_ENTRY)&_ZN6S213C53v83Ev,
  (VTBL_ENTRY)&_ZN6S213C53v84Ev,
  (VTBL_ENTRY)&_ZN6S213C53v85Ev,
  (VTBL_ENTRY)&_ZN6S213C53v86Ev,
  (VTBL_ENTRY)&_ZN6S213C53v87Ev,
  (VTBL_ENTRY)&_ZN6S213C53v88Ev,
  (VTBL_ENTRY)&_ZN6S213C53v89Ev,
  (VTBL_ENTRY)&_ZN6S213C43v90Ev,
  (VTBL_ENTRY)&_ZN6S213C43v91Ev,
  (VTBL_ENTRY)&_ZN6S213C43v92Ev,
  (VTBL_ENTRY)&_ZN6S213C43v93Ev,
  (VTBL_ENTRY)&_ZN6S213C43v94Ev,
  (VTBL_ENTRY)&_ZN6S213C43v95Ev,
  (VTBL_ENTRY)&_ZN6S213C43v96Ev,
  (VTBL_ENTRY)&_ZN6S213C43v97Ev,
  (VTBL_ENTRY)&_ZN6S213C43v98Ev,
  (VTBL_ENTRY)&_ZN6S213C43v99Ev,
  (VTBL_ENTRY)&_ZN6S213C44v100Ev,
  (VTBL_ENTRY)&_ZN6S213C44v101Ev,
  (VTBL_ENTRY)&_ZN6S213C44v102Ev,
  (VTBL_ENTRY)&_ZN6S213C44v103Ev,
  (VTBL_ENTRY)&_ZN6S213C44v104Ev,
  (VTBL_ENTRY)&_ZN6S213C44v105Ev,
  (VTBL_ENTRY)&_ZN6S213C44v106Ev,
  (VTBL_ENTRY)&_ZN6S213C44v107Ev,
  (VTBL_ENTRY)&_ZN6S213C44v108Ev,
  (VTBL_ENTRY)&_ZN6S213C44v109Ev,
  (VTBL_ENTRY)&_ZN6S213C34v110Ev,
  (VTBL_ENTRY)&_ZN6S213C34v111Ev,
  (VTBL_ENTRY)&_ZN6S213C34v112Ev,
  (VTBL_ENTRY)&_ZN6S213C34v113Ev,
  (VTBL_ENTRY)&_ZN6S213C24v114Ev,
  (VTBL_ENTRY)&_ZN6S213C24v115Ev,
  (VTBL_ENTRY)&_ZN6S213C12v1Ev,
  (VTBL_ENTRY)&_ZN6S213C12v2Ev,
  (VTBL_ENTRY)&_ZN6S213C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S213C1[];
extern  VTBL_ENTRY _ZTV6S213C1[];
Class_Descriptor cd_S213C1 = {  "S213C1", // class name
  bases_S213C1, 5,
  &(vtc_S213C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,236), // object size
  NSPAIRA(_ZTI6S213C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S213C1),119, //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  S211C6  {
  int s211c6f0;
  __tsi64 s211c6f1;
  void *s211c6f2[4];
  int s211c6f3[2];
  void *s211c6f4;
  ::S1503C5_nt s211c6f5;
  void *s211c6f6[2];
  virtual  ~S211C6(); // _ZN6S211C6D1Ev
  virtual void  v4(); // _ZN6S211C62v4Ev
  virtual void  v5(); // _ZN6S211C62v5Ev
  virtual void  v6(); // _ZN6S211C62v6Ev
  virtual void  v7(); // _ZN6S211C62v7Ev
  virtual void  v8(); // _ZN6S211C62v8Ev
  virtual void  v9(); // _ZN6S211C62v9Ev
  virtual void  v10(); // _ZN6S211C63v10Ev
  virtual void  v11(); // _ZN6S211C63v11Ev
  virtual void  v12(); // _ZN6S211C63v12Ev
  virtual void  v13(); // _ZN6S211C63v13Ev
  virtual void  v14(); // _ZN6S211C63v14Ev
  virtual void  v15(); // _ZN6S211C63v15Ev
  virtual void  v16(); // _ZN6S211C63v16Ev
  virtual void  v17(); // _ZN6S211C63v17Ev
  virtual void  v18(); // _ZN6S211C63v18Ev
  virtual void  v19(); // _ZN6S211C63v19Ev
  virtual void  v20(); // _ZN6S211C63v20Ev
  virtual void  v21(); // _ZN6S211C63v21Ev
  virtual void  v22(); // _ZN6S211C63v22Ev
  virtual void  v23(); // _ZN6S211C63v23Ev
  virtual void  v24(); // _ZN6S211C63v24Ev
  virtual void  v25(); // _ZN6S211C63v25Ev
  virtual void  v26(); // _ZN6S211C63v26Ev
  virtual void  v27(); // _ZN6S211C63v27Ev
  virtual void  v28(); // _ZN6S211C63v28Ev
  virtual void  v29(); // _ZN6S211C63v29Ev
  virtual void  v30(); // _ZN6S211C63v30Ev
  virtual void  v31(); // _ZN6S211C63v31Ev
  virtual void  v32(); // _ZN6S211C63v32Ev
  virtual void  v33(); // _ZN6S211C63v33Ev
  virtual void  v34(); // _ZN6S211C63v34Ev
  virtual void  v35(); // _ZN6S211C63v35Ev
  virtual void  v36(); // _ZN6S211C63v36Ev
  virtual void  v37(); // _ZN6S211C63v37Ev
  virtual void  v38(); // _ZN6S211C63v38Ev
  virtual void  v39(); // _ZN6S211C63v39Ev
  virtual void  v40(); // _ZN6S211C63v40Ev
  virtual void  v41(); // _ZN6S211C63v41Ev
  virtual void  v42(); // _ZN6S211C63v42Ev
  virtual void  v43(); // _ZN6S211C63v43Ev
  virtual void  v44(); // _ZN6S211C63v44Ev
  virtual void  v45(); // _ZN6S211C63v45Ev
  virtual void  v46(); // _ZN6S211C63v46Ev
  virtual void  v47(); // _ZN6S211C63v47Ev
  virtual void  v48(); // _ZN6S211C63v48Ev
  virtual void  v49(); // _ZN6S211C63v49Ev
  virtual void  v50(); // _ZN6S211C63v50Ev
  virtual void  v51(); // _ZN6S211C63v51Ev
  virtual void  v52(); // _ZN6S211C63v52Ev
  virtual void  v53(); // _ZN6S211C63v53Ev
  virtual void  v54(); // _ZN6S211C63v54Ev
  virtual void  v55(); // _ZN6S211C63v55Ev
  virtual void  v56(); // _ZN6S211C63v56Ev
  virtual void  v57(); // _ZN6S211C63v57Ev
  virtual void  v58(); // _ZN6S211C63v58Ev
  virtual void  v59(); // _ZN6S211C63v59Ev
  virtual void  v60(); // _ZN6S211C63v60Ev
  virtual void  v61(); // _ZN6S211C63v61Ev
  virtual void  v62(); // _ZN6S211C63v62Ev
  virtual void  v63(); // _ZN6S211C63v63Ev
  virtual void  v64(); // _ZN6S211C63v64Ev
  virtual void  v65(); // _ZN6S211C63v65Ev
  virtual void  v66(); // _ZN6S211C63v66Ev
  virtual void  v67(); // _ZN6S211C63v67Ev
  S211C6(); // tgen
};
//SIG(-1 S211C6) 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]}


 S211C6 ::~S211C6(){ note_dtor("S211C6", this);}
void  S211C6 ::v4(){vfunc_called(this, "_ZN6S211C62v4Ev");}
void  S211C6 ::v5(){vfunc_called(this, "_ZN6S211C62v5Ev");}
void  S211C6 ::v6(){vfunc_called(this, "_ZN6S211C62v6Ev");}
void  S211C6 ::v7(){vfunc_called(this, "_ZN6S211C62v7Ev");}
void  S211C6 ::v8(){vfunc_called(this, "_ZN6S211C62v8Ev");}
void  S211C6 ::v9(){vfunc_called(this, "_ZN6S211C62v9Ev");}
void  S211C6 ::v10(){vfunc_called(this, "_ZN6S211C63v10Ev");}
void  S211C6 ::v11(){vfunc_called(this, "_ZN6S211C63v11Ev");}
void  S211C6 ::v12(){vfunc_called(this, "_ZN6S211C63v12Ev");}
void  S211C6 ::v13(){vfunc_called(this, "_ZN6S211C63v13Ev");}
void  S211C6 ::v14(){vfunc_called(this, "_ZN6S211C63v14Ev");}
void  S211C6 ::v15(){vfunc_called(this, "_ZN6S211C63v15Ev");}
void  S211C6 ::v16(){vfunc_called(this, "_ZN6S211C63v16Ev");}
void  S211C6 ::v17(){vfunc_called(this, "_ZN6S211C63v17Ev");}
void  S211C6 ::v18(){vfunc_called(this, "_ZN6S211C63v18Ev");}
void  S211C6 ::v19(){vfunc_called(this, "_ZN6S211C63v19Ev");}
void  S211C6 ::v20(){vfunc_called(this, "_ZN6S211C63v20Ev");}
void  S211C6 ::v21(){vfunc_called(this, "_ZN6S211C63v21Ev");}
void  S211C6 ::v22(){vfunc_called(this, "_ZN6S211C63v22Ev");}
void  S211C6 ::v23(){vfunc_called(this, "_ZN6S211C63v23Ev");}
void  S211C6 ::v24(){vfunc_called(this, "_ZN6S211C63v24Ev");}
void  S211C6 ::v25(){vfunc_called(this, "_ZN6S211C63v25Ev");}
void  S211C6 ::v26(){vfunc_called(this, "_ZN6S211C63v26Ev");}
void  S211C6 ::v27(){vfunc_called(this, "_ZN6S211C63v27Ev");}
void  S211C6 ::v28(){vfunc_called(this, "_ZN6S211C63v28Ev");}
void  S211C6 ::v29(){vfunc_called(this, "_ZN6S211C63v29Ev");}
void  S211C6 ::v30(){vfunc_called(this, "_ZN6S211C63v30Ev");}
void  S211C6 ::v31(){vfunc_called(this, "_ZN6S211C63v31Ev");}
void  S211C6 ::v32(){vfunc_called(this, "_ZN6S211C63v32Ev");}
void  S211C6 ::v33(){vfunc_called(this, "_ZN6S211C63v33Ev");}
void  S211C6 ::v34(){vfunc_called(this, "_ZN6S211C63v34Ev");}
void  S211C6 ::v35(){vfunc_called(this, "_ZN6S211C63v35Ev");}
void  S211C6 ::v36(){vfunc_called(this, "_ZN6S211C63v36Ev");}
void  S211C6 ::v37(){vfunc_called(this, "_ZN6S211C63v37Ev");}
void  S211C6 ::v38(){vfunc_called(this, "_ZN6S211C63v38Ev");}
void  S211C6 ::v39(){vfunc_called(this, "_ZN6S211C63v39Ev");}
void  S211C6 ::v40(){vfunc_called(this, "_ZN6S211C63v40Ev");}
void  S211C6 ::v41(){vfunc_called(this, "_ZN6S211C63v41Ev");}
void  S211C6 ::v42(){vfunc_called(this, "_ZN6S211C63v42Ev");}
void  S211C6 ::v43(){vfunc_called(this, "_ZN6S211C63v43Ev");}
void  S211C6 ::v44(){vfunc_called(this, "_ZN6S211C63v44Ev");}
void  S211C6 ::v45(){vfunc_called(this, "_ZN6S211C63v45Ev");}
void  S211C6 ::v46(){vfunc_called(this, "_ZN6S211C63v46Ev");}
void  S211C6 ::v47(){vfunc_called(this, "_ZN6S211C63v47Ev");}
void  S211C6 ::v48(){vfunc_called(this, "_ZN6S211C63v48Ev");}
void  S211C6 ::v49(){vfunc_called(this, "_ZN6S211C63v49Ev");}
void  S211C6 ::v50(){vfunc_called(this, "_ZN6S211C63v50Ev");}
void  S211C6 ::v51(){vfunc_called(this, "_ZN6S211C63v51Ev");}
void  S211C6 ::v52(){vfunc_called(this, "_ZN6S211C63v52Ev");}
void  S211C6 ::v53(){vfunc_called(this, "_ZN6S211C63v53Ev");}
void  S211C6 ::v54(){vfunc_called(this, "_ZN6S211C63v54Ev");}
void  S211C6 ::v55(){vfunc_called(this, "_ZN6S211C63v55Ev");}
void  S211C6 ::v56(){vfunc_called(this, "_ZN6S211C63v56Ev");}
void  S211C6 ::v57(){vfunc_called(this, "_ZN6S211C63v57Ev");}
void  S211C6 ::v58(){vfunc_called(this, "_ZN6S211C63v58Ev");}
void  S211C6 ::v59(){vfunc_called(this, "_ZN6S211C63v59Ev");}
void  S211C6 ::v60(){vfunc_called(this, "_ZN6S211C63v60Ev");}
void  S211C6 ::v61(){vfunc_called(this, "_ZN6S211C63v61Ev");}
void  S211C6 ::v62(){vfunc_called(this, "_ZN6S211C63v62Ev");}
void  S211C6 ::v63(){vfunc_called(this, "_ZN6S211C63v63Ev");}
void  S211C6 ::v64(){vfunc_called(this, "_ZN6S211C63v64Ev");}
void  S211C6 ::v65(){vfunc_called(this, "_ZN6S211C63v65Ev");}
void  S211C6 ::v66(){vfunc_called(this, "_ZN6S211C63v66Ev");}
void  S211C6 ::v67(){vfunc_called(this, "_ZN6S211C63v67Ev");}
S211C6 ::S211C6(){ note_ctor("S211C6", this);} // tgen

static void Test_S211C6()
{
  extern Class_Descriptor cd_S211C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S211C6, buf);
    S211C6 *dp, &lv = *(dp=new (buf) S211C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S211C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S211C6)");
    check_field_offset(lv, s211c6f0, ABISELECT(8,4), "S211C6.s211c6f0");
    check_field_offset(lv, s211c6f1, ABISELECT(16,8), "S211C6.s211c6f1");
    check_field_offset(lv, s211c6f2, ABISELECT(24,16), "S211C6.s211c6f2");
    check_field_offset(lv, s211c6f3, ABISELECT(56,32), "S211C6.s211c6f3");
    check_field_offset(lv, s211c6f4, ABISELECT(64,40), "S211C6.s211c6f4");
    check_field_offset(lv, s211c6f5, ABISELECT(72,44), "S211C6.s211c6f5");
    check_field_offset(lv, s211c6f6, ABISELECT(80,52), "S211C6.s211c6f6");
    test_class_info(&lv, &cd_S211C6);
    dp->~S211C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS211C6(Test_S211C6, "S211C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S211C6C1Ev();
extern void _ZN6S211C6D1Ev();
Name_Map name_map_S211C6[] = {
  NSPAIR(_ZN6S211C6C1Ev),
  NSPAIR(_ZN6S211C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S211C6[];
extern void _ZN6S211C6D1Ev();
extern void _ZN6S211C6D0Ev();
extern void _ZN6S211C62v4Ev();
extern void _ZN6S211C62v5Ev();
extern void _ZN6S211C62v6Ev();
extern void _ZN6S211C62v7Ev();
extern void _ZN6S211C62v8Ev();
extern void _ZN6S211C62v9Ev();
extern void _ZN6S211C63v10Ev();
extern void _ZN6S211C63v11Ev();
extern void _ZN6S211C63v12Ev();
extern void _ZN6S211C63v13Ev();
extern void _ZN6S211C63v14Ev();
extern void _ZN6S211C63v15Ev();
extern void _ZN6S211C63v16Ev();
extern void _ZN6S211C63v17Ev();
extern void _ZN6S211C63v18Ev();
extern void _ZN6S211C63v19Ev();
extern void _ZN6S211C63v20Ev();
extern void _ZN6S211C63v21Ev();
extern void _ZN6S211C63v22Ev();
extern void _ZN6S211C63v23Ev();
extern void _ZN6S211C63v24Ev();
extern void _ZN6S211C63v25Ev();
extern void _ZN6S211C63v26Ev();
extern void _ZN6S211C63v27Ev();
extern void _ZN6S211C63v28Ev();
extern void _ZN6S211C63v29Ev();
extern void _ZN6S211C63v30Ev();
extern void _ZN6S211C63v31Ev();
extern void _ZN6S211C63v32Ev();
extern void _ZN6S211C63v33Ev();
extern void _ZN6S211C63v34Ev();
extern void _ZN6S211C63v35Ev();
extern void _ZN6S211C63v36Ev();
extern void _ZN6S211C63v37Ev();
extern void _ZN6S211C63v38Ev();
extern void _ZN6S211C63v39Ev();
extern void _ZN6S211C63v40Ev();
extern void _ZN6S211C63v41Ev();
extern void _ZN6S211C63v42Ev();
extern void _ZN6S211C63v43Ev();
extern void _ZN6S211C63v44Ev();
extern void _ZN6S211C63v45Ev();
extern void _ZN6S211C63v46Ev();
extern void _ZN6S211C63v47Ev();
extern void _ZN6S211C63v48Ev();
extern void _ZN6S211C63v49Ev();
extern void _ZN6S211C63v50Ev();
extern void _ZN6S211C63v51Ev();
extern void _ZN6S211C63v52Ev();
extern void _ZN6S211C63v53Ev();
extern void _ZN6S211C63v54Ev();
extern void _ZN6S211C63v55Ev();
extern void _ZN6S211C63v56Ev();
extern void _ZN6S211C63v57Ev();
extern void _ZN6S211C63v58Ev();
extern void _ZN6S211C63v59Ev();
extern void _ZN6S211C63v60Ev();
extern void _ZN6S211C63v61Ev();
extern void _ZN6S211C63v62Ev();
extern void _ZN6S211C63v63Ev();
extern void _ZN6S211C63v64Ev();
extern void _ZN6S211C63v65Ev();
extern void _ZN6S211C63v66Ev();
extern void _ZN6S211C63v67Ev();
static  VTBL_ENTRY vtc_S211C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S211C6[0]),
  (VTBL_ENTRY)&_ZN6S211C6D1Ev,
  (VTBL_ENTRY)&_ZN6S211C6D0Ev,
  (VTBL_ENTRY)&_ZN6S211C62v4Ev,
  (VTBL_ENTRY)&_ZN6S211C62v5Ev,
  (VTBL_ENTRY)&_ZN6S211C62v6Ev,
  (VTBL_ENTRY)&_ZN6S211C62v7Ev,
  (VTBL_ENTRY)&_ZN6S211C62v8Ev,
  (VTBL_ENTRY)&_ZN6S211C62v9Ev,
  (VTBL_ENTRY)&_ZN6S211C63v10Ev,
  (VTBL_ENTRY)&_ZN6S211C63v11Ev,
  (VTBL_ENTRY)&_ZN6S211C63v12Ev,
  (VTBL_ENTRY)&_ZN6S211C63v13Ev,
  (VTBL_ENTRY)&_ZN6S211C63v14Ev,
  (VTBL_ENTRY)&_ZN6S211C63v15Ev,
  (VTBL_ENTRY)&_ZN6S211C63v16Ev,
  (VTBL_ENTRY)&_ZN6S211C63v17Ev,
  (VTBL_ENTRY)&_ZN6S211C63v18Ev,
  (VTBL_ENTRY)&_ZN6S211C63v19Ev,
  (VTBL_ENTRY)&_ZN6S211C63v20Ev,
  (VTBL_ENTRY)&_ZN6S211C63v21Ev,
  (VTBL_ENTRY)&_ZN6S211C63v22Ev,
  (VTBL_ENTRY)&_ZN6S211C63v23Ev,
  (VTBL_ENTRY)&_ZN6S211C63v24Ev,
  (VTBL_ENTRY)&_ZN6S211C63v25Ev,
  (VTBL_ENTRY)&_ZN6S211C63v26Ev,
  (VTBL_ENTRY)&_ZN6S211C63v27Ev,
  (VTBL_ENTRY)&_ZN6S211C63v28Ev,
  (VTBL_ENTRY)&_ZN6S211C63v29Ev,
  (VTBL_ENTRY)&_ZN6S211C63v30Ev,
  (VTBL_ENTRY)&_ZN6S211C63v31Ev,
  (VTBL_ENTRY)&_ZN6S211C63v32Ev,
  (VTBL_ENTRY)&_ZN6S211C63v33Ev,
  (VTBL_ENTRY)&_ZN6S211C63v34Ev,
  (VTBL_ENTRY)&_ZN6S211C63v35Ev,
  (VTBL_ENTRY)&_ZN6S211C63v36Ev,
  (VTBL_ENTRY)&_ZN6S211C63v37Ev,
  (VTBL_ENTRY)&_ZN6S211C63v38Ev,
  (VTBL_ENTRY)&_ZN6S211C63v39Ev,
  (VTBL_ENTRY)&_ZN6S211C63v40Ev,
  (VTBL_ENTRY)&_ZN6S211C63v41Ev,
  (VTBL_ENTRY)&_ZN6S211C63v42Ev,
  (VTBL_ENTRY)&_ZN6S211C63v43Ev,
  (VTBL_ENTRY)&_ZN6S211C63v44Ev,
  (VTBL_ENTRY)&_ZN6S211C63v45Ev,
  (VTBL_ENTRY)&_ZN6S211C63v46Ev,
  (VTBL_ENTRY)&_ZN6S211C63v47Ev,
  (VTBL_ENTRY)&_ZN6S211C63v48Ev,
  (VTBL_ENTRY)&_ZN6S211C63v49Ev,
  (VTBL_ENTRY)&_ZN6S211C63v50Ev,
  (VTBL_ENTRY)&_ZN6S211C63v51Ev,
  (VTBL_ENTRY)&_ZN6S211C63v52Ev,
  (VTBL_ENTRY)&_ZN6S211C63v53Ev,
  (VTBL_ENTRY)&_ZN6S211C63v54Ev,
  (VTBL_ENTRY)&_ZN6S211C63v55Ev,
  (VTBL_ENTRY)&_ZN6S211C63v56Ev,
  (VTBL_ENTRY)&_ZN6S211C63v57Ev,
  (VTBL_ENTRY)&_ZN6S211C63v58Ev,
  (VTBL_ENTRY)&_ZN6S211C63v59Ev,
  (VTBL_ENTRY)&_ZN6S211C63v60Ev,
  (VTBL_ENTRY)&_ZN6S211C63v61Ev,
  (VTBL_ENTRY)&_ZN6S211C63v62Ev,
  (VTBL_ENTRY)&_ZN6S211C63v63Ev,
  (VTBL_ENTRY)&_ZN6S211C63v64Ev,
  (VTBL_ENTRY)&_ZN6S211C63v65Ev,
  (VTBL_ENTRY)&_ZN6S211C63v66Ev,
  (VTBL_ENTRY)&_ZN6S211C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S211C6[];
extern  VTBL_ENTRY _ZTV6S211C6[];
Class_Descriptor cd_S211C6 = {  "S211C6", // class name
  0,0,//no base classes
  &(vtc_S211C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S211C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S211C6),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  S211C5  : S211C6 {
  int s211c5f0[2];
  void *s211c5f1;
  int s211c5f2[2];
  ::S210C8_nt s211c5f3;
  ::S210C8_nt s211c5f4;
  ::S629C14 s211c5f5;
  ::S210C8_nt s211c5f6;
  unsigned int s211c5f7:1;
  unsigned int s211c5f8:1;
  unsigned int s211c5f9:1;
  unsigned int s211c5f10:1;
  unsigned int s211c5f11:1;
  int s211c5f12[2];
  virtual  ~S211C5(); // _ZN6S211C5D1Ev
  virtual void  v68(); // _ZN6S211C53v68Ev
  virtual void  v69(); // _ZN6S211C53v69Ev
  virtual void  v70(); // _ZN6S211C53v70Ev
  virtual void  v71(); // _ZN6S211C53v71Ev
  virtual void  v72(); // _ZN6S211C53v72Ev
  virtual void  v73(); // _ZN6S211C53v73Ev
  virtual void  v74(); // _ZN6S211C53v74Ev
  virtual void  v75(); // _ZN6S211C53v75Ev
  virtual void  v76(); // _ZN6S211C53v76Ev
  virtual void  v77(); // _ZN6S211C53v77Ev
  virtual void  v78(); // _ZN6S211C53v78Ev
  virtual void  v79(); // _ZN6S211C53v79Ev
  virtual void  v80(); // _ZN6S211C53v80Ev
  virtual void  v81(); // _ZN6S211C53v81Ev
  virtual void  v82(); // _ZN6S211C53v82Ev
  virtual void  v83(); // _ZN6S211C53v83Ev
  virtual void  v84(); // _ZN6S211C53v84Ev
  virtual void  v85(); // _ZN6S211C53v85Ev
  virtual void  v86(); // _ZN6S211C53v86Ev
  virtual void  v87(); // _ZN6S211C53v87Ev
  virtual void  v88(); // _ZN6S211C53v88Ev
  virtual void  v89(); // _ZN6S211C53v89Ev
  S211C5(); // tgen
};
//SIG(-1 S211C5) 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]}


 S211C5 ::~S211C5(){ note_dtor("S211C5", this);}
void  S211C5 ::v68(){vfunc_called(this, "_ZN6S211C53v68Ev");}
void  S211C5 ::v69(){vfunc_called(this, "_ZN6S211C53v69Ev");}
void  S211C5 ::v70(){vfunc_called(this, "_ZN6S211C53v70Ev");}
void  S211C5 ::v71(){vfunc_called(this, "_ZN6S211C53v71Ev");}
void  S211C5 ::v72(){vfunc_called(this, "_ZN6S211C53v72Ev");}
void  S211C5 ::v73(){vfunc_called(this, "_ZN6S211C53v73Ev");}
void  S211C5 ::v74(){vfunc_called(this, "_ZN6S211C53v74Ev");}
void  S211C5 ::v75(){vfunc_called(this, "_ZN6S211C53v75Ev");}
void  S211C5 ::v76(){vfunc_called(this, "_ZN6S211C53v76Ev");}
void  S211C5 ::v77(){vfunc_called(this, "_ZN6S211C53v77Ev");}
void  S211C5 ::v78(){vfunc_called(this, "_ZN6S211C53v78Ev");}
void  S211C5 ::v79(){vfunc_called(this, "_ZN6S211C53v79Ev");}
void  S211C5 ::v80(){vfunc_called(this, "_ZN6S211C53v80Ev");}
void  S211C5 ::v81(){vfunc_called(this, "_ZN6S211C53v81Ev");}
void  S211C5 ::v82(){vfunc_called(this, "_ZN6S211C53v82Ev");}
void  S211C5 ::v83(){vfunc_called(this, "_ZN6S211C53v83Ev");}
void  S211C5 ::v84(){vfunc_called(this, "_ZN6S211C53v84Ev");}
void  S211C5 ::v85(){vfunc_called(this, "_ZN6S211C53v85Ev");}
void  S211C5 ::v86(){vfunc_called(this, "_ZN6S211C53v86Ev");}
void  S211C5 ::v87(){vfunc_called(this, "_ZN6S211C53v87Ev");}
void  S211C5 ::v88(){vfunc_called(this, "_ZN6S211C53v88Ev");}
void  S211C5 ::v89(){vfunc_called(this, "_ZN6S211C53v89Ev");}
S211C5 ::S211C5(){ note_ctor("S211C5", this);} // tgen

static void Test_S211C5()
{
  extern Class_Descriptor cd_S211C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S211C5, buf);
    S211C5 *dp, &lv = *(dp=new (buf) S211C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S211C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S211C5)");
    check_base_class_offset(lv, (S211C6*), 0, "S211C5");
    check_field_offset(lv, s211c5f0, ABISELECT(96,60), "S211C5.s211c5f0");
    check_field_offset(lv, s211c5f1, ABISELECT(104,68), "S211C5.s211c5f1");
    check_field_offset(lv, s211c5f2, ABISELECT(112,72), "S211C5.s211c5f2");
    check_field_offset(lv, s211c5f3, ABISELECT(120,80), "S211C5.s211c5f3");
    check_field_offset(lv, s211c5f4, ABISELECT(136,92), "S211C5.s211c5f4");
    check_field_offset(lv, s211c5f5, ABISELECT(152,104), "S211C5.s211c5f5");
    check_field_offset(lv, s211c5f6, ABISELECT(160,108), "S211C5.s211c5f6");
    set_bf_and_test(lv, s211c5f7, ABISELECT(176,120), 0, 1, 1, "S211C5");
    set_bf_and_test(lv, s211c5f8, ABISELECT(176,120), 1, 1, 1, "S211C5");
    set_bf_and_test(lv, s211c5f9, ABISELECT(176,120), 2, 1, 1, "S211C5");
    set_bf_and_test(lv, s211c5f10, ABISELECT(176,120), 3, 1, 1, "S211C5");
    set_bf_and_test(lv, s211c5f11, ABISELECT(176,120), 4, 1, 1, "S211C5");
    check_field_offset(lv, s211c5f12, ABISELECT(180,124), "S211C5.s211c5f12");
    test_class_info(&lv, &cd_S211C5);
    dp->~S211C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS211C5(Test_S211C5, "S211C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S211C5C1Ev();
extern void _ZN6S211C5D1Ev();
Name_Map name_map_S211C5[] = {
  NSPAIR(_ZN6S211C5C1Ev),
  NSPAIR(_ZN6S211C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S211C6;
extern VTBL_ENTRY _ZTI6S211C6[];
extern  VTBL_ENTRY _ZTV6S211C6[];
static Base_Class bases_S211C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S211C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI6S211C5[];
extern void _ZN6S211C5D1Ev();
extern void _ZN6S211C5D0Ev();
extern void _ZN6S211C62v4Ev();
extern void _ZN6S211C62v5Ev();
extern void _ZN6S211C62v6Ev();
extern void _ZN6S211C62v7Ev();
extern void _ZN6S211C62v8Ev();
extern void _ZN6S211C62v9Ev();
extern void _ZN6S211C63v10Ev();
extern void _ZN6S211C63v11Ev();
extern void _ZN6S211C63v12Ev();
extern void _ZN6S211C63v13Ev();
extern void _ZN6S211C63v14Ev();
extern void _ZN6S211C63v15Ev();
extern void _ZN6S211C63v16Ev();
extern void _ZN6S211C63v17Ev();
extern void _ZN6S211C63v18Ev();
extern void _ZN6S211C63v19Ev();
extern void _ZN6S211C63v20Ev();
extern void _ZN6S211C63v21Ev();
extern void _ZN6S211C63v22Ev();
extern void _ZN6S211C63v23Ev();
extern void _ZN6S211C63v24Ev();
extern void _ZN6S211C63v25Ev();
extern void _ZN6S211C63v26Ev();
extern void _ZN6S211C63v27Ev();
extern void _ZN6S211C63v28Ev();
extern void _ZN6S211C63v29Ev();
extern void _ZN6S211C63v30Ev();
extern void _ZN6S211C63v31Ev();
extern void _ZN6S211C63v32Ev();
extern void _ZN6S211C63v33Ev();
extern void _ZN6S211C63v34Ev();
extern void _ZN6S211C63v35Ev();
extern void _ZN6S211C63v36Ev();
extern void _ZN6S211C63v37Ev();
extern void _ZN6S211C63v38Ev();
extern void _ZN6S211C63v39Ev();
extern void _ZN6S211C63v40Ev();
extern void _ZN6S211C63v41Ev();
extern void _ZN6S211C63v42Ev();
extern void _ZN6S211C63v43Ev();
extern void _ZN6S211C63v44Ev();
extern void _ZN6S211C63v45Ev();
extern void _ZN6S211C63v46Ev();
extern void _ZN6S211C63v47Ev();
extern void _ZN6S211C63v48Ev();
extern void _ZN6S211C63v49Ev();
extern void _ZN6S211C63v50Ev();
extern void _ZN6S211C63v51Ev();
extern void _ZN6S211C63v52Ev();
extern void _ZN6S211C63v53Ev();
extern void _ZN6S211C63v54Ev();
extern void _ZN6S211C63v55Ev();
extern void _ZN6S211C63v56Ev();
extern void _ZN6S211C63v57Ev();
extern void _ZN6S211C63v58Ev();
extern void _ZN6S211C63v59Ev();
extern void _ZN6S211C63v60Ev();
extern void _ZN6S211C63v61Ev();
extern void _ZN6S211C63v62Ev();
extern void _ZN6S211C63v63Ev();
extern void _ZN6S211C63v64Ev();
extern void _ZN6S211C63v65Ev();
extern void _ZN6S211C63v66Ev();
extern void _ZN6S211C63v67Ev();
extern void _ZN6S211C53v68Ev();
extern void _ZN6S211C53v69Ev();
extern void _ZN6S211C53v70Ev();
extern void _ZN6S211C53v71Ev();
extern void _ZN6S211C53v72Ev();
extern void _ZN6S211C53v73Ev();
extern void _ZN6S211C53v74Ev();
extern void _ZN6S211C53v75Ev();
extern void _ZN6S211C53v76Ev();
extern void _ZN6S211C53v77Ev();
extern void _ZN6S211C53v78Ev();
extern void _ZN6S211C53v79Ev();
extern void _ZN6S211C53v80Ev();
extern void _ZN6S211C53v81Ev();
extern void _ZN6S211C53v82Ev();
extern void _ZN6S211C53v83Ev();
extern void _ZN6S211C53v84Ev();
extern void _ZN6S211C53v85Ev();
extern void _ZN6S211C53v86Ev();
extern void _ZN6S211C53v87Ev();
extern void _ZN6S211C53v88Ev();
extern void _ZN6S211C53v89Ev();
static  VTBL_ENTRY vtc_S211C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S211C5[0]),
  (VTBL_ENTRY)&_ZN6S211C5D1Ev,
  (VTBL_ENTRY)&_ZN6S211C5D0Ev,
  (VTBL_ENTRY)&_ZN6S211C62v4Ev,
  (VTBL_ENTRY)&_ZN6S211C62v5Ev,
  (VTBL_ENTRY)&_ZN6S211C62v6Ev,
  (VTBL_ENTRY)&_ZN6S211C62v7Ev,
  (VTBL_ENTRY)&_ZN6S211C62v8Ev,
  (VTBL_ENTRY)&_ZN6S211C62v9Ev,
  (VTBL_ENTRY)&_ZN6S211C63v10Ev,
  (VTBL_ENTRY)&_ZN6S211C63v11Ev,
  (VTBL_ENTRY)&_ZN6S211C63v12Ev,
  (VTBL_ENTRY)&_ZN6S211C63v13Ev,
  (VTBL_ENTRY)&_ZN6S211C63v14Ev,
  (VTBL_ENTRY)&_ZN6S211C63v15Ev,
  (VTBL_ENTRY)&_ZN6S211C63v16Ev,
  (VTBL_ENTRY)&_ZN6S211C63v17Ev,
  (VTBL_ENTRY)&_ZN6S211C63v18Ev,
  (VTBL_ENTRY)&_ZN6S211C63v19Ev,
  (VTBL_ENTRY)&_ZN6S211C63v20Ev,
  (VTBL_ENTRY)&_ZN6S211C63v21Ev,
  (VTBL_ENTRY)&_ZN6S211C63v22Ev,
  (VTBL_ENTRY)&_ZN6S211C63v23Ev,
  (VTBL_ENTRY)&_ZN6S211C63v24Ev,
  (VTBL_ENTRY)&_ZN6S211C63v25Ev,
  (VTBL_ENTRY)&_ZN6S211C63v26Ev,
  (VTBL_ENTRY)&_ZN6S211C63v27Ev,
  (VTBL_ENTRY)&_ZN6S211C63v28Ev,
  (VTBL_ENTRY)&_ZN6S211C63v29Ev,
  (VTBL_ENTRY)&_ZN6S211C63v30Ev,
  (VTBL_ENTRY)&_ZN6S211C63v31Ev,
  (VTBL_ENTRY)&_ZN6S211C63v32Ev,
  (VTBL_ENTRY)&_ZN6S211C63v33Ev,
  (VTBL_ENTRY)&_ZN6S211C63v34Ev,
  (VTBL_ENTRY)&_ZN6S211C63v35Ev,
  (VTBL_ENTRY)&_ZN6S211C63v36Ev,
  (VTBL_ENTRY)&_ZN6S211C63v37Ev,
  (VTBL_ENTRY)&_ZN6S211C63v38Ev,
  (VTBL_ENTRY)&_ZN6S211C63v39Ev,
  (VTBL_ENTRY)&_ZN6S211C63v40Ev,
  (VTBL_ENTRY)&_ZN6S211C63v41Ev,
  (VTBL_ENTRY)&_ZN6S211C63v42Ev,
  (VTBL_ENTRY)&_ZN6S211C63v43Ev,
  (VTBL_ENTRY)&_ZN6S211C63v44Ev,
  (VTBL_ENTRY)&_ZN6S211C63v45Ev,
  (VTBL_ENTRY)&_ZN6S211C63v46Ev,
  (VTBL_ENTRY)&_ZN6S211C63v47Ev,
  (VTBL_ENTRY)&_ZN6S211C63v48Ev,
  (VTBL_ENTRY)&_ZN6S211C63v49Ev,
  (VTBL_ENTRY)&_ZN6S211C63v50Ev,
  (VTBL_ENTRY)&_ZN6S211C63v51Ev,
  (VTBL_ENTRY)&_ZN6S211C63v52Ev,
  (VTBL_ENTRY)&_ZN6S211C63v53Ev,
  (VTBL_ENTRY)&_ZN6S211C63v54Ev,
  (VTBL_ENTRY)&_ZN6S211C63v55Ev,
  (VTBL_ENTRY)&_ZN6S211C63v56Ev,
  (VTBL_ENTRY)&_ZN6S211C63v57Ev,
  (VTBL_ENTRY)&_ZN6S211C63v58Ev,
  (VTBL_ENTRY)&_ZN6S211C63v59Ev,
  (VTBL_ENTRY)&_ZN6S211C63v60Ev,
  (VTBL_ENTRY)&_ZN6S211C63v61Ev,
  (VTBL_ENTRY)&_ZN6S211C63v62Ev,
  (VTBL_ENTRY)&_ZN6S211C63v63Ev,
  (VTBL_ENTRY)&_ZN6S211C63v64Ev,
  (VTBL_ENTRY)&_ZN6S211C63v65Ev,
  (VTBL_ENTRY)&_ZN6S211C63v66Ev,
  (VTBL_ENTRY)&_ZN6S211C63v67Ev,
  (VTBL_ENTRY)&_ZN6S211C53v68Ev,
  (VTBL_ENTRY)&_ZN6S211C53v69Ev,
  (VTBL_ENTRY)&_ZN6S211C53v70Ev,
  (VTBL_ENTRY)&_ZN6S211C53v71Ev,
  (VTBL_ENTRY)&_ZN6S211C53v72Ev,
  (VTBL_ENTRY)&_ZN6S211C53v73Ev,
  (VTBL_ENTRY)&_ZN6S211C53v74Ev,
  (VTBL_ENTRY)&_ZN6S211C53v75Ev,
  (VTBL_ENTRY)&_ZN6S211C53v76Ev,
  (VTBL_ENTRY)&_ZN6S211C53v77Ev,
  (VTBL_ENTRY)&_ZN6S211C53v78Ev,
  (VTBL_ENTRY)&_ZN6S211C53v79Ev,
  (VTBL_ENTRY)&_ZN6S211C53v80Ev,
  (VTBL_ENTRY)&_ZN6S211C53v81Ev,
  (VTBL_ENTRY)&_ZN6S211C53v82Ev,
  (VTBL_ENTRY)&_ZN6S211C53v83Ev,
  (VTBL_ENTRY)&_ZN6S211C53v84Ev,
  (VTBL_ENTRY)&_ZN6S211C53v85Ev,
  (VTBL_ENTRY)&_ZN6S211C53v86Ev,
  (VTBL_ENTRY)&_ZN6S211C53v87Ev,
  (VTBL_ENTRY)&_ZN6S211C53v88Ev,
  (VTBL_ENTRY)&_ZN6S211C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S211C5[];
extern  VTBL_ENTRY _ZTV6S211C5[];
Class_Descriptor cd_S211C5 = {  "S211C5", // class name
  bases_S211C5, 1,
  &(vtc_S211C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S211C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S211C5),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  S211C4  : S211C5 {
  unsigned int s211c4f0:1;
  unsigned int s211c4f1:1;
  unsigned int s211c4f2:1;
  ::S1503C28 s211c4f3;
  ::S1503C24 s211c4f4;
  ::S1503C18 s211c4f5;
  ::S1503C12 s211c4f6;
  int s211c4f7[3];
  virtual  ~S211C4(); // _ZN6S211C4D1Ev
  virtual void  v90(); // _ZN6S211C43v90Ev
  virtual void  v91(); // _ZN6S211C43v91Ev
  virtual void  v92(); // _ZN6S211C43v92Ev
  virtual void  v93(); // _ZN6S211C43v93Ev
  virtual void  v94(); // _ZN6S211C43v94Ev
  virtual void  v95(); // _ZN6S211C43v95Ev
  virtual void  v96(); // _ZN6S211C43v96Ev
  virtual void  v97(); // _ZN6S211C43v97Ev
  virtual void  v98(); // _ZN6S211C43v98Ev
  virtual void  v99(); // _ZN6S211C43v99Ev
  virtual void  v100(); // _ZN6S211C44v100Ev
  virtual void  v101(); // _ZN6S211C44v101Ev
  virtual void  v102(); // _ZN6S211C44v102Ev
  virtual void  v103(); // _ZN6S211C44v103Ev
  virtual void  v104(); // _ZN6S211C44v104Ev
  virtual void  v105(); // _ZN6S211C44v105Ev
  virtual void  v106(); // _ZN6S211C44v106Ev
  virtual void  v107(); // _ZN6S211C44v107Ev
  virtual void  v108(); // _ZN6S211C44v108Ev
  virtual void  v109(); // _ZN6S211C44v109Ev
  S211C4(); // tgen
};
//SIG(-1 S211C4) 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]}


 S211C4 ::~S211C4(){ note_dtor("S211C4", this);}
void  S211C4 ::v90(){vfunc_called(this, "_ZN6S211C43v90Ev");}
void  S211C4 ::v91(){vfunc_called(this, "_ZN6S211C43v91Ev");}
void  S211C4 ::v92(){vfunc_called(this, "_ZN6S211C43v92Ev");}
void  S211C4 ::v93(){vfunc_called(this, "_ZN6S211C43v93Ev");}
void  S211C4 ::v94(){vfunc_called(this, "_ZN6S211C43v94Ev");}
void  S211C4 ::v95(){vfunc_called(this, "_ZN6S211C43v95Ev");}
void  S211C4 ::v96(){vfunc_called(this, "_ZN6S211C43v96Ev");}
void  S211C4 ::v97(){vfunc_called(this, "_ZN6S211C43v97Ev");}
void  S211C4 ::v98(){vfunc_called(this, "_ZN6S211C43v98Ev");}
void  S211C4 ::v99(){vfunc_called(this, "_ZN6S211C43v99Ev");}
void  S211C4 ::v100(){vfunc_called(this, "_ZN6S211C44v100Ev");}
void  S211C4 ::v101(){vfunc_called(this, "_ZN6S211C44v101Ev");}
void  S211C4 ::v102(){vfunc_called(this, "_ZN6S211C44v102Ev");}
void  S211C4 ::v103(){vfunc_called(this, "_ZN6S211C44v103Ev");}
void  S211C4 ::v104(){vfunc_called(this, "_ZN6S211C44v104Ev");}
void  S211C4 ::v105(){vfunc_called(this, "_ZN6S211C44v105Ev");}
void  S211C4 ::v106(){vfunc_called(this, "_ZN6S211C44v106Ev");}
void  S211C4 ::v107(){vfunc_called(this, "_ZN6S211C44v107Ev");}
void  S211C4 ::v108(){vfunc_called(this, "_ZN6S211C44v108Ev");}
void  S211C4 ::v109(){vfunc_called(this, "_ZN6S211C44v109Ev");}
S211C4 ::S211C4(){ note_ctor("S211C4", this);} // tgen

static void Test_S211C4()
{
  extern Class_Descriptor cd_S211C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S211C4, buf);
    S211C4 *dp, &lv = *(dp=new (buf) S211C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S211C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S211C4)");
    check_base_class_offset(lv, (S211C6*)(S211C5*), 0, "S211C4");
    check_base_class_offset(lv, (S211C5*), 0, "S211C4");
    set_bf_and_test(lv, s211c4f0, ABISELECT(188,132), 0, 1, 1, "S211C4");
    set_bf_and_test(lv, s211c4f1, ABISELECT(188,132), 1, 1, 1, "S211C4");
    set_bf_and_test(lv, s211c4f2, ABISELECT(188,132), 2, 1, 1, "S211C4");
    check_field_offset(lv, s211c4f3, ABISELECT(192,136), "S211C4.s211c4f3");
    check_field_offset(lv, s211c4f4, ABISELECT(208,148), "S211C4.s211c4f4");
    check_field_offset(lv, s211c4f5, ABISELECT(224,160), "S211C4.s211c4f5");
    check_field_offset(lv, s211c4f6, ABISELECT(240,172), "S211C4.s211c4f6");
    check_field_offset(lv, s211c4f7, ABISELECT(256,184), "S211C4.s211c4f7");
    test_class_info(&lv, &cd_S211C4);
    dp->~S211C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS211C4(Test_S211C4, "S211C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S211C4C1Ev();
extern void _ZN6S211C4D1Ev();
Name_Map name_map_S211C4[] = {
  NSPAIR(_ZN6S211C4C1Ev),
  NSPAIR(_ZN6S211C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S211C6;
extern VTBL_ENTRY _ZTI6S211C6[];
extern  VTBL_ENTRY _ZTV6S211C6[];
extern Class_Descriptor cd_S211C5;
extern VTBL_ENTRY _ZTI6S211C5[];
extern  VTBL_ENTRY _ZTV6S211C5[];
static Base_Class bases_S211C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S211C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S211C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S211C4[];
extern void _ZN6S211C4D1Ev();
extern void _ZN6S211C4D0Ev();
extern void _ZN6S211C62v4Ev();
extern void _ZN6S211C62v5Ev();
extern void _ZN6S211C62v6Ev();
extern void _ZN6S211C62v7Ev();
extern void _ZN6S211C62v8Ev();
extern void _ZN6S211C62v9Ev();
extern void _ZN6S211C63v10Ev();
extern void _ZN6S211C63v11Ev();
extern void _ZN6S211C63v12Ev();
extern void _ZN6S211C63v13Ev();
extern void _ZN6S211C63v14Ev();
extern void _ZN6S211C63v15Ev();
extern void _ZN6S211C63v16Ev();
extern void _ZN6S211C63v17Ev();
extern void _ZN6S211C63v18Ev();
extern void _ZN6S211C63v19Ev();
extern void _ZN6S211C63v20Ev();
extern void _ZN6S211C63v21Ev();
extern void _ZN6S211C63v22Ev();
extern void _ZN6S211C63v23Ev();
extern void _ZN6S211C63v24Ev();
extern void _ZN6S211C63v25Ev();
extern void _ZN6S211C63v26Ev();
extern void _ZN6S211C63v27Ev();
extern void _ZN6S211C63v28Ev();
extern void _ZN6S211C63v29Ev();
extern void _ZN6S211C63v30Ev();
extern void _ZN6S211C63v31Ev();
extern void _ZN6S211C63v32Ev();
extern void _ZN6S211C63v33Ev();
extern void _ZN6S211C63v34Ev();
extern void _ZN6S211C63v35Ev();
extern void _ZN6S211C63v36Ev();
extern void _ZN6S211C63v37Ev();
extern void _ZN6S211C63v38Ev();
extern void _ZN6S211C63v39Ev();
extern void _ZN6S211C63v40Ev();
extern void _ZN6S211C63v41Ev();
extern void _ZN6S211C63v42Ev();
extern void _ZN6S211C63v43Ev();
extern void _ZN6S211C63v44Ev();
extern void _ZN6S211C63v45Ev();
extern void _ZN6S211C63v46Ev();
extern void _ZN6S211C63v47Ev();
extern void _ZN6S211C63v48Ev();
extern void _ZN6S211C63v49Ev();
extern void _ZN6S211C63v50Ev();
extern void _ZN6S211C63v51Ev();
extern void _ZN6S211C63v52Ev();
extern void _ZN6S211C63v53Ev();
extern void _ZN6S211C63v54Ev();
extern void _ZN6S211C63v55Ev();
extern void _ZN6S211C63v56Ev();
extern void _ZN6S211C63v57Ev();
extern void _ZN6S211C63v58Ev();
extern void _ZN6S211C63v59Ev();
extern void _ZN6S211C63v60Ev();
extern void _ZN6S211C63v61Ev();
extern void _ZN6S211C63v62Ev();
extern void _ZN6S211C63v63Ev();
extern void _ZN6S211C63v64Ev();
extern void _ZN6S211C63v65Ev();
extern void _ZN6S211C63v66Ev();
extern void _ZN6S211C63v67Ev();
extern void _ZN6S211C53v68Ev();
extern void _ZN6S211C53v69Ev();
extern void _ZN6S211C53v70Ev();
extern void _ZN6S211C53v71Ev();
extern void _ZN6S211C53v72Ev();
extern void _ZN6S211C53v73Ev();
extern void _ZN6S211C53v74Ev();
extern void _ZN6S211C53v75Ev();
extern void _ZN6S211C53v76Ev();
extern void _ZN6S211C53v77Ev();
extern void _ZN6S211C53v78Ev();
extern void _ZN6S211C53v79Ev();
extern void _ZN6S211C53v80Ev();
extern void _ZN6S211C53v81Ev();
extern void _ZN6S211C53v82Ev();
extern void _ZN6S211C53v83Ev();
extern void _ZN6S211C53v84Ev();
extern void _ZN6S211C53v85Ev();
extern void _ZN6S211C53v86Ev();
extern void _ZN6S211C53v87Ev();
extern void _ZN6S211C53v88Ev();
extern void _ZN6S211C53v89Ev();
extern void _ZN6S211C43v90Ev();
extern void _ZN6S211C43v91Ev();
extern void _ZN6S211C43v92Ev();
extern void _ZN6S211C43v93Ev();
extern void _ZN6S211C43v94Ev();
extern void _ZN6S211C43v95Ev();
extern void _ZN6S211C43v96Ev();
extern void _ZN6S211C43v97Ev();
extern void _ZN6S211C43v98Ev();
extern void _ZN6S211C43v99Ev();
extern void _ZN6S211C44v100Ev();
extern void _ZN6S211C44v101Ev();
extern void _ZN6S211C44v102Ev();
extern void _ZN6S211C44v103Ev();
extern void _ZN6S211C44v104Ev();
extern void _ZN6S211C44v105Ev();
extern void _ZN6S211C44v106Ev();
extern void _ZN6S211C44v107Ev();
extern void _ZN6S211C44v108Ev();
extern void _ZN6S211C44v109Ev();
static  VTBL_ENTRY vtc_S211C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S211C4[0]),
  (VTBL_ENTRY)&_ZN6S211C4D1Ev,
  (VTBL_ENTRY)&_ZN6S211C4D0Ev,
  (VTBL_ENTRY)&_ZN6S211C62v4Ev,
  (VTBL_ENTRY)&_ZN6S211C62v5Ev,
  (VTBL_ENTRY)&_ZN6S211C62v6Ev,
  (VTBL_ENTRY)&_ZN6S211C62v7Ev,
  (VTBL_ENTRY)&_ZN6S211C62v8Ev,
  (VTBL_ENTRY)&_ZN6S211C62v9Ev,
  (VTBL_ENTRY)&_ZN6S211C63v10Ev,
  (VTBL_ENTRY)&_ZN6S211C63v11Ev,
  (VTBL_ENTRY)&_ZN6S211C63v12Ev,
  (VTBL_ENTRY)&_ZN6S211C63v13Ev,
  (VTBL_ENTRY)&_ZN6S211C63v14Ev,
  (VTBL_ENTRY)&_ZN6S211C63v15Ev,
  (VTBL_ENTRY)&_ZN6S211C63v16Ev,
  (VTBL_ENTRY)&_ZN6S211C63v17Ev,
  (VTBL_ENTRY)&_ZN6S211C63v18Ev,
  (VTBL_ENTRY)&_ZN6S211C63v19Ev,
  (VTBL_ENTRY)&_ZN6S211C63v20Ev,
  (VTBL_ENTRY)&_ZN6S211C63v21Ev,
  (VTBL_ENTRY)&_ZN6S211C63v22Ev,
  (VTBL_ENTRY)&_ZN6S211C63v23Ev,
  (VTBL_ENTRY)&_ZN6S211C63v24Ev,
  (VTBL_ENTRY)&_ZN6S211C63v25Ev,
  (VTBL_ENTRY)&_ZN6S211C63v26Ev,
  (VTBL_ENTRY)&_ZN6S211C63v27Ev,
  (VTBL_ENTRY)&_ZN6S211C63v28Ev,
  (VTBL_ENTRY)&_ZN6S211C63v29Ev,
  (VTBL_ENTRY)&_ZN6S211C63v30Ev,
  (VTBL_ENTRY)&_ZN6S211C63v31Ev,
  (VTBL_ENTRY)&_ZN6S211C63v32Ev,
  (VTBL_ENTRY)&_ZN6S211C63v33Ev,
  (VTBL_ENTRY)&_ZN6S211C63v34Ev,
  (VTBL_ENTRY)&_ZN6S211C63v35Ev,
  (VTBL_ENTRY)&_ZN6S211C63v36Ev,
  (VTBL_ENTRY)&_ZN6S211C63v37Ev,
  (VTBL_ENTRY)&_ZN6S211C63v38Ev,
  (VTBL_ENTRY)&_ZN6S211C63v39Ev,
  (VTBL_ENTRY)&_ZN6S211C63v40Ev,
  (VTBL_ENTRY)&_ZN6S211C63v41Ev,
  (VTBL_ENTRY)&_ZN6S211C63v42Ev,
  (VTBL_ENTRY)&_ZN6S211C63v43Ev,
  (VTBL_ENTRY)&_ZN6S211C63v44Ev,
  (VTBL_ENTRY)&_ZN6S211C63v45Ev,
  (VTBL_ENTRY)&_ZN6S211C63v46Ev,
  (VTBL_ENTRY)&_ZN6S211C63v47Ev,
  (VTBL_ENTRY)&_ZN6S211C63v48Ev,
  (VTBL_ENTRY)&_ZN6S211C63v49Ev,
  (VTBL_ENTRY)&_ZN6S211C63v50Ev,
  (VTBL_ENTRY)&_ZN6S211C63v51Ev,
  (VTBL_ENTRY)&_ZN6S211C63v52Ev,
  (VTBL_ENTRY)&_ZN6S211C63v53Ev,
  (VTBL_ENTRY)&_ZN6S211C63v54Ev,
  (VTBL_ENTRY)&_ZN6S211C63v55Ev,
  (VTBL_ENTRY)&_ZN6S211C63v56Ev,
  (VTBL_ENTRY)&_ZN6S211C63v57Ev,
  (VTBL_ENTRY)&_ZN6S211C63v58Ev,
  (VTBL_ENTRY)&_ZN6S211C63v59Ev,
  (VTBL_ENTRY)&_ZN6S211C63v60Ev,
  (VTBL_ENTRY)&_ZN6S211C63v61Ev,
  (VTBL_ENTRY)&_ZN6S211C63v62Ev,
  (VTBL_ENTRY)&_ZN6S211C63v63Ev,
  (VTBL_ENTRY)&_ZN6S211C63v64Ev,
  (VTBL_ENTRY)&_ZN6S211C63v65Ev,
  (VTBL_ENTRY)&_ZN6S211C63v66Ev,
  (VTBL_ENTRY)&_ZN6S211C63v67Ev,
  (VTBL_ENTRY)&_ZN6S211C53v68Ev,
  (VTBL_ENTRY)&_ZN6S211C53v69Ev,
  (VTBL_ENTRY)&_ZN6S211C53v70Ev,
  (VTBL_ENTRY)&_ZN6S211C53v71Ev,
  (VTBL_ENTRY)&_ZN6S211C53v72Ev,
  (VTBL_ENTRY)&_ZN6S211C53v73Ev,
  (VTBL_ENTRY)&_ZN6S211C53v74Ev,
  (VTBL_ENTRY)&_ZN6S211C53v75Ev,
  (VTBL_ENTRY)&_ZN6S211C53v76Ev,
  (VTBL_ENTRY)&_ZN6S211C53v77Ev,
  (VTBL_ENTRY)&_ZN6S211C53v78Ev,
  (VTBL_ENTRY)&_ZN6S211C53v79Ev,
  (VTBL_ENTRY)&_ZN6S211C53v80Ev,
  (VTBL_ENTRY)&_ZN6S211C53v81Ev,
  (VTBL_ENTRY)&_ZN6S211C53v82Ev,
  (VTBL_ENTRY)&_ZN6S211C53v83Ev,
  (VTBL_ENTRY)&_ZN6S211C53v84Ev,
  (VTBL_ENTRY)&_ZN6S211C53v85Ev,
  (VTBL_ENTRY)&_ZN6S211C53v86Ev,
  (VTBL_ENTRY)&_ZN6S211C53v87Ev,
  (VTBL_ENTRY)&_ZN6S211C53v88Ev,
  (VTBL_ENTRY)&_ZN6S211C53v89Ev,
  (VTBL_ENTRY)&_ZN6S211C43v90Ev,
  (VTBL_ENTRY)&_ZN6S211C43v91Ev,
  (VTBL_ENTRY)&_ZN6S211C43v92Ev,
  (VTBL_ENTRY)&_ZN6S211C43v93Ev,
  (VTBL_ENTRY)&_ZN6S211C43v94Ev,
  (VTBL_ENTRY)&_ZN6S211C43v95Ev,
  (VTBL_ENTRY)&_ZN6S211C43v96Ev,
  (VTBL_ENTRY)&_ZN6S211C43v97Ev,
  (VTBL_ENTRY)&_ZN6S211C43v98Ev,
  (VTBL_ENTRY)&_ZN6S211C43v99Ev,
  (VTBL_ENTRY)&_ZN6S211C44v100Ev,
  (VTBL_ENTRY)&_ZN6S211C44v101Ev,
  (VTBL_ENTRY)&_ZN6S211C44v102Ev,
  (VTBL_ENTRY)&_ZN6S211C44v103Ev,
  (VTBL_ENTRY)&_ZN6S211C44v104Ev,
  (VTBL_ENTRY)&_ZN6S211C44v105Ev,
  (VTBL_ENTRY)&_ZN6S211C44v106Ev,
  (VTBL_ENTRY)&_ZN6S211C44v107Ev,
  (VTBL_ENTRY)&_ZN6S211C44v108Ev,
  (VTBL_ENTRY)&_ZN6S211C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S211C4[];
extern  VTBL_ENTRY _ZTV6S211C4[];
Class_Descriptor cd_S211C4 = {  "S211C4", // class name
  bases_S211C4, 2,
  &(vtc_S211C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S211C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S211C4),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  S211C3  : S211C4 {
  ::S1503C5_nt s211c3f0;
  unsigned int s211c3f1:1;
  ::S1503C6_nt s211c3f2;
  virtual  ~S211C3(); // _ZN6S211C3D1Ev
  virtual void  v110(); // _ZN6S211C34v110Ev
  virtual void  v111(); // _ZN6S211C34v111Ev
  virtual void  v112(); // _ZN6S211C34v112Ev
  virtual void  v113(); // _ZN6S211C34v113Ev
  S211C3(); // tgen
};
//SIG(-1 S211C3) 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}}}


 S211C3 ::~S211C3(){ note_dtor("S211C3", this);}
void  S211C3 ::v110(){vfunc_called(this, "_ZN6S211C34v110Ev");}
void  S211C3 ::v111(){vfunc_called(this, "_ZN6S211C34v111Ev");}
void  S211C3 ::v112(){vfunc_called(this, "_ZN6S211C34v112Ev");}
void  S211C3 ::v113(){vfunc_called(this, "_ZN6S211C34v113Ev");}
S211C3 ::S211C3(){ note_ctor("S211C3", this);} // tgen

static void Test_S211C3()
{
  extern Class_Descriptor cd_S211C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S211C3, buf);
    S211C3 *dp, &lv = *(dp=new (buf) S211C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S211C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S211C3)");
    check_base_class_offset(lv, (S211C6*)(S211C5*)(S211C4*), 0, "S211C3");
    check_base_class_offset(lv, (S211C5*)(S211C4*), 0, "S211C3");
    check_base_class_offset(lv, (S211C4*), 0, "S211C3");
    check_field_offset(lv, s211c3f0, ABISELECT(268,196), "S211C3.s211c3f0");
    set_bf_and_test(lv, s211c3f1, ABISELECT(276,204), 0, 1, 1, "S211C3");
    check_field_offset(lv, s211c3f2, ABISELECT(280,208), "S211C3.s211c3f2");
    test_class_info(&lv, &cd_S211C3);
    dp->~S211C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS211C3(Test_S211C3, "S211C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S211C3C1Ev();
extern void _ZN6S211C3D1Ev();
Name_Map name_map_S211C3[] = {
  NSPAIR(_ZN6S211C3C1Ev),
  NSPAIR(_ZN6S211C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S211C6;
extern VTBL_ENTRY _ZTI6S211C6[];
extern  VTBL_ENTRY _ZTV6S211C6[];
extern Class_Descriptor cd_S211C5;
extern VTBL_ENTRY _ZTI6S211C5[];
extern  VTBL_ENTRY _ZTV6S211C5[];
extern Class_Descriptor cd_S211C4;
extern VTBL_ENTRY _ZTI6S211C4[];
extern  VTBL_ENTRY _ZTV6S211C4[];
static Base_Class bases_S211C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S211C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S211C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S211C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S211C3[];
extern void _ZN6S211C3D1Ev();
extern void _ZN6S211C3D0Ev();
extern void _ZN6S211C62v4Ev();
extern void _ZN6S211C62v5Ev();
extern void _ZN6S211C62v6Ev();
extern void _ZN6S211C62v7Ev();
extern void _ZN6S211C62v8Ev();
extern void _ZN6S211C62v9Ev();
extern void _ZN6S211C63v10Ev();
extern void _ZN6S211C63v11Ev();
extern void _ZN6S211C63v12Ev();
extern void _ZN6S211C63v13Ev();
extern void _ZN6S211C63v14Ev();
extern void _ZN6S211C63v15Ev();
extern void _ZN6S211C63v16Ev();
extern void _ZN6S211C63v17Ev();
extern void _ZN6S211C63v18Ev();
extern void _ZN6S211C63v19Ev();
extern void _ZN6S211C63v20Ev();
extern void _ZN6S211C63v21Ev();
extern void _ZN6S211C63v22Ev();
extern void _ZN6S211C63v23Ev();
extern void _ZN6S211C63v24Ev();
extern void _ZN6S211C63v25Ev();
extern void _ZN6S211C63v26Ev();
extern void _ZN6S211C63v27Ev();
extern void _ZN6S211C63v28Ev();
extern void _ZN6S211C63v29Ev();
extern void _ZN6S211C63v30Ev();
extern void _ZN6S211C63v31Ev();
extern void _ZN6S211C63v32Ev();
extern void _ZN6S211C63v33Ev();
extern void _ZN6S211C63v34Ev();
extern void _ZN6S211C63v35Ev();
extern void _ZN6S211C63v36Ev();
extern void _ZN6S211C63v37Ev();
extern void _ZN6S211C63v38Ev();
extern void _ZN6S211C63v39Ev();
extern void _ZN6S211C63v40Ev();
extern void _ZN6S211C63v41Ev();
extern void _ZN6S211C63v42Ev();
extern void _ZN6S211C63v43Ev();
extern void _ZN6S211C63v44Ev();
extern void _ZN6S211C63v45Ev();
extern void _ZN6S211C63v46Ev();
extern void _ZN6S211C63v47Ev();
extern void _ZN6S211C63v48Ev();
extern void _ZN6S211C63v49Ev();
extern void _ZN6S211C63v50Ev();
extern void _ZN6S211C63v51Ev();
extern void _ZN6S211C63v52Ev();
extern void _ZN6S211C63v53Ev();
extern void _ZN6S211C63v54Ev();
extern void _ZN6S211C63v55Ev();
extern void _ZN6S211C63v56Ev();
extern void _ZN6S211C63v57Ev();
extern void _ZN6S211C63v58Ev();
extern void _ZN6S211C63v59Ev();
extern void _ZN6S211C63v60Ev();
extern void _ZN6S211C63v61Ev();
extern void _ZN6S211C63v62Ev();
extern void _ZN6S211C63v63Ev();
extern void _ZN6S211C63v64Ev();
extern void _ZN6S211C63v65Ev();
extern void _ZN6S211C63v66Ev();
extern void _ZN6S211C63v67Ev();
extern void _ZN6S211C53v68Ev();
extern void _ZN6S211C53v69Ev();
extern void _ZN6S211C53v70Ev();
extern void _ZN6S211C53v71Ev();
extern void _ZN6S211C53v72Ev();
extern void _ZN6S211C53v73Ev();
extern void _ZN6S211C53v74Ev();
extern void _ZN6S211C53v75Ev();
extern void _ZN6S211C53v76Ev();
extern void _ZN6S211C53v77Ev();
extern void _ZN6S211C53v78Ev();
extern void _ZN6S211C53v79Ev();
extern void _ZN6S211C53v80Ev();
extern void _ZN6S211C53v81Ev();
extern void _ZN6S211C53v82Ev();
extern void _ZN6S211C53v83Ev();
extern void _ZN6S211C53v84Ev();
extern void _ZN6S211C53v85Ev();
extern void _ZN6S211C53v86Ev();
extern void _ZN6S211C53v87Ev();
extern void _ZN6S211C53v88Ev();
extern void _ZN6S211C53v89Ev();
extern void _ZN6S211C43v90Ev();
extern void _ZN6S211C43v91Ev();
extern void _ZN6S211C43v92Ev();
extern void _ZN6S211C43v93Ev();
extern void _ZN6S211C43v94Ev();
extern void _ZN6S211C43v95Ev();
extern void _ZN6S211C43v96Ev();
extern void _ZN6S211C43v97Ev();
extern void _ZN6S211C43v98Ev();
extern void _ZN6S211C43v99Ev();
extern void _ZN6S211C44v100Ev();
extern void _ZN6S211C44v101Ev();
extern void _ZN6S211C44v102Ev();
extern void _ZN6S211C44v103Ev();
extern void _ZN6S211C44v104Ev();
extern void _ZN6S211C44v105Ev();
extern void _ZN6S211C44v106Ev();
extern void _ZN6S211C44v107Ev();
extern void _ZN6S211C44v108Ev();
extern void _ZN6S211C44v109Ev();
extern void _ZN6S211C34v110Ev();
extern void _ZN6S211C34v111Ev();
extern void _ZN6S211C34v112Ev();
extern void _ZN6S211C34v113Ev();
static  VTBL_ENTRY vtc_S211C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S211C3[0]),
  (VTBL_ENTRY)&_ZN6S211C3D1Ev,
  (VTBL_ENTRY)&_ZN6S211C3D0Ev,
  (VTBL_ENTRY)&_ZN6S211C62v4Ev,
  (VTBL_ENTRY)&_ZN6S211C62v5Ev,
  (VTBL_ENTRY)&_ZN6S211C62v6Ev,
  (VTBL_ENTRY)&_ZN6S211C62v7Ev,
  (VTBL_ENTRY)&_ZN6S211C62v8Ev,
  (VTBL_ENTRY)&_ZN6S211C62v9Ev,
  (VTBL_ENTRY)&_ZN6S211C63v10Ev,
  (VTBL_ENTRY)&_ZN6S211C63v11Ev,
  (VTBL_ENTRY)&_ZN6S211C63v12Ev,
  (VTBL_ENTRY)&_ZN6S211C63v13Ev,
  (VTBL_ENTRY)&_ZN6S211C63v14Ev,
  (VTBL_ENTRY)&_ZN6S211C63v15Ev,
  (VTBL_ENTRY)&_ZN6S211C63v16Ev,
  (VTBL_ENTRY)&_ZN6S211C63v17Ev,
  (VTBL_ENTRY)&_ZN6S211C63v18Ev,
  (VTBL_ENTRY)&_ZN6S211C63v19Ev,
  (VTBL_ENTRY)&_ZN6S211C63v20Ev,
  (VTBL_ENTRY)&_ZN6S211C63v21Ev,
  (VTBL_ENTRY)&_ZN6S211C63v22Ev,
  (VTBL_ENTRY)&_ZN6S211C63v23Ev,
  (VTBL_ENTRY)&_ZN6S211C63v24Ev,
  (VTBL_ENTRY)&_ZN6S211C63v25Ev,
  (VTBL_ENTRY)&_ZN6S211C63v26Ev,
  (VTBL_ENTRY)&_ZN6S211C63v27Ev,
  (VTBL_ENTRY)&_ZN6S211C63v28Ev,
  (VTBL_ENTRY)&_ZN6S211C63v29Ev,
  (VTBL_ENTRY)&_ZN6S211C63v30Ev,
  (VTBL_ENTRY)&_ZN6S211C63v31Ev,
  (VTBL_ENTRY)&_ZN6S211C63v32Ev,
  (VTBL_ENTRY)&_ZN6S211C63v33Ev,
  (VTBL_ENTRY)&_ZN6S211C63v34Ev,
  (VTBL_ENTRY)&_ZN6S211C63v35Ev,
  (VTBL_ENTRY)&_ZN6S211C63v36Ev,
  (VTBL_ENTRY)&_ZN6S211C63v37Ev,
  (VTBL_ENTRY)&_ZN6S211C63v38Ev,
  (VTBL_ENTRY)&_ZN6S211C63v39Ev,
  (VTBL_ENTRY)&_ZN6S211C63v40Ev,
  (VTBL_ENTRY)&_ZN6S211C63v41Ev,
  (VTBL_ENTRY)&_ZN6S211C63v42Ev,
  (VTBL_ENTRY)&_ZN6S211C63v43Ev,
  (VTBL_ENTRY)&_ZN6S211C63v44Ev,
  (VTBL_ENTRY)&_ZN6S211C63v45Ev,
  (VTBL_ENTRY)&_ZN6S211C63v46Ev,
  (VTBL_ENTRY)&_ZN6S211C63v47Ev,
  (VTBL_ENTRY)&_ZN6S211C63v48Ev,
  (VTBL_ENTRY)&_ZN6S211C63v49Ev,
  (VTBL_ENTRY)&_ZN6S211C63v50Ev,
  (VTBL_ENTRY)&_ZN6S211C63v51Ev,
  (VTBL_ENTRY)&_ZN6S211C63v52Ev,
  (VTBL_ENTRY)&_ZN6S211C63v53Ev,
  (VTBL_ENTRY)&_ZN6S211C63v54Ev,
  (VTBL_ENTRY)&_ZN6S211C63v55Ev,
  (VTBL_ENTRY)&_ZN6S211C63v56Ev,
  (VTBL_ENTRY)&_ZN6S211C63v57Ev,
  (VTBL_ENTRY)&_ZN6S211C63v58Ev,
  (VTBL_ENTRY)&_ZN6S211C63v59Ev,
  (VTBL_ENTRY)&_ZN6S211C63v60Ev,
  (VTBL_ENTRY)&_ZN6S211C63v61Ev,
  (VTBL_ENTRY)&_ZN6S211C63v62Ev,
  (VTBL_ENTRY)&_ZN6S211C63v63Ev,
  (VTBL_ENTRY)&_ZN6S211C63v64Ev,
  (VTBL_ENTRY)&_ZN6S211C63v65Ev,
  (VTBL_ENTRY)&_ZN6S211C63v66Ev,
  (VTBL_ENTRY)&_ZN6S211C63v67Ev,
  (VTBL_ENTRY)&_ZN6S211C53v68Ev,
  (VTBL_ENTRY)&_ZN6S211C53v69Ev,
  (VTBL_ENTRY)&_ZN6S211C53v70Ev,
  (VTBL_ENTRY)&_ZN6S211C53v71Ev,
  (VTBL_ENTRY)&_ZN6S211C53v72Ev,
  (VTBL_ENTRY)&_ZN6S211C53v73Ev,
  (VTBL_ENTRY)&_ZN6S211C53v74Ev,
  (VTBL_ENTRY)&_ZN6S211C53v75Ev,
  (VTBL_ENTRY)&_ZN6S211C53v76Ev,
  (VTBL_ENTRY)&_ZN6S211C53v77Ev,
  (VTBL_ENTRY)&_ZN6S211C53v78Ev,
  (VTBL_ENTRY)&_ZN6S211C53v79Ev,
  (VTBL_ENTRY)&_ZN6S211C53v80Ev,
  (VTBL_ENTRY)&_ZN6S211C53v81Ev,
  (VTBL_ENTRY)&_ZN6S211C53v82Ev,
  (VTBL_ENTRY)&_ZN6S211C53v83Ev,
  (VTBL_ENTRY)&_ZN6S211C53v84Ev,
  (VTBL_ENTRY)&_ZN6S211C53v85Ev,
  (VTBL_ENTRY)&_ZN6S211C53v86Ev,
  (VTBL_ENTRY)&_ZN6S211C53v87Ev,
  (VTBL_ENTRY)&_ZN6S211C53v88Ev,
  (VTBL_ENTRY)&_ZN6S211C53v89Ev,
  (VTBL_ENTRY)&_ZN6S211C43v90Ev,
  (VTBL_ENTRY)&_ZN6S211C43v91Ev,
  (VTBL_ENTRY)&_ZN6S211C43v92Ev,
  (VTBL_ENTRY)&_ZN6S211C43v93Ev,
  (VTBL_ENTRY)&_ZN6S211C43v94Ev,
  (VTBL_ENTRY)&_ZN6S211C43v95Ev,
  (VTBL_ENTRY)&_ZN6S211C43v96Ev,
  (VTBL_ENTRY)&_ZN6S211C43v97Ev,
  (VTBL_ENTRY)&_ZN6S211C43v98Ev,
  (VTBL_ENTRY)&_ZN6S211C43v99Ev,
  (VTBL_ENTRY)&_ZN6S211C44v100Ev,
  (VTBL_ENTRY)&_ZN6S211C44v101Ev,
  (VTBL_ENTRY)&_ZN6S211C44v102Ev,
  (VTBL_ENTRY)&_ZN6S211C44v103Ev,
  (VTBL_ENTRY)&_ZN6S211C44v104Ev,
  (VTBL_ENTRY)&_ZN6S211C44v105Ev,
  (VTBL_ENTRY)&_ZN6S211C44v106Ev,
  (VTBL_ENTRY)&_ZN6S211C44v107Ev,
  (VTBL_ENTRY)&_ZN6S211C44v108Ev,
  (VTBL_ENTRY)&_ZN6S211C44v109Ev,
  (VTBL_ENTRY)&_ZN6S211C34v110Ev,
  (VTBL_ENTRY)&_ZN6S211C34v111Ev,
  (VTBL_ENTRY)&_ZN6S211C34v112Ev,
  (VTBL_ENTRY)&_ZN6S211C34v113Ev,
};
extern VTBL_ENTRY _ZTI6S211C3[];
extern  VTBL_ENTRY _ZTV6S211C3[];
Class_Descriptor cd_S211C3 = {  "S211C3", // class name
  bases_S211C3, 3,
  &(vtc_S211C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S211C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S211C3),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  S211C2  : S211C3 {
  virtual  ~S211C2(); // _ZN6S211C2D1Ev
  virtual void  v114(); // _ZN6S211C24v114Ev
  virtual void  v115(); // _ZN6S211C24v115Ev
  S211C2(); // tgen
};
//SIG(-1 S211C2) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ 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] 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 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 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC18{ BC19{ BC10}} Fi[3]} vd v109 v110 v111 v112 FC6 Fi:1 FC20{ BC21{ BC10}}} vd v1 v2}


 S211C2 ::~S211C2(){ note_dtor("S211C2", this);}
void  S211C2 ::v114(){vfunc_called(this, "_ZN6S211C24v114Ev");}
void  S211C2 ::v115(){vfunc_called(this, "_ZN6S211C24v115Ev");}
S211C2 ::S211C2(){ note_ctor("S211C2", this);} // tgen

static void Test_S211C2()
{
  extern Class_Descriptor cd_S211C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S211C2, buf);
    S211C2 *dp, &lv = *(dp=new (buf) S211C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S211C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S211C2)");
    check_base_class_offset(lv, (S211C6*)(S211C5*)(S211C4*)(S211C3*), 0, "S211C2");
    check_base_class_offset(lv, (S211C5*)(S211C4*)(S211C3*), 0, "S211C2");
    check_base_class_offset(lv, (S211C4*)(S211C3*), 0, "S211C2");
    check_base_class_offset(lv, (S211C3*), 0, "S211C2");
    test_class_info(&lv, &cd_S211C2);
    dp->~S211C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS211C2(Test_S211C2, "S211C2", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S211C2C1Ev();
extern void _ZN6S211C2D1Ev();
Name_Map name_map_S211C2[] = {
  NSPAIR(_ZN6S211C2C1Ev),
  NSPAIR(_ZN6S211C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S211C6;
extern VTBL_ENTRY _ZTI6S211C6[];
extern  VTBL_ENTRY _ZTV6S211C6[];
extern Class_Descriptor cd_S211C5;
extern VTBL_ENTRY _ZTI6S211C5[];
extern  VTBL_ENTRY _ZTV6S211C5[];
extern Class_Descriptor cd_S211C4;
extern VTBL_ENTRY _ZTI6S211C4[];
extern  VTBL_ENTRY _ZTV6S211C4[];
extern Class_Descriptor cd_S211C3;
extern VTBL_ENTRY _ZTI6S211C3[];
extern  VTBL_ENTRY _ZTV6S211C3[];
static Base_Class bases_S211C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S211C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S211C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S211C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S211C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S211C2[];
extern void _ZN6S211C2D1Ev();
extern void _ZN6S211C2D0Ev();
extern void _ZN6S211C62v4Ev();
extern void _ZN6S211C62v5Ev();
extern void _ZN6S211C62v6Ev();
extern void _ZN6S211C62v7Ev();
extern void _ZN6S211C62v8Ev();
extern void _ZN6S211C62v9Ev();
extern void _ZN6S211C63v10Ev();
extern void _ZN6S211C63v11Ev();
extern void _ZN6S211C63v12Ev();
extern void _ZN6S211C63v13Ev();
extern void _ZN6S211C63v14Ev();
extern void _ZN6S211C63v15Ev();
extern void _ZN6S211C63v16Ev();
extern void _ZN6S211C63v17Ev();
extern void _ZN6S211C63v18Ev();
extern void _ZN6S211C63v19Ev();
extern void _ZN6S211C63v20Ev();
extern void _ZN6S211C63v21Ev();
extern void _ZN6S211C63v22Ev();
extern void _ZN6S211C63v23Ev();
extern void _ZN6S211C63v24Ev();
extern void _ZN6S211C63v25Ev();
extern void _ZN6S211C63v26Ev();
extern void _ZN6S211C63v27Ev();
extern void _ZN6S211C63v28Ev();
extern void _ZN6S211C63v29Ev();
extern void _ZN6S211C63v30Ev();
extern void _ZN6S211C63v31Ev();
extern void _ZN6S211C63v32Ev();
extern void _ZN6S211C63v33Ev();
extern void _ZN6S211C63v34Ev();
extern void _ZN6S211C63v35Ev();
extern void _ZN6S211C63v36Ev();
extern void _ZN6S211C63v37Ev();
extern void _ZN6S211C63v38Ev();
extern void _ZN6S211C63v39Ev();
extern void _ZN6S211C63v40Ev();
extern void _ZN6S211C63v41Ev();
extern void _ZN6S211C63v42Ev();
extern void _ZN6S211C63v43Ev();
extern void _ZN6S211C63v44Ev();
extern void _ZN6S211C63v45Ev();
extern void _ZN6S211C63v46Ev();
extern void _ZN6S211C63v47Ev();
extern void _ZN6S211C63v48Ev();
extern void _ZN6S211C63v49Ev();
extern void _ZN6S211C63v50Ev();
extern void _ZN6S211C63v51Ev();
extern void _ZN6S211C63v52Ev();
extern void _ZN6S211C63v53Ev();
extern void _ZN6S211C63v54Ev();
extern void _ZN6S211C63v55Ev();
extern void _ZN6S211C63v56Ev();
extern void _ZN6S211C63v57Ev();
extern void _ZN6S211C63v58Ev();
extern void _ZN6S211C63v59Ev();
extern void _ZN6S211C63v60Ev();
extern void _ZN6S211C63v61Ev();
extern void _ZN6S211C63v62Ev();
extern void _ZN6S211C63v63Ev();
extern void _ZN6S211C63v64Ev();
extern void _ZN6S211C63v65Ev();
extern void _ZN6S211C63v66Ev();
extern void _ZN6S211C63v67Ev();
extern void _ZN6S211C53v68Ev();
extern void _ZN6S211C53v69Ev();
extern void _ZN6S211C53v70Ev();
extern void _ZN6S211C53v71Ev();
extern void _ZN6S211C53v72Ev();
extern void _ZN6S211C53v73Ev();
extern void _ZN6S211C53v74Ev();
extern void _ZN6S211C53v75Ev();
extern void _ZN6S211C53v76Ev();
extern void _ZN6S211C53v77Ev();
extern void _ZN6S211C53v78Ev();
extern void _ZN6S211C53v79Ev();
extern void _ZN6S211C53v80Ev();
extern void _ZN6S211C53v81Ev();
extern void _ZN6S211C53v82Ev();
extern void _ZN6S211C53v83Ev();
extern void _ZN6S211C53v84Ev();
extern void _ZN6S211C53v85Ev();
extern void _ZN6S211C53v86Ev();
extern void _ZN6S211C53v87Ev();
extern void _ZN6S211C53v88Ev();
extern void _ZN6S211C53v89Ev();
extern void _ZN6S211C43v90Ev();
extern void _ZN6S211C43v91Ev();
extern void _ZN6S211C43v92Ev();
extern void _ZN6S211C43v93Ev();
extern void _ZN6S211C43v94Ev();
extern void _ZN6S211C43v95Ev();
extern void _ZN6S211C43v96Ev();
extern void _ZN6S211C43v97Ev();
extern void _ZN6S211C43v98Ev();
extern void _ZN6S211C43v99Ev();
extern void _ZN6S211C44v100Ev();
extern void _ZN6S211C44v101Ev();
extern void _ZN6S211C44v102Ev();
extern void _ZN6S211C44v103Ev();
extern void _ZN6S211C44v104Ev();
extern void _ZN6S211C44v105Ev();
extern void _ZN6S211C44v106Ev();
extern void _ZN6S211C44v107Ev();
extern void _ZN6S211C44v108Ev();
extern void _ZN6S211C44v109Ev();
extern void _ZN6S211C34v110Ev();
extern void _ZN6S211C34v111Ev();
extern void _ZN6S211C34v112Ev();
extern void _ZN6S211C34v113Ev();
extern void _ZN6S211C24v114Ev();
extern void _ZN6S211C24v115Ev();
static  VTBL_ENTRY vtc_S211C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S211C2[0]),
  (VTBL_ENTRY)&_ZN6S211C2D1Ev,
  (VTBL_ENTRY)&_ZN6S211C2D0Ev,
  (VTBL_ENTRY)&_ZN6S211C62v4Ev,
  (VTBL_ENTRY)&_ZN6S211C62v5Ev,
  (VTBL_ENTRY)&_ZN6S211C62v6Ev,
  (VTBL_ENTRY)&_ZN6S211C62v7Ev,
  (VTBL_ENTRY)&_ZN6S211C62v8Ev,
  (VTBL_ENTRY)&_ZN6S211C62v9Ev,
  (VTBL_ENTRY)&_ZN6S211C63v10Ev,
  (VTBL_ENTRY)&_ZN6S211C63v11Ev,
  (VTBL_ENTRY)&_ZN6S211C63v12Ev,
  (VTBL_ENTRY)&_ZN6S211C63v13Ev,
  (VTBL_ENTRY)&_ZN6S211C63v14Ev,
  (VTBL_ENTRY)&_ZN6S211C63v15Ev,
  (VTBL_ENTRY)&_ZN6S211C63v16Ev,
  (VTBL_ENTRY)&_ZN6S211C63v17Ev,
  (VTBL_ENTRY)&_ZN6S211C63v18Ev,
  (VTBL_ENTRY)&_ZN6S211C63v19Ev,
  (VTBL_ENTRY)&_ZN6S211C63v20Ev,
  (VTBL_ENTRY)&_ZN6S211C63v21Ev,
  (VTBL_ENTRY)&_ZN6S211C63v22Ev,
  (VTBL_ENTRY)&_ZN6S211C63v23Ev,
  (VTBL_ENTRY)&_ZN6S211C63v24Ev,
  (VTBL_ENTRY)&_ZN6S211C63v25Ev,
  (VTBL_ENTRY)&_ZN6S211C63v26Ev,
  (VTBL_ENTRY)&_ZN6S211C63v27Ev,
  (VTBL_ENTRY)&_ZN6S211C63v28Ev,
  (VTBL_ENTRY)&_ZN6S211C63v29Ev,
  (VTBL_ENTRY)&_ZN6S211C63v30Ev,
  (VTBL_ENTRY)&_ZN6S211C63v31Ev,
  (VTBL_ENTRY)&_ZN6S211C63v32Ev,
  (VTBL_ENTRY)&_ZN6S211C63v33Ev,
  (VTBL_ENTRY)&_ZN6S211C63v34Ev,
  (VTBL_ENTRY)&_ZN6S211C63v35Ev,
  (VTBL_ENTRY)&_ZN6S211C63v36Ev,
  (VTBL_ENTRY)&_ZN6S211C63v37Ev,
  (VTBL_ENTRY)&_ZN6S211C63v38Ev,
  (VTBL_ENTRY)&_ZN6S211C63v39Ev,
  (VTBL_ENTRY)&_ZN6S211C63v40Ev,
  (VTBL_ENTRY)&_ZN6S211C63v41Ev,
  (VTBL_ENTRY)&_ZN6S211C63v42Ev,
  (VTBL_ENTRY)&_ZN6S211C63v43Ev,
  (VTBL_ENTRY)&_ZN6S211C63v44Ev,
  (VTBL_ENTRY)&_ZN6S211C63v45Ev,
  (VTBL_ENTRY)&_ZN6S211C63v46Ev,
  (VTBL_ENTRY)&_ZN6S211C63v47Ev,
  (VTBL_ENTRY)&_ZN6S211C63v48Ev,
  (VTBL_ENTRY)&_ZN6S211C63v49Ev,
  (VTBL_ENTRY)&_ZN6S211C63v50Ev,
  (VTBL_ENTRY)&_ZN6S211C63v51Ev,
  (VTBL_ENTRY)&_ZN6S211C63v52Ev,
  (VTBL_ENTRY)&_ZN6S211C63v53Ev,
  (VTBL_ENTRY)&_ZN6S211C63v54Ev,
  (VTBL_ENTRY)&_ZN6S211C63v55Ev,
  (VTBL_ENTRY)&_ZN6S211C63v56Ev,
  (VTBL_ENTRY)&_ZN6S211C63v57Ev,
  (VTBL_ENTRY)&_ZN6S211C63v58Ev,
  (VTBL_ENTRY)&_ZN6S211C63v59Ev,
  (VTBL_ENTRY)&_ZN6S211C63v60Ev,
  (VTBL_ENTRY)&_ZN6S211C63v61Ev,
  (VTBL_ENTRY)&_ZN6S211C63v62Ev,
  (VTBL_ENTRY)&_ZN6S211C63v63Ev,
  (VTBL_ENTRY)&_ZN6S211C63v64Ev,
  (VTBL_ENTRY)&_ZN6S211C63v65Ev,
  (VTBL_ENTRY)&_ZN6S211C63v66Ev,
  (VTBL_ENTRY)&_ZN6S211C63v67Ev,
  (VTBL_ENTRY)&_ZN6S211C53v68Ev,
  (VTBL_ENTRY)&_ZN6S211C53v69Ev,
  (VTBL_ENTRY)&_ZN6S211C53v70Ev,
  (VTBL_ENTRY)&_ZN6S211C53v71Ev,
  (VTBL_ENTRY)&_ZN6S211C53v72Ev,
  (VTBL_ENTRY)&_ZN6S211C53v73Ev,
  (VTBL_ENTRY)&_ZN6S211C53v74Ev,
  (VTBL_ENTRY)&_ZN6S211C53v75Ev,
  (VTBL_ENTRY)&_ZN6S211C53v76Ev,
  (VTBL_ENTRY)&_ZN6S211C53v77Ev,
  (VTBL_ENTRY)&_ZN6S211C53v78Ev,
  (VTBL_ENTRY)&_ZN6S211C53v79Ev,
  (VTBL_ENTRY)&_ZN6S211C53v80Ev,
  (VTBL_ENTRY)&_ZN6S211C53v81Ev,
  (VTBL_ENTRY)&_ZN6S211C53v82Ev,
  (VTBL_ENTRY)&_ZN6S211C53v83Ev,
  (VTBL_ENTRY)&_ZN6S211C53v84Ev,
  (VTBL_ENTRY)&_ZN6S211C53v85Ev,
  (VTBL_ENTRY)&_ZN6S211C53v86Ev,
  (VTBL_ENTRY)&_ZN6S211C53v87Ev,
  (VTBL_ENTRY)&_ZN6S211C53v88Ev,
  (VTBL_ENTRY)&_ZN6S211C53v89Ev,
  (VTBL_ENTRY)&_ZN6S211C43v90Ev,
  (VTBL_ENTRY)&_ZN6S211C43v91Ev,
  (VTBL_ENTRY)&_ZN6S211C43v92Ev,
  (VTBL_ENTRY)&_ZN6S211C43v93Ev,
  (VTBL_ENTRY)&_ZN6S211C43v94Ev,
  (VTBL_ENTRY)&_ZN6S211C43v95Ev,
  (VTBL_ENTRY)&_ZN6S211C43v96Ev,
  (VTBL_ENTRY)&_ZN6S211C43v97Ev,
  (VTBL_ENTRY)&_ZN6S211C43v98Ev,
  (VTBL_ENTRY)&_ZN6S211C43v99Ev,
  (VTBL_ENTRY)&_ZN6S211C44v100Ev,
  (VTBL_ENTRY)&_ZN6S211C44v101Ev,
  (VTBL_ENTRY)&_ZN6S211C44v102Ev,
  (VTBL_ENTRY)&_ZN6S211C44v103Ev,
  (VTBL_ENTRY)&_ZN6S211C44v104Ev,
  (VTBL_ENTRY)&_ZN6S211C44v105Ev,
  (VTBL_ENTRY)&_ZN6S211C44v106Ev,
  (VTBL_ENTRY)&_ZN6S211C44v107Ev,
  (VTBL_ENTRY)&_ZN6S211C44v108Ev,
  (VTBL_ENTRY)&_ZN6S211C44v109Ev,
  (VTBL_ENTRY)&_ZN6S211C34v110Ev,
  (VTBL_ENTRY)&_ZN6S211C34v111Ev,
  (VTBL_ENTRY)&_ZN6S211C34v112Ev,
  (VTBL_ENTRY)&_ZN6S211C34v113Ev,
  (VTBL_ENTRY)&_ZN6S211C24v114Ev,
  (VTBL_ENTRY)&_ZN6S211C24v115Ev,
};
extern VTBL_ENTRY _ZTI6S211C2[];
extern  VTBL_ENTRY _ZTV6S211C2[];
Class_Descriptor cd_S211C2 = {  "S211C2", // class name
  bases_S211C2, 4,
  &(vtc_S211C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S211C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S211C2),116, //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  S211C1  : S211C2 {
  unsigned int s211c1f0:1;
  virtual  ~S211C1(); // _ZN6S211C1D1Ev
  virtual void  v1(); // _ZN6S211C12v1Ev
  virtual void  v2(); // _ZN6S211C12v2Ev
  virtual void  v3(); // _ZN6S211C12v3Ev
  S211C1(); // tgen
};
//SIG(1 S211C1) 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 FC7 Fi:1 FC21{ BC22{ BC11}}} vd v114 v115} vd v1 v2 v3 Fi:1}


 S211C1 ::~S211C1(){ note_dtor("S211C1", this);}
void  S211C1 ::v1(){vfunc_called(this, "_ZN6S211C12v1Ev");}
void  S211C1 ::v2(){vfunc_called(this, "_ZN6S211C12v2Ev");}
void  S211C1 ::v3(){vfunc_called(this, "_ZN6S211C12v3Ev");}
S211C1 ::S211C1(){ note_ctor("S211C1", this);} // tgen

static void Test_S211C1()
{
  extern Class_Descriptor cd_S211C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,57)];
    init_test(&cd_S211C1, buf);
    S211C1 *dp, &lv = *(dp=new (buf) S211C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,224), "sizeof(S211C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S211C1)");
    check_base_class_offset(lv, (S211C6*)(S211C5*)(S211C4*)(S211C3*)(S211C2*), 0, "S211C1");
    check_base_class_offset(lv, (S211C5*)(S211C4*)(S211C3*)(S211C2*), 0, "S211C1");
    check_base_class_offset(lv, (S211C4*)(S211C3*)(S211C2*), 0, "S211C1");
    check_base_class_offset(lv, (S211C3*)(S211C2*), 0, "S211C1");
    check_base_class_offset(lv, (S211C2*), 0, "S211C1");
    set_bf_and_test(lv, s211c1f0, ABISELECT(296,220), 0, 1, 1, "S211C1");
    test_class_info(&lv, &cd_S211C1);
    dp->~S211C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS211C1(Test_S211C1, "S211C1", ABISELECT(304,224));

#else // __cplusplus

extern void _ZN6S211C1C1Ev();
extern void _ZN6S211C1D1Ev();
Name_Map name_map_S211C1[] = {
  NSPAIR(_ZN6S211C1C1Ev),
  NSPAIR(_ZN6S211C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S211C6;
extern VTBL_ENTRY _ZTI6S211C6[];
extern  VTBL_ENTRY _ZTV6S211C6[];
extern Class_Descriptor cd_S211C5;
extern VTBL_ENTRY _ZTI6S211C5[];
extern  VTBL_ENTRY _ZTV6S211C5[];
extern Class_Descriptor cd_S211C4;
extern VTBL_ENTRY _ZTI6S211C4[];
extern  VTBL_ENTRY _ZTV6S211C4[];
extern Class_Descriptor cd_S211C3;
extern VTBL_ENTRY _ZTI6S211C3[];
extern  VTBL_ENTRY _ZTV6S211C3[];
extern Class_Descriptor cd_S211C2;
extern VTBL_ENTRY _ZTI6S211C2[];
extern  VTBL_ENTRY _ZTV6S211C2[];
static Base_Class bases_S211C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S211C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S211C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S211C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S211C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S211C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S211C1[];
extern void _ZN6S211C1D1Ev();
extern void _ZN6S211C1D0Ev();
extern void _ZN6S211C62v4Ev();
extern void _ZN6S211C62v5Ev();
extern void _ZN6S211C62v6Ev();
extern void _ZN6S211C62v7Ev();
extern void _ZN6S211C62v8Ev();
extern void _ZN6S211C62v9Ev();
extern void _ZN6S211C63v10Ev();
extern void _ZN6S211C63v11Ev();
extern void _ZN6S211C63v12Ev();
extern void _ZN6S211C63v13Ev();
extern void _ZN6S211C63v14Ev();
extern void _ZN6S211C63v15Ev();
extern void _ZN6S211C63v16Ev();
extern void _ZN6S211C63v17Ev();
extern void _ZN6S211C63v18Ev();
extern void _ZN6S211C63v19Ev();
extern void _ZN6S211C63v20Ev();
extern void _ZN6S211C63v21Ev();
extern void _ZN6S211C63v22Ev();
extern void _ZN6S211C63v23Ev();
extern void _ZN6S211C63v24Ev();
extern void _ZN6S211C63v25Ev();
extern void _ZN6S211C63v26Ev();
extern void _ZN6S211C63v27Ev();
extern void _ZN6S211C63v28Ev();
extern void _ZN6S211C63v29Ev();
extern void _ZN6S211C63v30Ev();
extern void _ZN6S211C63v31Ev();
extern void _ZN6S211C63v32Ev();
extern void _ZN6S211C63v33Ev();
extern void _ZN6S211C63v34Ev();
extern void _ZN6S211C63v35Ev();
extern void _ZN6S211C63v36Ev();
extern void _ZN6S211C63v37Ev();
extern void _ZN6S211C63v38Ev();
extern void _ZN6S211C63v39Ev();
extern void _ZN6S211C63v40Ev();
extern void _ZN6S211C63v41Ev();
extern void _ZN6S211C63v42Ev();
extern void _ZN6S211C63v43Ev();
extern void _ZN6S211C63v44Ev();
extern void _ZN6S211C63v45Ev();
extern void _ZN6S211C63v46Ev();
extern void _ZN6S211C63v47Ev();
extern void _ZN6S211C63v48Ev();
extern void _ZN6S211C63v49Ev();
extern void _ZN6S211C63v50Ev();
extern void _ZN6S211C63v51Ev();
extern void _ZN6S211C63v52Ev();
extern void _ZN6S211C63v53Ev();
extern void _ZN6S211C63v54Ev();
extern void _ZN6S211C63v55Ev();
extern void _ZN6S211C63v56Ev();
extern void _ZN6S211C63v57Ev();
extern void _ZN6S211C63v58Ev();
extern void _ZN6S211C63v59Ev();
extern void _ZN6S211C63v60Ev();
extern void _ZN6S211C63v61Ev();
extern void _ZN6S211C63v62Ev();
extern void _ZN6S211C63v63Ev();
extern void _ZN6S211C63v64Ev();
extern void _ZN6S211C63v65Ev();
extern void _ZN6S211C63v66Ev();
extern void _ZN6S211C63v67Ev();
extern void _ZN6S211C53v68Ev();
extern void _ZN6S211C53v69Ev();
extern void _ZN6S211C53v70Ev();
extern void _ZN6S211C53v71Ev();
extern void _ZN6S211C53v72Ev();
extern void _ZN6S211C53v73Ev();
extern void _ZN6S211C53v74Ev();
extern void _ZN6S211C53v75Ev();
extern void _ZN6S211C53v76Ev();
extern void _ZN6S211C53v77Ev();
extern void _ZN6S211C53v78Ev();
extern void _ZN6S211C53v79Ev();
extern void _ZN6S211C53v80Ev();
extern void _ZN6S211C53v81Ev();
extern void _ZN6S211C53v82Ev();
extern void _ZN6S211C53v83Ev();
extern void _ZN6S211C53v84Ev();
extern void _ZN6S211C53v85Ev();
extern void _ZN6S211C53v86Ev();
extern void _ZN6S211C53v87Ev();
extern void _ZN6S211C53v88Ev();
extern void _ZN6S211C53v89Ev();
extern void _ZN6S211C43v90Ev();
extern void _ZN6S211C43v91Ev();
extern void _ZN6S211C43v92Ev();
extern void _ZN6S211C43v93Ev();
extern void _ZN6S211C43v94Ev();
extern void _ZN6S211C43v95Ev();
extern void _ZN6S211C43v96Ev();
extern void _ZN6S211C43v97Ev();
extern void _ZN6S211C43v98Ev();
extern void _ZN6S211C43v99Ev();
extern void _ZN6S211C44v100Ev();
extern void _ZN6S211C44v101Ev();
extern void _ZN6S211C44v102Ev();
extern void _ZN6S211C44v103Ev();
extern void _ZN6S211C44v104Ev();
extern void _ZN6S211C44v105Ev();
extern void _ZN6S211C44v106Ev();
extern void _ZN6S211C44v107Ev();
extern void _ZN6S211C44v108Ev();
extern void _ZN6S211C44v109Ev();
extern void _ZN6S211C34v110Ev();
extern void _ZN6S211C34v111Ev();
extern void _ZN6S211C34v112Ev();
extern void _ZN6S211C34v113Ev();
extern void _ZN6S211C24v114Ev();
extern void _ZN6S211C24v115Ev();
extern void _ZN6S211C12v1Ev();
extern void _ZN6S211C12v2Ev();
extern void _ZN6S211C12v3Ev();
static  VTBL_ENTRY vtc_S211C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S211C1[0]),
  (VTBL_ENTRY)&_ZN6S211C1D1Ev,
  (VTBL_ENTRY)&_ZN6S211C1D0Ev,
  (VTBL_ENTRY)&_ZN6S211C62v4Ev,
  (VTBL_ENTRY)&_ZN6S211C62v5Ev,
  (VTBL_ENTRY)&_ZN6S211C62v6Ev,
  (VTBL_ENTRY)&_ZN6S211C62v7Ev,
  (VTBL_ENTRY)&_ZN6S211C62v8Ev,
  (VTBL_ENTRY)&_ZN6S211C62v9Ev,
  (VTBL_ENTRY)&_ZN6S211C63v10Ev,
  (VTBL_ENTRY)&_ZN6S211C63v11Ev,
  (VTBL_ENTRY)&_ZN6S211C63v12Ev,
  (VTBL_ENTRY)&_ZN6S211C63v13Ev,
  (VTBL_ENTRY)&_ZN6S211C63v14Ev,
  (VTBL_ENTRY)&_ZN6S211C63v15Ev,
  (VTBL_ENTRY)&_ZN6S211C63v16Ev,
  (VTBL_ENTRY)&_ZN6S211C63v17Ev,
  (VTBL_ENTRY)&_ZN6S211C63v18Ev,
  (VTBL_ENTRY)&_ZN6S211C63v19Ev,
  (VTBL_ENTRY)&_ZN6S211C63v20Ev,
  (VTBL_ENTRY)&_ZN6S211C63v21Ev,
  (VTBL_ENTRY)&_ZN6S211C63v22Ev,
  (VTBL_ENTRY)&_ZN6S211C63v23Ev,
  (VTBL_ENTRY)&_ZN6S211C63v24Ev,
  (VTBL_ENTRY)&_ZN6S211C63v25Ev,
  (VTBL_ENTRY)&_ZN6S211C63v26Ev,
  (VTBL_ENTRY)&_ZN6S211C63v27Ev,
  (VTBL_ENTRY)&_ZN6S211C63v28Ev,
  (VTBL_ENTRY)&_ZN6S211C63v29Ev,
  (VTBL_ENTRY)&_ZN6S211C63v30Ev,
  (VTBL_ENTRY)&_ZN6S211C63v31Ev,
  (VTBL_ENTRY)&_ZN6S211C63v32Ev,
  (VTBL_ENTRY)&_ZN6S211C63v33Ev,
  (VTBL_ENTRY)&_ZN6S211C63v34Ev,
  (VTBL_ENTRY)&_ZN6S211C63v35Ev,
  (VTBL_ENTRY)&_ZN6S211C63v36Ev,
  (VTBL_ENTRY)&_ZN6S211C63v37Ev,
  (VTBL_ENTRY)&_ZN6S211C63v38Ev,
  (VTBL_ENTRY)&_ZN6S211C63v39Ev,
  (VTBL_ENTRY)&_ZN6S211C63v40Ev,
  (VTBL_ENTRY)&_ZN6S211C63v41Ev,
  (VTBL_ENTRY)&_ZN6S211C63v42Ev,
  (VTBL_ENTRY)&_ZN6S211C63v43Ev,
  (VTBL_ENTRY)&_ZN6S211C63v44Ev,
  (VTBL_ENTRY)&_ZN6S211C63v45Ev,
  (VTBL_ENTRY)&_ZN6S211C63v46Ev,
  (VTBL_ENTRY)&_ZN6S211C63v47Ev,
  (VTBL_ENTRY)&_ZN6S211C63v48Ev,
  (VTBL_ENTRY)&_ZN6S211C63v49Ev,
  (VTBL_ENTRY)&_ZN6S211C63v50Ev,
  (VTBL_ENTRY)&_ZN6S211C63v51Ev,
  (VTBL_ENTRY)&_ZN6S211C63v52Ev,
  (VTBL_ENTRY)&_ZN6S211C63v53Ev,
  (VTBL_ENTRY)&_ZN6S211C63v54Ev,
  (VTBL_ENTRY)&_ZN6S211C63v55Ev,
  (VTBL_ENTRY)&_ZN6S211C63v56Ev,
  (VTBL_ENTRY)&_ZN6S211C63v57Ev,
  (VTBL_ENTRY)&_ZN6S211C63v58Ev,
  (VTBL_ENTRY)&_ZN6S211C63v59Ev,
  (VTBL_ENTRY)&_ZN6S211C63v60Ev,
  (VTBL_ENTRY)&_ZN6S211C63v61Ev,
  (VTBL_ENTRY)&_ZN6S211C63v62Ev,
  (VTBL_ENTRY)&_ZN6S211C63v63Ev,
  (VTBL_ENTRY)&_ZN6S211C63v64Ev,
  (VTBL_ENTRY)&_ZN6S211C63v65Ev,
  (VTBL_ENTRY)&_ZN6S211C63v66Ev,
  (VTBL_ENTRY)&_ZN6S211C63v67Ev,
  (VTBL_ENTRY)&_ZN6S211C53v68Ev,
  (VTBL_ENTRY)&_ZN6S211C53v69Ev,
  (VTBL_ENTRY)&_ZN6S211C53v70Ev,
  (VTBL_ENTRY)&_ZN6S211C53v71Ev,
  (VTBL_ENTRY)&_ZN6S211C53v72Ev,
  (VTBL_ENTRY)&_ZN6S211C53v73Ev,
  (VTBL_ENTRY)&_ZN6S211C53v74Ev,
  (VTBL_ENTRY)&_ZN6S211C53v75Ev,
  (VTBL_ENTRY)&_ZN6S211C53v76Ev,
  (VTBL_ENTRY)&_ZN6S211C53v77Ev,
  (VTBL_ENTRY)&_ZN6S211C53v78Ev,
  (VTBL_ENTRY)&_ZN6S211C53v79Ev,
  (VTBL_ENTRY)&_ZN6S211C53v80Ev,
  (VTBL_ENTRY)&_ZN6S211C53v81Ev,
  (VTBL_ENTRY)&_ZN6S211C53v82Ev,
  (VTBL_ENTRY)&_ZN6S211C53v83Ev,
  (VTBL_ENTRY)&_ZN6S211C53v84Ev,
  (VTBL_ENTRY)&_ZN6S211C53v85Ev,
  (VTBL_ENTRY)&_ZN6S211C53v86Ev,
  (VTBL_ENTRY)&_ZN6S211C53v87Ev,
  (VTBL_ENTRY)&_ZN6S211C53v88Ev,
  (VTBL_ENTRY)&_ZN6S211C53v89Ev,
  (VTBL_ENTRY)&_ZN6S211C43v90Ev,
  (VTBL_ENTRY)&_ZN6S211C43v91Ev,
  (VTBL_ENTRY)&_ZN6S211C43v92Ev,
  (VTBL_ENTRY)&_ZN6S211C43v93Ev,
  (VTBL_ENTRY)&_ZN6S211C43v94Ev,
  (VTBL_ENTRY)&_ZN6S211C43v95Ev,
  (VTBL_ENTRY)&_ZN6S211C43v96Ev,
  (VTBL_ENTRY)&_ZN6S211C43v97Ev,
  (VTBL_ENTRY)&_ZN6S211C43v98Ev,
  (VTBL_ENTRY)&_ZN6S211C43v99Ev,
  (VTBL_ENTRY)&_ZN6S211C44v100Ev,
  (VTBL_ENTRY)&_ZN6S211C44v101Ev,
  (VTBL_ENTRY)&_ZN6S211C44v102Ev,
  (VTBL_ENTRY)&_ZN6S211C44v103Ev,
  (VTBL_ENTRY)&_ZN6S211C44v104Ev,
  (VTBL_ENTRY)&_ZN6S211C44v105Ev,
  (VTBL_ENTRY)&_ZN6S211C44v106Ev,
  (VTBL_ENTRY)&_ZN6S211C44v107Ev,
  (VTBL_ENTRY)&_ZN6S211C44v108Ev,
  (VTBL_ENTRY)&_ZN6S211C44v109Ev,
  (VTBL_ENTRY)&_ZN6S211C34v110Ev,
  (VTBL_ENTRY)&_ZN6S211C34v111Ev,
  (VTBL_ENTRY)&_ZN6S211C34v112Ev,
  (VTBL_ENTRY)&_ZN6S211C34v113Ev,
  (VTBL_ENTRY)&_ZN6S211C24v114Ev,
  (VTBL_ENTRY)&_ZN6S211C24v115Ev,
  (VTBL_ENTRY)&_ZN6S211C12v1Ev,
  (VTBL_ENTRY)&_ZN6S211C12v2Ev,
  (VTBL_ENTRY)&_ZN6S211C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S211C1[];
extern  VTBL_ENTRY _ZTV6S211C1[];
Class_Descriptor cd_S211C1 = {  "S211C1", // class name
  bases_S211C1, 5,
  &(vtc_S211C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,224), // object size
  NSPAIRA(_ZTI6S211C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S211C1),119, //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  S20680C4  : virtual S20677C3 {
  long double s20680c4f0;
  int s20680c4f1;
  ::S20677C3 s20680c4f2;
  ::S20677C3 s20680c4f3;
  ~S20680C4(); // tgen
  S20680C4(); // tgen
};
//SIG(-1 S20680C4) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S20680C4 ::~S20680C4(){ note_dtor("S20680C4", this);} // tgen
S20680C4 ::S20680C4(){ note_ctor("S20680C4", this);} // tgen

static void Test_S20680C4()
{
  extern Class_Descriptor cd_S20680C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S20680C4, buf);
    S20680C4 *dp, &lv = *(dp=new (buf) S20680C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S20680C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S20680C4");
    check_field_offset(lv, s20680c4f0, ABISELECT(16,4), "S20680C4.s20680c4f0");
    check_field_offset(lv, s20680c4f1, ABISELECT(32,16), "S20680C4.s20680c4f1");
    check_field_offset(lv, s20680c4f2, ABISELECT(40,20), "S20680C4.s20680c4f2");
    check_field_offset(lv, s20680c4f3, ABISELECT(88,60), "S20680C4.s20680c4f3");
    test_class_info(&lv, &cd_S20680C4);
    dp->~S20680C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C4(Test_S20680C4, "S20680C4", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S20680C4C1Ev();
extern void _ZN8S20680C4D1Ev();
Name_Map name_map_S20680C4[] = {
  NSPAIR(_ZN8S20680C4C1Ev),
  NSPAIR(_ZN8S20680C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20680C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20680C4[];
static  VTBL_ENTRY vtc_S20680C4[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
extern VTBL_ENTRY _ZTV8S20680C4[];
static  VTT_ENTRY vtt_S20680C4[] = {
  {&(_ZTV8S20680C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
Class_Descriptor cd_S20680C4 = {  "S20680C4", // class name
  bases_S20680C4, 1,
  &(vtc_S20680C4[0]), // expected_vtbl_contents
  &(vtt_S20680C4[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S20680C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20680C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20680C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20680C2  : virtual S20677C3 , virtual S20680C4 {
  int s20680c2f0;
  ::S20680C4 s20680c2f1;
  __tsi64 s20680c2f2;
  int s20680c2f3;
  void *s20680c2f4;
  virtual void  v3(); // _ZN8S20680C22v3Ev
  virtual void  v4(); // _ZN8S20680C22v4Ev
  ~S20680C2(); // tgen
  S20680C2(); // tgen
};
//SIG(-1 S20680C2) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 FD Fi FC2 FC2} v1 v2 Fi FC3 FL Fi Fp}


void  S20680C2 ::v3(){vfunc_called(this, "_ZN8S20680C22v3Ev");}
void  S20680C2 ::v4(){vfunc_called(this, "_ZN8S20680C22v4Ev");}
S20680C2 ::~S20680C2(){ note_dtor("S20680C2", this);} // tgen
S20680C2 ::S20680C2(){ note_ctor("S20680C2", this);} // tgen

static void Test_S20680C2()
{
  extern Class_Descriptor cd_S20680C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,77)];
    init_test(&cd_S20680C2, buf);
    S20680C2 *dp, &lv = *(dp=new (buf) S20680C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,304), "sizeof(S20680C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C2)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(232,164), "S20680C2");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*), ABISELECT(232,164), "S20680C2");
    check_base_class_offset(lv, (S20680C4*), ABISELECT(288,204), "S20680C2");
    check_field_offset(lv, s20680c2f0, ABISELECT(8,4), "S20680C2.s20680c2f0");
    check_field_offset(lv, s20680c2f1, ABISELECT(16,8), "S20680C2.s20680c2f1");
    check_field_offset(lv, s20680c2f2, ABISELECT(208,148), "S20680C2.s20680c2f2");
    check_field_offset(lv, s20680c2f3, ABISELECT(216,156), "S20680C2.s20680c2f3");
    check_field_offset(lv, s20680c2f4, ABISELECT(224,160), "S20680C2.s20680c2f4");
    test_class_info(&lv, &cd_S20680C2);
    dp->~S20680C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C2(Test_S20680C2, "S20680C2", ABISELECT(432,304));

#else // __cplusplus

extern void _ZN8S20680C2C1Ev();
extern void _ZN8S20680C2D1Ev();
Name_Map name_map_S20680C2[] = {
  NSPAIR(_ZN8S20680C2C1Ev),
  NSPAIR(_ZN8S20680C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
static Base_Class bases_S20680C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(232,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20680C4,    ABISELECT(288,204), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20680C2[];
extern void _ZN8S20680C22v3Ev();
extern void _ZN8S20680C22v4Ev();
static  VTBL_ENTRY vtc_S20680C2[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C2[0]),
  (VTBL_ENTRY)&_ZN8S20680C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20680C22v4Ev,
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI8S20680C2[0]),
};
extern VTBL_ENTRY _ZTV8S20680C2[];
static  VTBL_ENTRY _tg__ZTV8S20680C4__8S20680C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
static  VTT_ENTRY vtt_S20680C2[] = {
  {&(_ZTV8S20680C2[4]),  4,9},
  {&(_ZTV8S20680C2[9]),  9,9},
  {&(_tg__ZTV8S20680C4__8S20680C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20680C2[];
extern  VTBL_ENTRY _ZTV8S20680C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C2[];
Class_Descriptor cd_S20680C2 = {  "S20680C2", // class name
  bases_S20680C2, 2,
  &(vtc_S20680C2[0]), // expected_vtbl_contents
  &(vtt_S20680C2[0]), // expected_vtt_contents
  ABISELECT(432,304), // object size
  NSPAIRA(_ZTI8S20680C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20680C2),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20680C2),3, //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  S20680C6  : virtual S20677C3 , S20680C4 {
  short s20680c6f0;
  __tsi64 s20680c6f1;
  char s20680c6f2;
  int s20680c6f3[2];
  ::S20680C4 s20680c6f4;
  void *s20680c6f5;
  __tsi64 s20680c6f6;
  int s20680c6f7;
  __tsi64 s20680c6f8;
  int s20680c6f9;
  virtual void  v5(); // _ZN8S20680C62v5Ev
  virtual void  v6(); // _ZN8S20680C62v6Ev
  virtual void  v7(); // _ZN8S20680C62v7Ev
  ~S20680C6(); // tgen
  S20680C6(); // tgen
};
//SIG(-1 S20680C6) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S20680C6 ::v5(){vfunc_called(this, "_ZN8S20680C62v5Ev");}
void  S20680C6 ::v6(){vfunc_called(this, "_ZN8S20680C62v6Ev");}
void  S20680C6 ::v7(){vfunc_called(this, "_ZN8S20680C62v7Ev");}
S20680C6 ::~S20680C6(){ note_dtor("S20680C6", this);} // tgen
S20680C6 ::S20680C6(){ note_ctor("S20680C6", this);} // tgen

static void Test_S20680C6()
{
  extern Class_Descriptor cd_S20680C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S20680C6, buf);
    S20680C6 *dp, &lv = *(dp=new (buf) S20680C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S20680C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C6)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S20680C6");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*), ABISELECT(408,292), "S20680C6");
    check_base_class_offset(lv, (S20680C4*), 0, "S20680C6");
    check_field_offset(lv, s20680c6f0, ABISELECT(136,100), "S20680C6.s20680c6f0");
    check_field_offset(lv, s20680c6f1, ABISELECT(144,104), "S20680C6.s20680c6f1");
    check_field_offset(lv, s20680c6f2, ABISELECT(152,112), "S20680C6.s20680c6f2");
    check_field_offset(lv, s20680c6f3, ABISELECT(156,116), "S20680C6.s20680c6f3");
    check_field_offset(lv, s20680c6f4, ABISELECT(176,124), "S20680C6.s20680c6f4");
    check_field_offset(lv, s20680c6f5, ABISELECT(368,264), "S20680C6.s20680c6f5");
    check_field_offset(lv, s20680c6f6, ABISELECT(376,268), "S20680C6.s20680c6f6");
    check_field_offset(lv, s20680c6f7, ABISELECT(384,276), "S20680C6.s20680c6f7");
    check_field_offset(lv, s20680c6f8, ABISELECT(392,280), "S20680C6.s20680c6f8");
    check_field_offset(lv, s20680c6f9, ABISELECT(400,288), "S20680C6.s20680c6f9");
    test_class_info(&lv, &cd_S20680C6);
    dp->~S20680C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C6(Test_S20680C6, "S20680C6", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S20680C6C1Ev();
extern void _ZN8S20680C6D1Ev();
Name_Map name_map_S20680C6[] = {
  NSPAIR(_ZN8S20680C6C1Ev),
  NSPAIR(_ZN8S20680C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
static Base_Class bases_S20680C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20680C4,    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 _ZTI8S20680C6[];
extern void _ZN8S20680C62v5Ev();
extern void _ZN8S20680C62v6Ev();
extern void _ZN8S20680C62v7Ev();
static  VTBL_ENTRY vtc_S20680C6[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C6[0]),
  (VTBL_ENTRY)&_ZN8S20680C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v7Ev,
};
extern VTBL_ENTRY _ZTV8S20680C6[];
static  VTBL_ENTRY _tg__ZTV8S20680C4__8S20680C6[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
static  VTT_ENTRY vtt_S20680C6[] = {
  {&(_ZTV8S20680C6[3]),  3,6},
  {&(_tg__ZTV8S20680C4__8S20680C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20680C6[];
extern  VTBL_ENTRY _ZTV8S20680C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C6[];
Class_Descriptor cd_S20680C6 = {  "S20680C6", // class name
  bases_S20680C6, 2,
  &(vtc_S20680C6[0]), // expected_vtbl_contents
  &(vtt_S20680C6[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S20680C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20680C6),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20680C6),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  S20680C7  {
  ::S20677C6_nt s20680c7f0;
  ::S20680C4 s20680c7f1;
  ::S20677C6_nt s20680c7f2;
  __tsi64 s20680c7f3;
  ::S20677C6_nt s20680c7f4;
  void *s20680c7f5;
  ::S20677C6_nt s20680c7f6;
  void *s20680c7f7[2];
  ::S20677C6_nt s20680c7f8;
  virtual void  v8(); // _ZN8S20680C72v8Ev
  ~S20680C7(); // tgen
  S20680C7(); // tgen
};
//SIG(-1 S20680C7) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S20680C7 ::v8(){vfunc_called(this, "_ZN8S20680C72v8Ev");}
S20680C7 ::~S20680C7(){ note_dtor("S20680C7", this);} // tgen
S20680C7 ::S20680C7(){ note_ctor("S20680C7", this);} // tgen

static void Test_S20680C7()
{
  extern Class_Descriptor cd_S20680C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S20680C7, buf);
    S20680C7 *dp, &lv = *(dp=new (buf) S20680C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S20680C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C7)");
    check_field_offset(lv, s20680c7f0, ABISELECT(8,4), "S20680C7.s20680c7f0");
    check_field_offset(lv, s20680c7f1, ABISELECT(16,8), "S20680C7.s20680c7f1");
    check_field_offset(lv, s20680c7f2, ABISELECT(208,148), "S20680C7.s20680c7f2");
    check_field_offset(lv, s20680c7f3, ABISELECT(216,152), "S20680C7.s20680c7f3");
    check_field_offset(lv, s20680c7f4, ABISELECT(224,160), "S20680C7.s20680c7f4");
    check_field_offset(lv, s20680c7f5, ABISELECT(232,164), "S20680C7.s20680c7f5");
    check_field_offset(lv, s20680c7f6, ABISELECT(240,168), "S20680C7.s20680c7f6");
    check_field_offset(lv, s20680c7f7, ABISELECT(248,172), "S20680C7.s20680c7f7");
    check_field_offset(lv, s20680c7f8, ABISELECT(264,180), "S20680C7.s20680c7f8");
    test_class_info(&lv, &cd_S20680C7);
    dp->~S20680C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C7(Test_S20680C7, "S20680C7", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN8S20680C7C1Ev();
extern void _ZN8S20680C7D1Ev();
Name_Map name_map_S20680C7[] = {
  NSPAIR(_ZN8S20680C7C1Ev),
  NSPAIR(_ZN8S20680C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20680C7[];
extern void _ZN8S20680C72v8Ev();
static  VTBL_ENTRY vtc_S20680C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C7[0]),
  (VTBL_ENTRY)&_ZN8S20680C72v8Ev,
};
extern VTBL_ENTRY _ZTI8S20680C7[];
extern  VTBL_ENTRY _ZTV8S20680C7[];
Class_Descriptor cd_S20680C7 = {  "S20680C7", // class name
  0,0,//no base classes
  &(vtc_S20680C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI8S20680C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20680C7),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20680C9  : S20680C4 {
  __tsi64 s20680c9f0;
  char s20680c9f1[7];
  void *s20680c9f2;
  int s20680c9f3;
  ::S20677C6_nt s20680c9f4;
  ::S20677C6_nt s20680c9f5;
  char s20680c9f6[10];
  virtual void  v9(); // _ZN8S20680C92v9Ev
  ~S20680C9(); // tgen
  S20680C9(); // tgen
};
//SIG(-1 S20680C9) C1{ BC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} v1 FL Fc[7] Fp Fi FC4{} FC4 Fc[10]}


void  S20680C9 ::v9(){vfunc_called(this, "_ZN8S20680C92v9Ev");}
S20680C9 ::~S20680C9(){ note_dtor("S20680C9", this);} // tgen
S20680C9 ::S20680C9(){ note_ctor("S20680C9", this);} // tgen

static void Test_S20680C9()
{
  extern Class_Descriptor cd_S20680C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,45)];
    init_test(&cd_S20680C9, buf);
    S20680C9 *dp, &lv = *(dp=new (buf) S20680C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,176), "sizeof(S20680C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C9)");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*), ABISELECT(176,136), "S20680C9");
    check_base_class_offset(lv, (S20680C4*), 0, "S20680C9");
    check_field_offset(lv, s20680c9f0, ABISELECT(136,100), "S20680C9.s20680c9f0");
    check_field_offset(lv, s20680c9f1, ABISELECT(144,108), "S20680C9.s20680c9f1");
    check_field_offset(lv, s20680c9f2, ABISELECT(152,116), "S20680C9.s20680c9f2");
    check_field_offset(lv, s20680c9f3, ABISELECT(160,120), "S20680C9.s20680c9f3");
    check_field_offset(lv, s20680c9f4, ABISELECT(164,124), "S20680C9.s20680c9f4");
    check_field_offset(lv, s20680c9f5, ABISELECT(165,125), "S20680C9.s20680c9f5");
    check_field_offset(lv, s20680c9f6, ABISELECT(166,126), "S20680C9.s20680c9f6");
    test_class_info(&lv, &cd_S20680C9);
    dp->~S20680C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C9(Test_S20680C9, "S20680C9", ABISELECT(224,176));

#else // __cplusplus

extern void _ZN8S20680C9C1Ev();
extern void _ZN8S20680C9D1Ev();
Name_Map name_map_S20680C9[] = {
  NSPAIR(_ZN8S20680C9C1Ev),
  NSPAIR(_ZN8S20680C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
static Base_Class bases_S20680C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(176,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
  0, 1},
  {&cd_S20680C4,    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 _ZTI8S20680C9[];
extern void _ZN8S20680C92v9Ev();
static  VTBL_ENTRY vtc_S20680C9[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C9[0]),
  (VTBL_ENTRY)&_ZN8S20680C92v9Ev,
};
extern VTBL_ENTRY _ZTV8S20680C9[];
static  VTBL_ENTRY _tg__ZTV8S20680C4__8S20680C9[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
static  VTT_ENTRY vtt_S20680C9[] = {
  {&(_ZTV8S20680C9[3]),  3,4},
  {&(_tg__ZTV8S20680C4__8S20680C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20680C9[];
extern  VTBL_ENTRY _ZTV8S20680C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C9[];
Class_Descriptor cd_S20680C9 = {  "S20680C9", // class name
  bases_S20680C9, 2,
  &(vtc_S20680C9[0]), // expected_vtbl_contents
  &(vtt_S20680C9[0]), // expected_vtt_contents
  ABISELECT(224,176), // object size
  NSPAIRA(_ZTI8S20680C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20680C9),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20680C9),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  S20680C5  : S20680C6 , virtual S20680C2 , S20680C4 , virtual S20680C7 , virtual S20680C9 {
  long s20680c5f0;
  __tsi64 s20680c5f1;
  long double s20680c5f2;
  ::S20677C6_nt s20680c5f3;
  virtual void  v10(); // _ZN8S20680C53v10Ev
  ~S20680C5(); // tgen
  S20680C5(); // tgen
};
//SIG(-1 S20680C5) C1{ BC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC4 v5 v6 Fi FC4 FL Fi Fp} BC4 VBC6{ v7 FC7{} FC4 FC7 FL FC7 Fp FC7 Fp[2] FC7} VBC8{ BC4 v8 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v1 Fl FL FD FC7}


void  S20680C5 ::v10(){vfunc_called(this, "_ZN8S20680C53v10Ev");}
S20680C5 ::~S20680C5(){ note_dtor("S20680C5", this);} // tgen
S20680C5 ::S20680C5(){ note_ctor("S20680C5", this);} // tgen

static void Test_S20680C5()
{
  extern Class_Descriptor cd_S20680C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(94,262)];
    init_test(&cd_S20680C5, buf);
    S20680C5 *dp, &lv = *(dp=new (buf) S20680C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1488,1044), "sizeof(S20680C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C5)");
    check_base_class_offset(lv, (S20677C3*)(S20680C6*), ABISELECT(600,420), "S20680C5");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*)(S20680C6*), ABISELECT(600,420), "S20680C5");
    check_base_class_offset(lv, (S20677C3*)(S20680C2*), ABISELECT(600,420), "S20680C5");
    /*is_ambiguous_... S20680C5::S20680C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20680C4*), ABISELECT(600,420), "S20680C5");
    /*is_ambiguous_... S20680C5::S20680C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20680C4*), ABISELECT(600,420), "S20680C5");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*)(S20680C9*), ABISELECT(600,420), "S20680C5");
    check_base_class_offset(lv, (S20680C4*)(S20680C6*), 0, "S20680C5");
    check_base_class_offset(lv, (S20680C6*), 0, "S20680C5");
    check_base_class_offset(lv, (S20680C4*)(S20680C2*), ABISELECT(896,624), "S20680C5");
    check_base_class_offset(lv, (S20680C2*), ABISELECT(656,460), "S20680C5");
    /*is_ambiguous_... S20680C5::S20680C4 */ AMB_check_base_class_offset(lv, (S20680C4*), ABISELECT(416,292), "S20680C5");
    check_base_class_offset(lv, (S20680C7*), ABISELECT(1040,724), "S20680C5");
    check_base_class_offset(lv, (S20680C4*)(S20680C9*), ABISELECT(1312,908), "S20680C5");
    check_base_class_offset(lv, (S20680C9*), ABISELECT(1312,908), "S20680C5");
    check_field_offset(lv, s20680c5f0, ABISELECT(552,392), "S20680C5.s20680c5f0");
    check_field_offset(lv, s20680c5f1, ABISELECT(560,396), "S20680C5.s20680c5f1");
    check_field_offset(lv, s20680c5f2, ABISELECT(576,404), "S20680C5.s20680c5f2");
    check_field_offset(lv, s20680c5f3, ABISELECT(592,416), "S20680C5.s20680c5f3");
    test_class_info(&lv, &cd_S20680C5);
    dp->~S20680C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C5(Test_S20680C5, "S20680C5", ABISELECT(1488,1044));

#else // __cplusplus

extern void _ZN8S20680C5C1Ev();
extern void _ZN8S20680C5D1Ev();
Name_Map name_map_S20680C5[] = {
  NSPAIR(_ZN8S20680C5C1Ev),
  NSPAIR(_ZN8S20680C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20680C6;
extern VTBL_ENTRY _ZTI8S20680C6[];
extern  VTBL_ENTRY _ZTV8S20680C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C6[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20680C2;
extern VTBL_ENTRY _ZTI8S20680C2[];
extern  VTBL_ENTRY _ZTV8S20680C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C2[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20680C7;
extern VTBL_ENTRY _ZTI8S20680C7[];
extern  VTBL_ENTRY _ZTV8S20680C7[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20680C9;
extern VTBL_ENTRY _ZTI8S20680C9[];
extern  VTBL_ENTRY _ZTV8S20680C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C9[];
static Base_Class bases_S20680C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(600,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20680C4,    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
    6, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20680C6,    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_S20680C4,    ABISELECT(896,624), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20680C2,    ABISELECT(656,460), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20680C4,    ABISELECT(416,292), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20680C7,    ABISELECT(1040,724), //bcp->offset
    25, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20680C4,    ABISELECT(1312,908), //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
    8, //immediately_derived
  0, 0},
  {&cd_S20680C9,    ABISELECT(1312,908), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20680C5[];
extern void _ZN8S20680C62v5Ev();
extern void _ZN8S20680C62v6Ev();
extern void _ZN8S20680C62v7Ev();
extern void _ZN8S20680C53v10Ev();
extern void _ZN8S20680C22v3Ev();
extern void _ZN8S20680C22v4Ev();
extern void _ZN8S20680C72v8Ev();
extern void _ZN8S20680C92v9Ev();
static  VTBL_ENTRY vtc_S20680C5[] = {
  ABISELECT(1312,908),
  ABISELECT(1040,724),
  ABISELECT(896,624),
  ABISELECT(656,460),
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  (VTBL_ENTRY)&_ZN8S20680C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20680C53v10Ev,
  ABISELECT(184,128),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-56,-40),
  ABISELECT(-656,-460),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  (VTBL_ENTRY)&_ZN8S20680C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20680C22v4Ev,
  ABISELECT(-296,-204),
  ABISELECT(-896,-624),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  0,
  ABISELECT(-1040,-724),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  (VTBL_ENTRY)&_ZN8S20680C72v8Ev,
  0,
  ABISELECT(-712,-488),
  ABISELECT(-1312,-908),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  (VTBL_ENTRY)&_ZN8S20680C92v9Ev,
};
extern VTBL_ENTRY _ZTV8S20680C5[];
extern void _ZN8S20680C62v5Ev();
extern void _ZN8S20680C62v6Ev();
extern void _ZN8S20680C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C6__8S20680C5[] = {
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C6[0]),
  (VTBL_ENTRY)&_ZN8S20680C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20680C48S20680C6__8S20680C5[] = {
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20680C4__A__8S20680C5[] = {
  ABISELECT(184,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
extern void _ZN8S20680C22v3Ev();
extern void _ZN8S20680C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C2__8S20680C5[] = {
  ABISELECT(240,164),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C2[0]),
  (VTBL_ENTRY)&_ZN8S20680C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20680C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20680C4__8S20680C2__8S20680C5[] = {
  ABISELECT(-296,-204),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI8S20680C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20680C4__A1__8S20680C5[] = {
  ABISELECT(-296,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
extern void _ZN8S20680C92v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C9__8S20680C5[] = {
  ABISELECT(-712,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C9[0]),
  (VTBL_ENTRY)&_ZN8S20680C92v9Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20680C48S20680C9__A3__8S20680C5[] = {
  ABISELECT(-712,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
static  VTT_ENTRY vtt_S20680C5[] = {
  {&(_ZTV8S20680C5[7]),  7,34},
  {&(_tg__ZTV8S20680C6__8S20680C5[3]),  3,6},
  {&(_tg__ZTV8S20680C48S20680C6__8S20680C5[3]),  3,3},
  {&(_tg__ZTV8S20680C4__A__8S20680C5[3]),  3,3},
  {&(_ZTV8S20680C5[20]),  20,34},
  {&(_ZTV8S20680C5[25]),  25,34},
  {&(_ZTV8S20680C5[14]),  14,34},
  {&(_ZTV8S20680C5[28]),  28,34},
  {&(_ZTV8S20680C5[33]),  33,34},
  {&(_tg__ZTV8S20680C2__8S20680C5[4]),  4,6},
  {&(_tg__ZTV8S20680C4__8S20680C2__8S20680C5[3]),  3,3},
  {&(_tg__ZTV8S20680C4__A1__8S20680C5[3]),  3,3},
  {&(_tg__ZTV8S20680C9__8S20680C5[3]),  3,4},
  {&(_tg__ZTV8S20680C48S20680C9__A3__8S20680C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20680C5[];
extern  VTBL_ENTRY _ZTV8S20680C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C5[];
Class_Descriptor cd_S20680C5 = {  "S20680C5", // class name
  bases_S20680C5, 9,
  &(vtc_S20680C5[0]), // expected_vtbl_contents
  &(vtt_S20680C5[0]), // expected_vtt_contents
  ABISELECT(1488,1044), // object size
  NSPAIRA(_ZTI8S20680C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20680C5),34, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20680C5),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20680C11  : S20677C3 {
  ::S20677C3 s20680c11f0;
  int s20680c11f1;
  long double s20680c11f2;
  int s20680c11f3;
  __tsi64 s20680c11f4;
  long s20680c11f5;
};
//SIG(-1 S20680C11) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S20680C11()
{
  extern Class_Descriptor cd_S20680C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20680C11, buf);
    S20680C11 &lv = *(new (buf) S20680C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20680C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C11)");
    check_base_class_offset(lv, (S20677C3*), 0, "S20680C11");
    check_field_offset(lv, s20680c11f0, ABISELECT(48,40), "S20680C11.s20680c11f0");
    check_field_offset(lv, s20680c11f1, ABISELECT(96,80), "S20680C11.s20680c11f1");
    check_field_offset(lv, s20680c11f2, ABISELECT(112,84), "S20680C11.s20680c11f2");
    check_field_offset(lv, s20680c11f3, ABISELECT(128,96), "S20680C11.s20680c11f3");
    check_field_offset(lv, s20680c11f4, ABISELECT(136,100), "S20680C11.s20680c11f4");
    check_field_offset(lv, s20680c11f5, ABISELECT(144,108), "S20680C11.s20680c11f5");
    test_class_info(&lv, &cd_S20680C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C11(Test_S20680C11, "S20680C11", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20680C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20680C11[];
Class_Descriptor cd_S20680C11 = {  "S20680C11", // class name
  bases_S20680C11, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI9S20680C11),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20680C10  : virtual S20680C7 , S20680C4 , S20680C11 {
  void *s20680c10f0;
  ::S20680C11 s20680c10f1;
  void *s20680c10f2;
  int s20680c10f3[2];
  long double s20680c10f4;
  int s20680c10f5[2];
  virtual void  v11(); // _ZN9S20680C103v11Ev
  ~S20680C10(); // tgen
  S20680C10(); // tgen
};
//SIG(-1 S20680C10) C1{ VBC2{ v2 FC3{} FC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} FC3 FL FC3 Fp FC3 Fp[2] FC3} BC4 BC6{ BC5 FC5 Fi FD Fi FL Fl} v1 Fp FC6 Fp Fi[2] FD Fi[2]}


void  S20680C10 ::v11(){vfunc_called(this, "_ZN9S20680C103v11Ev");}
S20680C10 ::~S20680C10(){ note_dtor("S20680C10", this);} // tgen
S20680C10 ::S20680C10(){ note_ctor("S20680C10", this);} // tgen

static void Test_S20680C10()
{
  extern Class_Descriptor cd_S20680C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,147)];
    init_test(&cd_S20680C10, buf);
    S20680C10 *dp, &lv = *(dp=new (buf) S20680C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,584), "sizeof(S20680C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C10)");
    check_base_class_offset(lv, (S20680C7*), ABISELECT(512,360), "S20680C10");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*), ABISELECT(784,544), "S20680C10");
    check_base_class_offset(lv, (S20680C4*), 0, "S20680C10");
    check_base_class_offset(lv, (S20677C3*)(S20680C11*), ABISELECT(144,100), "S20680C10");
    check_base_class_offset(lv, (S20680C11*), ABISELECT(144,100), "S20680C10");
    check_field_offset(lv, s20680c10f0, ABISELECT(296,212), "S20680C10.s20680c10f0");
    check_field_offset(lv, s20680c10f1, ABISELECT(304,216), "S20680C10.s20680c10f1");
    check_field_offset(lv, s20680c10f2, ABISELECT(464,328), "S20680C10.s20680c10f2");
    check_field_offset(lv, s20680c10f3, ABISELECT(472,332), "S20680C10.s20680c10f3");
    check_field_offset(lv, s20680c10f4, ABISELECT(480,340), "S20680C10.s20680c10f4");
    check_field_offset(lv, s20680c10f5, ABISELECT(496,352), "S20680C10.s20680c10f5");
    test_class_info(&lv, &cd_S20680C10);
    dp->~S20680C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C10(Test_S20680C10, "S20680C10", ABISELECT(832,584));

#else // __cplusplus

extern void _ZN9S20680C10C1Ev();
extern void _ZN9S20680C10D1Ev();
Name_Map name_map_S20680C10[] = {
  NSPAIR(_ZN9S20680C10C1Ev),
  NSPAIR(_ZN9S20680C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20680C7;
extern VTBL_ENTRY _ZTI8S20680C7[];
extern  VTBL_ENTRY _ZTV8S20680C7[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20680C11;
extern VTBL_ENTRY _ZTI9S20680C11[];
static Base_Class bases_S20680C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20680C7,    ABISELECT(512,360), //bcp->offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(784,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20680C4,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C3,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20680C11,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20680C10[];
extern void _ZN9S20680C103v11Ev();
extern void _ZN8S20680C72v8Ev();
static  VTBL_ENTRY vtc_S20680C10[] = {
  ABISELECT(512,360),
  ABISELECT(784,544),
  0,
  (VTBL_ENTRY)&(_ZTI9S20680C10[0]),
  (VTBL_ENTRY)&_ZN9S20680C103v11Ev,
  0,
  ABISELECT(-512,-360),
  (VTBL_ENTRY)&(_ZTI9S20680C10[0]),
  (VTBL_ENTRY)&_ZN8S20680C72v8Ev,
};
extern VTBL_ENTRY _ZTV9S20680C10[];
static  VTBL_ENTRY _tg__ZTV8S20680C4__9S20680C10[] = {
  ABISELECT(784,544),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
static  VTT_ENTRY vtt_S20680C10[] = {
  {&(_ZTV9S20680C10[4]),  4,9},
  {&(_tg__ZTV8S20680C4__9S20680C10[3]),  3,3},
  {&(_ZTV9S20680C10[8]),  8,9},
};
extern VTBL_ENTRY _ZTI9S20680C10[];
extern  VTBL_ENTRY _ZTV9S20680C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20680C10[];
Class_Descriptor cd_S20680C10 = {  "S20680C10", // class name
  bases_S20680C10, 5,
  &(vtc_S20680C10[0]), // expected_vtbl_contents
  &(vtt_S20680C10[0]), // expected_vtt_contents
  ABISELECT(832,584), // object size
  NSPAIRA(_ZTI9S20680C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20680C10),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20680C10),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  S20680C1  : virtual S20680C2 , virtual S20680C5 , S20680C10 {
  long s20680c1f0;
  ::S20677C6_nt s20680c1f1;
  void *s20680c1f2;
  __tsi64 s20680c1f3;
  long double s20680c1f4;
  int s20680c1f5;
  __tsi64 s20680c1f6;
  ::S20678C14 s20680c1f7;
  void *s20680c1f8[9];
  virtual void  v1(); // _ZN8S20680C12v1Ev
  virtual void  v2(); // _ZN8S20680C12v2Ev
  ~S20680C1(); // tgen
  S20680C1(); // tgen
};
//SIG(1 S20680C1) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 FD Fi FC3 FC3} v3 v4 Fi FC4 FL Fi Fp} VBC5{ BC6{ VBC3 BC4 v5 v6 v7 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC2 BC4 VBC7{ v8 FC8{} FC4 FC8 FL FC8 Fp FC8 Fp[2] FC8} VBC9{ BC4 v9 FL Fc[7] Fp Fi FC8 FC8 Fc[10]} v10 Fl FL FD FC8} BC10{ VBC7 BC4 BC11{ BC3 FC3 Fi FD Fi FL Fl} v11 Fp FC11 Fp Fi[2] FD Fi[2]} v1 v2 Fl FC8 Fp FL FD Fi FL FC12{ BC13{ BC14{ VBC3 BC15{ VBC3 FD Fi FC3 FC3} v12 v13 v14 Fs FL Fc Fi[2] FC15 Fp FL Fi FL Fi} VBC16{ VBC3 VBC15 v15 v16 Fi FC15 FL Fi Fp} BC15 VBC17{ v17 FC8 FC15 FC8 FL FC8 Fp FC8 Fp[2] FC8} VBC18{ BC15 v18 FL Fc[7] Fp Fi FC8 FC8 Fc[10]} v19 Fl FL FD FC8} BC19{ VBC17 v20 FC13 FC8 FL Fi[2]} BC20{ VBC15 BC21{ VBC14 VBC22{ VBC3 VBC14 v21 v22 v23 FL FC8 Fp Fc[2] FC3 Fl FC8} VBC16 v24 v25 FC8 FC8 Fi FC15 FC8 FC8 FC17 FC22 Fp FC8} BC16 Fi Fc:2 FC8 Fi} Fp FL Fi Fp Fi[3] Fc FL Fp FD} Fp[9]}


void  S20680C1 ::v1(){vfunc_called(this, "_ZN8S20680C12v1Ev");}
void  S20680C1 ::v2(){vfunc_called(this, "_ZN8S20680C12v2Ev");}
S20680C1 ::~S20680C1(){ note_dtor("S20680C1", this);} // tgen
S20680C1 ::S20680C1(){ note_ctor("S20680C1", this);} // tgen

static void Test_S20680C1()
{
  extern Class_Descriptor cd_S20680C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(445,1238)];
    init_test(&cd_S20680C1, buf);
    S20680C1 *dp, &lv = *(dp=new (buf) S20680C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7104,4948), "sizeof(S20680C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20680C1)");
    check_base_class_offset(lv, (S20677C3*)(S20680C2*), ABISELECT(5848,4068), "S20680C1");
    /*is_ambiguous_... S20680C1::S20680C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20680C4*), ABISELECT(5848,4068), "S20680C1");
    check_base_class_offset(lv, (S20677C3*)(S20680C6*)(S20680C5*), ABISELECT(5848,4068), "S20680C1");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*)(S20680C6*)(S20680C5*), ABISELECT(5848,4068), "S20680C1");
    /*is_ambiguous_... S20680C5::S20680C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20680C4*)(S20680C5*), ABISELECT(5848,4068), "S20680C1");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*)(S20680C9*), ABISELECT(5848,4068), "S20680C1");
    check_base_class_offset(lv, (S20677C3*)(S20680C4*)(S20680C10*), ABISELECT(5848,4068), "S20680C1");
    check_base_class_offset(lv, (S20680C4*)(S20680C2*), ABISELECT(5904,4108), "S20680C1");
    check_base_class_offset(lv, (S20680C2*), ABISELECT(5616,3904), "S20680C1");
    check_base_class_offset(lv, (S20680C2*)(S20680C5*), ABISELECT(5616,3904), "S20680C1");
    check_base_class_offset(lv, (S20680C4*)(S20680C6*)(S20680C5*), ABISELECT(6048,4208), "S20680C1");
    check_base_class_offset(lv, (S20680C6*)(S20680C5*), ABISELECT(6048,4208), "S20680C1");
    /*is_ambiguous_... S20680C5::S20680C4 */ AMB_check_base_class_offset(lv, (S20680C4*)(S20680C5*), ABISELECT(6464,4500), "S20680C1");
    check_base_class_offset(lv, (S20680C7*)(S20680C5*), ABISELECT(6656,4628), "S20680C1");
    check_base_class_offset(lv, (S20680C7*)(S20680C10*), ABISELECT(6656,4628), "S20680C1");
    check_base_class_offset(lv, (S20680C4*)(S20680C9*), ABISELECT(6928,4812), "S20680C1");
    check_base_class_offset(lv, (S20680C9*)(S20680C5*), ABISELECT(6928,4812), "S20680C1");
    check_base_class_offset(lv, (S20680C5*), ABISELECT(6048,4208), "S20680C1");
    check_base_class_offset(lv, (S20680C4*)(S20680C10*), 0, "S20680C1");
    check_base_class_offset(lv, (S20677C3*)(S20680C11*)(S20680C10*), ABISELECT(144,100), "S20680C1");
    check_base_class_offset(lv, (S20680C11*)(S20680C10*), ABISELECT(144,100), "S20680C1");
    check_base_class_offset(lv, (S20680C10*), 0, "S20680C1");
    check_field_offset(lv, s20680c1f0, ABISELECT(504,360), "S20680C1.s20680c1f0");
    check_field_offset(lv, s20680c1f1, ABISELECT(512,364), "S20680C1.s20680c1f1");
    check_field_offset(lv, s20680c1f2, ABISELECT(520,368), "S20680C1.s20680c1f2");
    check_field_offset(lv, s20680c1f3, ABISELECT(528,372), "S20680C1.s20680c1f3");
    check_field_offset(lv, s20680c1f4, ABISELECT(544,380), "S20680C1.s20680c1f4");
    check_field_offset(lv, s20680c1f5, ABISELECT(560,392), "S20680C1.s20680c1f5");
    check_field_offset(lv, s20680c1f6, ABISELECT(568,396), "S20680C1.s20680c1f6");
    check_field_offset(lv, s20680c1f7, ABISELECT(576,404), "S20680C1.s20680c1f7");
    check_field_offset(lv, s20680c1f8, ABISELECT(5536,3868), "S20680C1.s20680c1f8");
    test_class_info(&lv, &cd_S20680C1);
    dp->~S20680C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20680C1(Test_S20680C1, "S20680C1", ABISELECT(7104,4948));

#else // __cplusplus

extern void _ZN8S20680C1C1Ev();
extern void _ZN8S20680C1D1Ev();
Name_Map name_map_S20680C1[] = {
  NSPAIR(_ZN8S20680C1C1Ev),
  NSPAIR(_ZN8S20680C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20680C2;
extern VTBL_ENTRY _ZTI8S20680C2[];
extern  VTBL_ENTRY _ZTV8S20680C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C2[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20680C6;
extern VTBL_ENTRY _ZTI8S20680C6[];
extern  VTBL_ENTRY _ZTV8S20680C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C6[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20680C7;
extern VTBL_ENTRY _ZTI8S20680C7[];
extern  VTBL_ENTRY _ZTV8S20680C7[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20680C9;
extern VTBL_ENTRY _ZTI8S20680C9[];
extern  VTBL_ENTRY _ZTV8S20680C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C9[];
extern Class_Descriptor cd_S20680C5;
extern VTBL_ENTRY _ZTI8S20680C5[];
extern  VTBL_ENTRY _ZTV8S20680C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C5[];
extern Class_Descriptor cd_S20680C4;
extern VTBL_ENTRY _ZTI8S20680C4[];
extern  VTBL_ENTRY _ZTV8S20680C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C4[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20680C11;
extern VTBL_ENTRY _ZTI9S20680C11[];
extern Class_Descriptor cd_S20680C10;
extern VTBL_ENTRY _ZTI9S20680C10[];
extern  VTBL_ENTRY _ZTV9S20680C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20680C10[];
static Base_Class bases_S20680C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(5848,4068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20680C4,    ABISELECT(5904,4108), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20680C2,    ABISELECT(5616,3904), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20680C4,    ABISELECT(6048,4208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    4, //immediately_derived
  0, 0},
  {&cd_S20680C6,    ABISELECT(6048,4208), //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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20680C4,    ABISELECT(6464,4500), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20680C7,    ABISELECT(6656,4628), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20680C4,    ABISELECT(6928,4812), //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20680C9,    ABISELECT(6928,4812), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //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
    9, //immediately_derived
  0, 1},
  {&cd_S20680C5,    ABISELECT(6048,4208), //bcp->offset
    22, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20680C4,    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
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20677C3,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20680C11,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20680C10,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20680C1[];
extern void _ZN9S20680C103v11Ev();
extern void _ZN8S20680C12v1Ev();
extern void _ZN8S20680C12v2Ev();
extern void _ZN8S20680C22v3Ev();
extern void _ZN8S20680C22v4Ev();
extern void _ZN8S20680C62v5Ev();
extern void _ZN8S20680C62v6Ev();
extern void _ZN8S20680C62v7Ev();
extern void _ZN8S20680C53v10Ev();
extern void _ZN8S20680C72v8Ev();
extern void _ZN8S20680C92v9Ev();
static  VTBL_ENTRY vtc_S20680C1[] = {
  ABISELECT(6928,4812),
  ABISELECT(6048,4208),
  ABISELECT(5904,4108),
  ABISELECT(5616,3904),
  ABISELECT(6656,4628),
  ABISELECT(5848,4068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C1[0]),
  (VTBL_ENTRY)&_ZN9S20680C103v11Ev,
  (VTBL_ENTRY)&_ZN8S20680C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20680C12v2Ev,
  0,
  0,
  ABISELECT(288,204),
  ABISELECT(232,164),
  ABISELECT(-5616,-3904),
  (VTBL_ENTRY)&(_ZTI8S20680C1[0]),
  (VTBL_ENTRY)&_ZN8S20680C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20680C22v4Ev,
  ABISELECT(-56,-40),
  ABISELECT(-5904,-4108),
  (VTBL_ENTRY)&(_ZTI8S20680C1[0]),
  0,
  0,
  0,
  0,
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-144,-100),
  ABISELECT(-432,-304),
  ABISELECT(-200,-140),
  ABISELECT(-6048,-4208),
  (VTBL_ENTRY)&(_ZTI8S20680C1[0]),
  (VTBL_ENTRY)&_ZN8S20680C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20680C53v10Ev,
  ABISELECT(-616,-432),
  ABISELECT(-6464,-4500),
  (VTBL_ENTRY)&(_ZTI8S20680C1[0]),
  0,
  ABISELECT(-6656,-4628),
  (VTBL_ENTRY)&(_ZTI8S20680C1[0]),
  (VTBL_ENTRY)&_ZN8S20680C72v8Ev,
  0,
  ABISELECT(-1080,-744),
  ABISELECT(-6928,-4812),
  (VTBL_ENTRY)&(_ZTI8S20680C1[0]),
  (VTBL_ENTRY)&_ZN8S20680C92v9Ev,
};
extern VTBL_ENTRY _ZTV8S20680C1[];
extern void _ZN9S20680C103v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20680C10__8S20680C1[] = {
  ABISELECT(6656,4628),
  ABISELECT(5848,4068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20680C10[0]),
  (VTBL_ENTRY)&_ZN9S20680C103v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20680C49S20680C10__A4__8S20680C1[] = {
  ABISELECT(5848,4068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
extern void _ZN8S20680C72v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C7__9S20680C10__8S20680C1[] = {
  0,
  ABISELECT(-6656,-4628),
  (VTBL_ENTRY)&(_ZTI9S20680C10[0]),
  (VTBL_ENTRY)&_ZN8S20680C72v8Ev,
};
extern void _ZN8S20680C22v3Ev();
extern void _ZN8S20680C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C2__8S20680C1[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C2[0]),
  (VTBL_ENTRY)&_ZN8S20680C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20680C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20680C4__8S20680C2__8S20680C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI8S20680C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20680C4__8S20680C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
extern void _ZN8S20680C62v5Ev();
extern void _ZN8S20680C62v6Ev();
extern void _ZN8S20680C62v7Ev();
extern void _ZN8S20680C53v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C5__8S20680C1[] = {
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-144,-100),
  ABISELECT(-432,-304),
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  (VTBL_ENTRY)&_ZN8S20680C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20680C53v10Ev,
};
extern void _ZN8S20680C62v5Ev();
extern void _ZN8S20680C62v6Ev();
extern void _ZN8S20680C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C68S20680C5__8S20680C1[] = {
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C6[0]),
  (VTBL_ENTRY)&_ZN8S20680C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20680C62v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20680C48S20680C68S20680C5__A1__8S20680C1[] = {
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20680C48S20680C5__A2__8S20680C1[] = {
  ABISELECT(-616,-432),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
extern void _ZN8S20680C22v3Ev();
extern void _ZN8S20680C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C2__8S20680C5__8S20680C1[] = {
  0,
  0,
  ABISELECT(288,204),
  ABISELECT(232,164),
  ABISELECT(432,304),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  (VTBL_ENTRY)&_ZN8S20680C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20680C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20680C4__A1__8S20680C5__8S20680C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20680C4__A__8S20680C5__8S20680C1[] = {
  ABISELECT(-616,-432),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
};
extern void _ZN8S20680C72v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C7__8S20680C5__8S20680C1[] = {
  0,
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  (VTBL_ENTRY)&_ZN8S20680C72v8Ev,
};
extern void _ZN8S20680C92v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C9__8S20680C5__8S20680C1[] = {
  0,
  ABISELECT(-1080,-744),
  ABISELECT(-880,-604),
  (VTBL_ENTRY)&(_ZTI8S20680C5[0]),
  (VTBL_ENTRY)&_ZN8S20680C92v9Ev,
};
extern void _ZN8S20680C92v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20680C9__8S20680C1[] = {
  ABISELECT(-1080,-744),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C9[0]),
  (VTBL_ENTRY)&_ZN8S20680C92v9Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20680C48S20680C9__A3__8S20680C1[] = {
  ABISELECT(-1080,-744),
  0,
  (VTBL_ENTRY)&(_ZTI8S20680C4[0]),
};
static  VTT_ENTRY vtt_S20680C1[] = {
  {&(_ZTV8S20680C1[8]),  8,49},
  {&(_tg__ZTV9S20680C10__8S20680C1[4]),  4,5},
  {&(_tg__ZTV8S20680C49S20680C10__A4__8S20680C1[3]),  3,3},
  {&(_tg__ZTV8S20680C7__9S20680C10__8S20680C1[3]),  3,4},
  {&(_ZTV8S20680C1[17]),  17,49},
  {&(_ZTV8S20680C1[22]),  22,49},
  {&(_ZTV8S20680C1[33]),  33,49},
  {&(_ZTV8S20680C1[40]),  40,49},
  {&(_ZTV8S20680C1[43]),  43,49},
  {&(_ZTV8S20680C1[48]),  48,49},
  {&(_tg__ZTV8S20680C2__8S20680C1[4]),  4,6},
  {&(_tg__ZTV8S20680C4__8S20680C2__8S20680C1[3]),  3,3},
  {&(_tg__ZTV8S20680C4__8S20680C1[3]),  3,3},
  {&(_tg__ZTV8S20680C5__8S20680C1[7]),  7,11},
  {&(_tg__ZTV8S20680C68S20680C5__8S20680C1[3]),  3,6},
  {&(_tg__ZTV8S20680C48S20680C68S20680C5__A1__8S20680C1[3]),  3,3},
  {&(_tg__ZTV8S20680C48S20680C5__A2__8S20680C1[3]),  3,3},
  {&(_tg__ZTV8S20680C2__8S20680C5__8S20680C1[6]),  6,8},
  {&(_tg__ZTV8S20680C4__A1__8S20680C5__8S20680C1[3]),  3,3},
  {&(_tg__ZTV8S20680C4__A__8S20680C5__8S20680C1[3]),  3,3},
  {&(_tg__ZTV8S20680C7__8S20680C5__8S20680C1[3]),  3,4},
  {&(_tg__ZTV8S20680C9__8S20680C5__8S20680C1[4]),  4,5},
  {&(_tg__ZTV8S20680C9__8S20680C1[3]),  3,4},
  {&(_tg__ZTV8S20680C48S20680C9__A3__8S20680C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20680C1[];
extern  VTBL_ENTRY _ZTV8S20680C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20680C1[];
Class_Descriptor cd_S20680C1 = {  "S20680C1", // class name
  bases_S20680C1, 14,
  &(vtc_S20680C1[0]), // expected_vtbl_contents
  &(vtt_S20680C1[0]), // expected_vtt_contents
  ABISELECT(7104,4948), // object size
  NSPAIRA(_ZTI8S20680C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20680C1),49, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20680C1),24, //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  S20679C4  : virtual S20677C3 {
  long double s20679c4f0;
  int s20679c4f1;
  ::S20677C3 s20679c4f2;
  ::S20677C3 s20679c4f3;
  ~S20679C4(); // tgen
  S20679C4(); // tgen
};
//SIG(-1 S20679C4) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S20679C4 ::~S20679C4(){ note_dtor("S20679C4", this);} // tgen
S20679C4 ::S20679C4(){ note_ctor("S20679C4", this);} // tgen

static void Test_S20679C4()
{
  extern Class_Descriptor cd_S20679C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S20679C4, buf);
    S20679C4 *dp, &lv = *(dp=new (buf) S20679C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S20679C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S20679C4");
    check_field_offset(lv, s20679c4f0, ABISELECT(16,4), "S20679C4.s20679c4f0");
    check_field_offset(lv, s20679c4f1, ABISELECT(32,16), "S20679C4.s20679c4f1");
    check_field_offset(lv, s20679c4f2, ABISELECT(40,20), "S20679C4.s20679c4f2");
    check_field_offset(lv, s20679c4f3, ABISELECT(88,60), "S20679C4.s20679c4f3");
    test_class_info(&lv, &cd_S20679C4);
    dp->~S20679C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C4(Test_S20679C4, "S20679C4", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S20679C4C1Ev();
extern void _ZN8S20679C4D1Ev();
Name_Map name_map_S20679C4[] = {
  NSPAIR(_ZN8S20679C4C1Ev),
  NSPAIR(_ZN8S20679C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20679C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20679C4[];
static  VTBL_ENTRY vtc_S20679C4[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
extern VTBL_ENTRY _ZTV8S20679C4[];
static  VTT_ENTRY vtt_S20679C4[] = {
  {&(_ZTV8S20679C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
Class_Descriptor cd_S20679C4 = {  "S20679C4", // class name
  bases_S20679C4, 1,
  &(vtc_S20679C4[0]), // expected_vtbl_contents
  &(vtt_S20679C4[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S20679C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20679C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20679C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20679C2  : virtual S20677C3 , virtual S20679C4 {
  int s20679c2f0;
  ::S20679C4 s20679c2f1;
  __tsi64 s20679c2f2;
  int s20679c2f3;
  void *s20679c2f4;
  virtual void  v3(); // _ZN8S20679C22v3Ev
  virtual void  v4(); // _ZN8S20679C22v4Ev
  ~S20679C2(); // tgen
  S20679C2(); // tgen
};
//SIG(-1 S20679C2) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 FD Fi FC2 FC2} v1 v2 Fi FC3 FL Fi Fp}


void  S20679C2 ::v3(){vfunc_called(this, "_ZN8S20679C22v3Ev");}
void  S20679C2 ::v4(){vfunc_called(this, "_ZN8S20679C22v4Ev");}
S20679C2 ::~S20679C2(){ note_dtor("S20679C2", this);} // tgen
S20679C2 ::S20679C2(){ note_ctor("S20679C2", this);} // tgen

static void Test_S20679C2()
{
  extern Class_Descriptor cd_S20679C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,77)];
    init_test(&cd_S20679C2, buf);
    S20679C2 *dp, &lv = *(dp=new (buf) S20679C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,304), "sizeof(S20679C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C2)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(232,164), "S20679C2");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*), ABISELECT(232,164), "S20679C2");
    check_base_class_offset(lv, (S20679C4*), ABISELECT(288,204), "S20679C2");
    check_field_offset(lv, s20679c2f0, ABISELECT(8,4), "S20679C2.s20679c2f0");
    check_field_offset(lv, s20679c2f1, ABISELECT(16,8), "S20679C2.s20679c2f1");
    check_field_offset(lv, s20679c2f2, ABISELECT(208,148), "S20679C2.s20679c2f2");
    check_field_offset(lv, s20679c2f3, ABISELECT(216,156), "S20679C2.s20679c2f3");
    check_field_offset(lv, s20679c2f4, ABISELECT(224,160), "S20679C2.s20679c2f4");
    test_class_info(&lv, &cd_S20679C2);
    dp->~S20679C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C2(Test_S20679C2, "S20679C2", ABISELECT(432,304));

#else // __cplusplus

extern void _ZN8S20679C2C1Ev();
extern void _ZN8S20679C2D1Ev();
Name_Map name_map_S20679C2[] = {
  NSPAIR(_ZN8S20679C2C1Ev),
  NSPAIR(_ZN8S20679C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
static Base_Class bases_S20679C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(232,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20679C4,    ABISELECT(288,204), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20679C2[];
extern void _ZN8S20679C22v3Ev();
extern void _ZN8S20679C22v4Ev();
static  VTBL_ENTRY vtc_S20679C2[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C2[0]),
  (VTBL_ENTRY)&_ZN8S20679C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20679C22v4Ev,
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI8S20679C2[0]),
};
extern VTBL_ENTRY _ZTV8S20679C2[];
static  VTBL_ENTRY _tg__ZTV8S20679C4__8S20679C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
static  VTT_ENTRY vtt_S20679C2[] = {
  {&(_ZTV8S20679C2[4]),  4,9},
  {&(_ZTV8S20679C2[9]),  9,9},
  {&(_tg__ZTV8S20679C4__8S20679C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20679C2[];
extern  VTBL_ENTRY _ZTV8S20679C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C2[];
Class_Descriptor cd_S20679C2 = {  "S20679C2", // class name
  bases_S20679C2, 2,
  &(vtc_S20679C2[0]), // expected_vtbl_contents
  &(vtt_S20679C2[0]), // expected_vtt_contents
  ABISELECT(432,304), // object size
  NSPAIRA(_ZTI8S20679C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20679C2),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20679C2),3, //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  S20679C6  : virtual S20677C3 , S20679C4 {
  short s20679c6f0;
  __tsi64 s20679c6f1;
  char s20679c6f2;
  int s20679c6f3[2];
  ::S20679C4 s20679c6f4;
  void *s20679c6f5;
  __tsi64 s20679c6f6;
  int s20679c6f7;
  __tsi64 s20679c6f8;
  int s20679c6f9;
  virtual void  v5(); // _ZN8S20679C62v5Ev
  virtual void  v6(); // _ZN8S20679C62v6Ev
  virtual void  v7(); // _ZN8S20679C62v7Ev
  ~S20679C6(); // tgen
  S20679C6(); // tgen
};
//SIG(-1 S20679C6) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S20679C6 ::v5(){vfunc_called(this, "_ZN8S20679C62v5Ev");}
void  S20679C6 ::v6(){vfunc_called(this, "_ZN8S20679C62v6Ev");}
void  S20679C6 ::v7(){vfunc_called(this, "_ZN8S20679C62v7Ev");}
S20679C6 ::~S20679C6(){ note_dtor("S20679C6", this);} // tgen
S20679C6 ::S20679C6(){ note_ctor("S20679C6", this);} // tgen

static void Test_S20679C6()
{
  extern Class_Descriptor cd_S20679C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S20679C6, buf);
    S20679C6 *dp, &lv = *(dp=new (buf) S20679C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S20679C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C6)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S20679C6");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*), ABISELECT(408,292), "S20679C6");
    check_base_class_offset(lv, (S20679C4*), 0, "S20679C6");
    check_field_offset(lv, s20679c6f0, ABISELECT(136,100), "S20679C6.s20679c6f0");
    check_field_offset(lv, s20679c6f1, ABISELECT(144,104), "S20679C6.s20679c6f1");
    check_field_offset(lv, s20679c6f2, ABISELECT(152,112), "S20679C6.s20679c6f2");
    check_field_offset(lv, s20679c6f3, ABISELECT(156,116), "S20679C6.s20679c6f3");
    check_field_offset(lv, s20679c6f4, ABISELECT(176,124), "S20679C6.s20679c6f4");
    check_field_offset(lv, s20679c6f5, ABISELECT(368,264), "S20679C6.s20679c6f5");
    check_field_offset(lv, s20679c6f6, ABISELECT(376,268), "S20679C6.s20679c6f6");
    check_field_offset(lv, s20679c6f7, ABISELECT(384,276), "S20679C6.s20679c6f7");
    check_field_offset(lv, s20679c6f8, ABISELECT(392,280), "S20679C6.s20679c6f8");
    check_field_offset(lv, s20679c6f9, ABISELECT(400,288), "S20679C6.s20679c6f9");
    test_class_info(&lv, &cd_S20679C6);
    dp->~S20679C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C6(Test_S20679C6, "S20679C6", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S20679C6C1Ev();
extern void _ZN8S20679C6D1Ev();
Name_Map name_map_S20679C6[] = {
  NSPAIR(_ZN8S20679C6C1Ev),
  NSPAIR(_ZN8S20679C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
static Base_Class bases_S20679C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20679C4,    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 _ZTI8S20679C6[];
extern void _ZN8S20679C62v5Ev();
extern void _ZN8S20679C62v6Ev();
extern void _ZN8S20679C62v7Ev();
static  VTBL_ENTRY vtc_S20679C6[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C6[0]),
  (VTBL_ENTRY)&_ZN8S20679C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v7Ev,
};
extern VTBL_ENTRY _ZTV8S20679C6[];
static  VTBL_ENTRY _tg__ZTV8S20679C4__8S20679C6[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
static  VTT_ENTRY vtt_S20679C6[] = {
  {&(_ZTV8S20679C6[3]),  3,6},
  {&(_tg__ZTV8S20679C4__8S20679C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20679C6[];
extern  VTBL_ENTRY _ZTV8S20679C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C6[];
Class_Descriptor cd_S20679C6 = {  "S20679C6", // class name
  bases_S20679C6, 2,
  &(vtc_S20679C6[0]), // expected_vtbl_contents
  &(vtt_S20679C6[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S20679C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20679C6),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20679C6),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  S20679C7  {
  ::S20677C6_nt s20679c7f0;
  ::S20679C4 s20679c7f1;
  ::S20677C6_nt s20679c7f2;
  __tsi64 s20679c7f3;
  ::S20677C6_nt s20679c7f4;
  void *s20679c7f5;
  ::S20677C6_nt s20679c7f6;
  void *s20679c7f7[2];
  ::S20677C6_nt s20679c7f8;
  virtual void  v8(); // _ZN8S20679C72v8Ev
  ~S20679C7(); // tgen
  S20679C7(); // tgen
};
//SIG(-1 S20679C7) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S20679C7 ::v8(){vfunc_called(this, "_ZN8S20679C72v8Ev");}
S20679C7 ::~S20679C7(){ note_dtor("S20679C7", this);} // tgen
S20679C7 ::S20679C7(){ note_ctor("S20679C7", this);} // tgen

static void Test_S20679C7()
{
  extern Class_Descriptor cd_S20679C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S20679C7, buf);
    S20679C7 *dp, &lv = *(dp=new (buf) S20679C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S20679C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C7)");
    check_field_offset(lv, s20679c7f0, ABISELECT(8,4), "S20679C7.s20679c7f0");
    check_field_offset(lv, s20679c7f1, ABISELECT(16,8), "S20679C7.s20679c7f1");
    check_field_offset(lv, s20679c7f2, ABISELECT(208,148), "S20679C7.s20679c7f2");
    check_field_offset(lv, s20679c7f3, ABISELECT(216,152), "S20679C7.s20679c7f3");
    check_field_offset(lv, s20679c7f4, ABISELECT(224,160), "S20679C7.s20679c7f4");
    check_field_offset(lv, s20679c7f5, ABISELECT(232,164), "S20679C7.s20679c7f5");
    check_field_offset(lv, s20679c7f6, ABISELECT(240,168), "S20679C7.s20679c7f6");
    check_field_offset(lv, s20679c7f7, ABISELECT(248,172), "S20679C7.s20679c7f7");
    check_field_offset(lv, s20679c7f8, ABISELECT(264,180), "S20679C7.s20679c7f8");
    test_class_info(&lv, &cd_S20679C7);
    dp->~S20679C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C7(Test_S20679C7, "S20679C7", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN8S20679C7C1Ev();
extern void _ZN8S20679C7D1Ev();
Name_Map name_map_S20679C7[] = {
  NSPAIR(_ZN8S20679C7C1Ev),
  NSPAIR(_ZN8S20679C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20679C7[];
extern void _ZN8S20679C72v8Ev();
static  VTBL_ENTRY vtc_S20679C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C7[0]),
  (VTBL_ENTRY)&_ZN8S20679C72v8Ev,
};
extern VTBL_ENTRY _ZTI8S20679C7[];
extern  VTBL_ENTRY _ZTV8S20679C7[];
Class_Descriptor cd_S20679C7 = {  "S20679C7", // class name
  0,0,//no base classes
  &(vtc_S20679C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI8S20679C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20679C7),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20679C9  : S20679C4 {
  __tsi64 s20679c9f0;
  char s20679c9f1[7];
  void *s20679c9f2;
  int s20679c9f3;
  ::S20677C6_nt s20679c9f4;
  ::S20677C6_nt s20679c9f5;
  char s20679c9f6[10];
  virtual void  v9(); // _ZN8S20679C92v9Ev
  ~S20679C9(); // tgen
  S20679C9(); // tgen
};
//SIG(-1 S20679C9) C1{ BC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} v1 FL Fc[7] Fp Fi FC4{} FC4 Fc[10]}


void  S20679C9 ::v9(){vfunc_called(this, "_ZN8S20679C92v9Ev");}
S20679C9 ::~S20679C9(){ note_dtor("S20679C9", this);} // tgen
S20679C9 ::S20679C9(){ note_ctor("S20679C9", this);} // tgen

static void Test_S20679C9()
{
  extern Class_Descriptor cd_S20679C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,45)];
    init_test(&cd_S20679C9, buf);
    S20679C9 *dp, &lv = *(dp=new (buf) S20679C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,176), "sizeof(S20679C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C9)");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*), ABISELECT(176,136), "S20679C9");
    check_base_class_offset(lv, (S20679C4*), 0, "S20679C9");
    check_field_offset(lv, s20679c9f0, ABISELECT(136,100), "S20679C9.s20679c9f0");
    check_field_offset(lv, s20679c9f1, ABISELECT(144,108), "S20679C9.s20679c9f1");
    check_field_offset(lv, s20679c9f2, ABISELECT(152,116), "S20679C9.s20679c9f2");
    check_field_offset(lv, s20679c9f3, ABISELECT(160,120), "S20679C9.s20679c9f3");
    check_field_offset(lv, s20679c9f4, ABISELECT(164,124), "S20679C9.s20679c9f4");
    check_field_offset(lv, s20679c9f5, ABISELECT(165,125), "S20679C9.s20679c9f5");
    check_field_offset(lv, s20679c9f6, ABISELECT(166,126), "S20679C9.s20679c9f6");
    test_class_info(&lv, &cd_S20679C9);
    dp->~S20679C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C9(Test_S20679C9, "S20679C9", ABISELECT(224,176));

#else // __cplusplus

extern void _ZN8S20679C9C1Ev();
extern void _ZN8S20679C9D1Ev();
Name_Map name_map_S20679C9[] = {
  NSPAIR(_ZN8S20679C9C1Ev),
  NSPAIR(_ZN8S20679C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
static Base_Class bases_S20679C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(176,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
  0, 1},
  {&cd_S20679C4,    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 _ZTI8S20679C9[];
extern void _ZN8S20679C92v9Ev();
static  VTBL_ENTRY vtc_S20679C9[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C9[0]),
  (VTBL_ENTRY)&_ZN8S20679C92v9Ev,
};
extern VTBL_ENTRY _ZTV8S20679C9[];
static  VTBL_ENTRY _tg__ZTV8S20679C4__8S20679C9[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
static  VTT_ENTRY vtt_S20679C9[] = {
  {&(_ZTV8S20679C9[3]),  3,4},
  {&(_tg__ZTV8S20679C4__8S20679C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20679C9[];
extern  VTBL_ENTRY _ZTV8S20679C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C9[];
Class_Descriptor cd_S20679C9 = {  "S20679C9", // class name
  bases_S20679C9, 2,
  &(vtc_S20679C9[0]), // expected_vtbl_contents
  &(vtt_S20679C9[0]), // expected_vtt_contents
  ABISELECT(224,176), // object size
  NSPAIRA(_ZTI8S20679C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20679C9),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20679C9),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  S20679C5  : S20679C6 , virtual S20679C2 , S20679C4 , virtual S20679C7 , virtual S20679C9 {
  long s20679c5f0;
  __tsi64 s20679c5f1;
  long double s20679c5f2;
  ::S20677C6_nt s20679c5f3;
  virtual void  v10(); // _ZN8S20679C53v10Ev
  ~S20679C5(); // tgen
  S20679C5(); // tgen
};
//SIG(-1 S20679C5) C1{ BC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC4 v5 v6 Fi FC4 FL Fi Fp} BC4 VBC6{ v7 FC7{} FC4 FC7 FL FC7 Fp FC7 Fp[2] FC7} VBC8{ BC4 v8 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v1 Fl FL FD FC7}


void  S20679C5 ::v10(){vfunc_called(this, "_ZN8S20679C53v10Ev");}
S20679C5 ::~S20679C5(){ note_dtor("S20679C5", this);} // tgen
S20679C5 ::S20679C5(){ note_ctor("S20679C5", this);} // tgen

static void Test_S20679C5()
{
  extern Class_Descriptor cd_S20679C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(94,262)];
    init_test(&cd_S20679C5, buf);
    S20679C5 *dp, &lv = *(dp=new (buf) S20679C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1488,1044), "sizeof(S20679C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C5)");
    check_base_class_offset(lv, (S20677C3*)(S20679C6*), ABISELECT(600,420), "S20679C5");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*)(S20679C6*), ABISELECT(600,420), "S20679C5");
    check_base_class_offset(lv, (S20677C3*)(S20679C2*), ABISELECT(600,420), "S20679C5");
    /*is_ambiguous_... S20679C5::S20679C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20679C4*), ABISELECT(600,420), "S20679C5");
    /*is_ambiguous_... S20679C5::S20679C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20679C4*), ABISELECT(600,420), "S20679C5");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*)(S20679C9*), ABISELECT(600,420), "S20679C5");
    check_base_class_offset(lv, (S20679C4*)(S20679C6*), 0, "S20679C5");
    check_base_class_offset(lv, (S20679C6*), 0, "S20679C5");
    check_base_class_offset(lv, (S20679C4*)(S20679C2*), ABISELECT(896,624), "S20679C5");
    check_base_class_offset(lv, (S20679C2*), ABISELECT(656,460), "S20679C5");
    /*is_ambiguous_... S20679C5::S20679C4 */ AMB_check_base_class_offset(lv, (S20679C4*), ABISELECT(416,292), "S20679C5");
    check_base_class_offset(lv, (S20679C7*), ABISELECT(1040,724), "S20679C5");
    check_base_class_offset(lv, (S20679C4*)(S20679C9*), ABISELECT(1312,908), "S20679C5");
    check_base_class_offset(lv, (S20679C9*), ABISELECT(1312,908), "S20679C5");
    check_field_offset(lv, s20679c5f0, ABISELECT(552,392), "S20679C5.s20679c5f0");
    check_field_offset(lv, s20679c5f1, ABISELECT(560,396), "S20679C5.s20679c5f1");
    check_field_offset(lv, s20679c5f2, ABISELECT(576,404), "S20679C5.s20679c5f2");
    check_field_offset(lv, s20679c5f3, ABISELECT(592,416), "S20679C5.s20679c5f3");
    test_class_info(&lv, &cd_S20679C5);
    dp->~S20679C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C5(Test_S20679C5, "S20679C5", ABISELECT(1488,1044));

#else // __cplusplus

extern void _ZN8S20679C5C1Ev();
extern void _ZN8S20679C5D1Ev();
Name_Map name_map_S20679C5[] = {
  NSPAIR(_ZN8S20679C5C1Ev),
  NSPAIR(_ZN8S20679C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20679C6;
extern VTBL_ENTRY _ZTI8S20679C6[];
extern  VTBL_ENTRY _ZTV8S20679C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C6[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20679C2;
extern VTBL_ENTRY _ZTI8S20679C2[];
extern  VTBL_ENTRY _ZTV8S20679C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C2[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20679C7;
extern VTBL_ENTRY _ZTI8S20679C7[];
extern  VTBL_ENTRY _ZTV8S20679C7[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20679C9;
extern VTBL_ENTRY _ZTI8S20679C9[];
extern  VTBL_ENTRY _ZTV8S20679C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C9[];
static Base_Class bases_S20679C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(600,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20679C4,    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
    6, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20679C6,    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_S20679C4,    ABISELECT(896,624), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20679C2,    ABISELECT(656,460), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20679C4,    ABISELECT(416,292), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20679C7,    ABISELECT(1040,724), //bcp->offset
    25, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20679C4,    ABISELECT(1312,908), //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
    8, //immediately_derived
  0, 0},
  {&cd_S20679C9,    ABISELECT(1312,908), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20679C5[];
extern void _ZN8S20679C62v5Ev();
extern void _ZN8S20679C62v6Ev();
extern void _ZN8S20679C62v7Ev();
extern void _ZN8S20679C53v10Ev();
extern void _ZN8S20679C22v3Ev();
extern void _ZN8S20679C22v4Ev();
extern void _ZN8S20679C72v8Ev();
extern void _ZN8S20679C92v9Ev();
static  VTBL_ENTRY vtc_S20679C5[] = {
  ABISELECT(1312,908),
  ABISELECT(1040,724),
  ABISELECT(896,624),
  ABISELECT(656,460),
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  (VTBL_ENTRY)&_ZN8S20679C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20679C53v10Ev,
  ABISELECT(184,128),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-56,-40),
  ABISELECT(-656,-460),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  (VTBL_ENTRY)&_ZN8S20679C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20679C22v4Ev,
  ABISELECT(-296,-204),
  ABISELECT(-896,-624),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  0,
  ABISELECT(-1040,-724),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  (VTBL_ENTRY)&_ZN8S20679C72v8Ev,
  0,
  ABISELECT(-712,-488),
  ABISELECT(-1312,-908),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  (VTBL_ENTRY)&_ZN8S20679C92v9Ev,
};
extern VTBL_ENTRY _ZTV8S20679C5[];
extern void _ZN8S20679C62v5Ev();
extern void _ZN8S20679C62v6Ev();
extern void _ZN8S20679C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C6__8S20679C5[] = {
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C6[0]),
  (VTBL_ENTRY)&_ZN8S20679C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20679C48S20679C6__8S20679C5[] = {
  ABISELECT(600,420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20679C4__A__8S20679C5[] = {
  ABISELECT(184,128),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
extern void _ZN8S20679C22v3Ev();
extern void _ZN8S20679C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C2__8S20679C5[] = {
  ABISELECT(240,164),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C2[0]),
  (VTBL_ENTRY)&_ZN8S20679C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20679C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20679C4__8S20679C2__8S20679C5[] = {
  ABISELECT(-296,-204),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI8S20679C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20679C4__A1__8S20679C5[] = {
  ABISELECT(-296,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
extern void _ZN8S20679C92v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C9__8S20679C5[] = {
  ABISELECT(-712,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C9[0]),
  (VTBL_ENTRY)&_ZN8S20679C92v9Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20679C48S20679C9__A3__8S20679C5[] = {
  ABISELECT(-712,-488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
static  VTT_ENTRY vtt_S20679C5[] = {
  {&(_ZTV8S20679C5[7]),  7,34},
  {&(_tg__ZTV8S20679C6__8S20679C5[3]),  3,6},
  {&(_tg__ZTV8S20679C48S20679C6__8S20679C5[3]),  3,3},
  {&(_tg__ZTV8S20679C4__A__8S20679C5[3]),  3,3},
  {&(_ZTV8S20679C5[20]),  20,34},
  {&(_ZTV8S20679C5[25]),  25,34},
  {&(_ZTV8S20679C5[14]),  14,34},
  {&(_ZTV8S20679C5[28]),  28,34},
  {&(_ZTV8S20679C5[33]),  33,34},
  {&(_tg__ZTV8S20679C2__8S20679C5[4]),  4,6},
  {&(_tg__ZTV8S20679C4__8S20679C2__8S20679C5[3]),  3,3},
  {&(_tg__ZTV8S20679C4__A1__8S20679C5[3]),  3,3},
  {&(_tg__ZTV8S20679C9__8S20679C5[3]),  3,4},
  {&(_tg__ZTV8S20679C48S20679C9__A3__8S20679C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20679C5[];
extern  VTBL_ENTRY _ZTV8S20679C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C5[];
Class_Descriptor cd_S20679C5 = {  "S20679C5", // class name
  bases_S20679C5, 9,
  &(vtc_S20679C5[0]), // expected_vtbl_contents
  &(vtt_S20679C5[0]), // expected_vtt_contents
  ABISELECT(1488,1044), // object size
  NSPAIRA(_ZTI8S20679C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20679C5),34, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20679C5),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20679C11  : S20677C3 {
  ::S20677C3 s20679c11f0;
  int s20679c11f1;
  long double s20679c11f2;
  int s20679c11f3;
  __tsi64 s20679c11f4;
  long s20679c11f5;
};
//SIG(-1 S20679C11) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S20679C11()
{
  extern Class_Descriptor cd_S20679C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20679C11, buf);
    S20679C11 &lv = *(new (buf) S20679C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20679C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C11)");
    check_base_class_offset(lv, (S20677C3*), 0, "S20679C11");
    check_field_offset(lv, s20679c11f0, ABISELECT(48,40), "S20679C11.s20679c11f0");
    check_field_offset(lv, s20679c11f1, ABISELECT(96,80), "S20679C11.s20679c11f1");
    check_field_offset(lv, s20679c11f2, ABISELECT(112,84), "S20679C11.s20679c11f2");
    check_field_offset(lv, s20679c11f3, ABISELECT(128,96), "S20679C11.s20679c11f3");
    check_field_offset(lv, s20679c11f4, ABISELECT(136,100), "S20679C11.s20679c11f4");
    check_field_offset(lv, s20679c11f5, ABISELECT(144,108), "S20679C11.s20679c11f5");
    test_class_info(&lv, &cd_S20679C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C11(Test_S20679C11, "S20679C11", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20679C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20679C11[];
Class_Descriptor cd_S20679C11 = {  "S20679C11", // class name
  bases_S20679C11, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI9S20679C11),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20679C10  : virtual S20679C7 , S20679C4 , S20679C11 {
  void *s20679c10f0;
  ::S20679C11 s20679c10f1;
  void *s20679c10f2;
  int s20679c10f3[2];
  long double s20679c10f4;
  int s20679c10f5[2];
  virtual void  v11(); // _ZN9S20679C103v11Ev
  ~S20679C10(); // tgen
  S20679C10(); // tgen
};
//SIG(-1 S20679C10) C1{ VBC2{ v2 FC3{} FC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} FC3 FL FC3 Fp FC3 Fp[2] FC3} BC4 BC6{ BC5 FC5 Fi FD Fi FL Fl} v1 Fp FC6 Fp Fi[2] FD Fi[2]}


void  S20679C10 ::v11(){vfunc_called(this, "_ZN9S20679C103v11Ev");}
S20679C10 ::~S20679C10(){ note_dtor("S20679C10", this);} // tgen
S20679C10 ::S20679C10(){ note_ctor("S20679C10", this);} // tgen

static void Test_S20679C10()
{
  extern Class_Descriptor cd_S20679C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(53,147)];
    init_test(&cd_S20679C10, buf);
    S20679C10 *dp, &lv = *(dp=new (buf) S20679C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(832,584), "sizeof(S20679C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C10)");
    check_base_class_offset(lv, (S20679C7*), ABISELECT(512,360), "S20679C10");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*), ABISELECT(784,544), "S20679C10");
    check_base_class_offset(lv, (S20679C4*), 0, "S20679C10");
    check_base_class_offset(lv, (S20677C3*)(S20679C11*), ABISELECT(144,100), "S20679C10");
    check_base_class_offset(lv, (S20679C11*), ABISELECT(144,100), "S20679C10");
    check_field_offset(lv, s20679c10f0, ABISELECT(296,212), "S20679C10.s20679c10f0");
    check_field_offset(lv, s20679c10f1, ABISELECT(304,216), "S20679C10.s20679c10f1");
    check_field_offset(lv, s20679c10f2, ABISELECT(464,328), "S20679C10.s20679c10f2");
    check_field_offset(lv, s20679c10f3, ABISELECT(472,332), "S20679C10.s20679c10f3");
    check_field_offset(lv, s20679c10f4, ABISELECT(480,340), "S20679C10.s20679c10f4");
    check_field_offset(lv, s20679c10f5, ABISELECT(496,352), "S20679C10.s20679c10f5");
    test_class_info(&lv, &cd_S20679C10);
    dp->~S20679C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C10(Test_S20679C10, "S20679C10", ABISELECT(832,584));

#else // __cplusplus

extern void _ZN9S20679C10C1Ev();
extern void _ZN9S20679C10D1Ev();
Name_Map name_map_S20679C10[] = {
  NSPAIR(_ZN9S20679C10C1Ev),
  NSPAIR(_ZN9S20679C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20679C7;
extern VTBL_ENTRY _ZTI8S20679C7[];
extern  VTBL_ENTRY _ZTV8S20679C7[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20679C11;
extern VTBL_ENTRY _ZTI9S20679C11[];
static Base_Class bases_S20679C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20679C7,    ABISELECT(512,360), //bcp->offset
    5, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(784,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20679C4,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C3,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20679C11,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20679C10[];
extern void _ZN9S20679C103v11Ev();
extern void _ZN8S20679C72v8Ev();
static  VTBL_ENTRY vtc_S20679C10[] = {
  ABISELECT(512,360),
  ABISELECT(784,544),
  0,
  (VTBL_ENTRY)&(_ZTI9S20679C10[0]),
  (VTBL_ENTRY)&_ZN9S20679C103v11Ev,
  0,
  ABISELECT(-512,-360),
  (VTBL_ENTRY)&(_ZTI9S20679C10[0]),
  (VTBL_ENTRY)&_ZN8S20679C72v8Ev,
};
extern VTBL_ENTRY _ZTV9S20679C10[];
static  VTBL_ENTRY _tg__ZTV8S20679C4__9S20679C10[] = {
  ABISELECT(784,544),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
static  VTT_ENTRY vtt_S20679C10[] = {
  {&(_ZTV9S20679C10[4]),  4,9},
  {&(_tg__ZTV8S20679C4__9S20679C10[3]),  3,3},
  {&(_ZTV9S20679C10[8]),  8,9},
};
extern VTBL_ENTRY _ZTI9S20679C10[];
extern  VTBL_ENTRY _ZTV9S20679C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20679C10[];
Class_Descriptor cd_S20679C10 = {  "S20679C10", // class name
  bases_S20679C10, 5,
  &(vtc_S20679C10[0]), // expected_vtbl_contents
  &(vtt_S20679C10[0]), // expected_vtt_contents
  ABISELECT(832,584), // object size
  NSPAIRA(_ZTI9S20679C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20679C10),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20679C10),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  S20679C1  : virtual S20679C2 , virtual S20679C5 , S20679C10 {
  long s20679c1f0;
  ::S20677C6_nt s20679c1f1;
  void *s20679c1f2;
  long s20679c1f3;
  long double s20679c1f4;
  int s20679c1f5;
  __tsi64 s20679c1f6;
  ::S20677C14 s20679c1f7;
  void *s20679c1f8[9];
  virtual void  v1(); // _ZN8S20679C12v1Ev
  virtual void  v2(); // _ZN8S20679C12v2Ev
  ~S20679C1(); // tgen
  S20679C1(); // tgen
};
//SIG(1 S20679C1) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 FD Fi FC3 FC3} v3 v4 Fi FC4 FL Fi Fp} VBC5{ BC6{ VBC3 BC4 v5 v6 v7 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC2 BC4 VBC7{ v8 FC8{} FC4 FC8 FL FC8 Fp FC8 Fp[2] FC8} VBC9{ BC4 v9 FL Fc[7] Fp Fi FC8 FC8 Fc[10]} v10 Fl FL FD FC8} BC10{ VBC7 BC4 BC11{ BC3 FC3 Fi FD Fi FL Fl} v11 Fp FC11 Fp Fi[2] FD Fi[2]} v1 v2 Fl FC8 Fp Fl FD Fi FL FC12{ BC13{ BC14{ VBC3 BC15{ VBC3 FD Fi FC3 FC3} v12 v13 v14 Fs FL Fc Fi[2] FC15 Fp FL Fi FL Fi} VBC16{ VBC3 VBC15 v15 v16 Fi FC15 FL Fi Fp} BC15 VBC17{ v17 FC8 FC15 FC8 FL FC8 Fp FC8 Fp[2] FC8} VBC18{ BC15 v18 FL Fc[7] Fp Fi FC8 FC8 Fc[10]} v19 Fl FL FD FC8} BC19{ VBC17 v20 FC13 FC8 Fl Fi[2]} BC20{ VBC15 BC21{ VBC14 VBC22{ VBC3 VBC14 v21 v22 v23 FL FC8 Fp Fc[2] FC3 Fl FC8} VBC16 v24 v25 FC8 FC8 Fi FC15 FC8 FC8 FC17 FC22 Fp FC8} BC16 Fi Fc:2 FC8 Fi} Fp FL Fi Fp Fi[3] Fc FL Fp FD} Fp[9]}


void  S20679C1 ::v1(){vfunc_called(this, "_ZN8S20679C12v1Ev");}
void  S20679C1 ::v2(){vfunc_called(this, "_ZN8S20679C12v2Ev");}
S20679C1 ::~S20679C1(){ note_dtor("S20679C1", this);} // tgen
S20679C1 ::S20679C1(){ note_ctor("S20679C1", this);} // tgen

static void Test_S20679C1()
{
  extern Class_Descriptor cd_S20679C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(445,1236)];
    init_test(&cd_S20679C1, buf);
    S20679C1 *dp, &lv = *(dp=new (buf) S20679C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7104,4940), "sizeof(S20679C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20679C1)");
    check_base_class_offset(lv, (S20677C3*)(S20679C2*), ABISELECT(5848,4060), "S20679C1");
    /*is_ambiguous_... S20679C1::S20679C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20679C4*), ABISELECT(5848,4060), "S20679C1");
    check_base_class_offset(lv, (S20677C3*)(S20679C6*)(S20679C5*), ABISELECT(5848,4060), "S20679C1");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*)(S20679C6*)(S20679C5*), ABISELECT(5848,4060), "S20679C1");
    /*is_ambiguous_... S20679C5::S20679C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20679C4*)(S20679C5*), ABISELECT(5848,4060), "S20679C1");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*)(S20679C9*), ABISELECT(5848,4060), "S20679C1");
    check_base_class_offset(lv, (S20677C3*)(S20679C4*)(S20679C10*), ABISELECT(5848,4060), "S20679C1");
    check_base_class_offset(lv, (S20679C4*)(S20679C2*), ABISELECT(5904,4100), "S20679C1");
    check_base_class_offset(lv, (S20679C2*), ABISELECT(5616,3896), "S20679C1");
    check_base_class_offset(lv, (S20679C2*)(S20679C5*), ABISELECT(5616,3896), "S20679C1");
    check_base_class_offset(lv, (S20679C4*)(S20679C6*)(S20679C5*), ABISELECT(6048,4200), "S20679C1");
    check_base_class_offset(lv, (S20679C6*)(S20679C5*), ABISELECT(6048,4200), "S20679C1");
    /*is_ambiguous_... S20679C5::S20679C4 */ AMB_check_base_class_offset(lv, (S20679C4*)(S20679C5*), ABISELECT(6464,4492), "S20679C1");
    check_base_class_offset(lv, (S20679C7*)(S20679C5*), ABISELECT(6656,4620), "S20679C1");
    check_base_class_offset(lv, (S20679C7*)(S20679C10*), ABISELECT(6656,4620), "S20679C1");
    check_base_class_offset(lv, (S20679C4*)(S20679C9*), ABISELECT(6928,4804), "S20679C1");
    check_base_class_offset(lv, (S20679C9*)(S20679C5*), ABISELECT(6928,4804), "S20679C1");
    check_base_class_offset(lv, (S20679C5*), ABISELECT(6048,4200), "S20679C1");
    check_base_class_offset(lv, (S20679C4*)(S20679C10*), 0, "S20679C1");
    check_base_class_offset(lv, (S20677C3*)(S20679C11*)(S20679C10*), ABISELECT(144,100), "S20679C1");
    check_base_class_offset(lv, (S20679C11*)(S20679C10*), ABISELECT(144,100), "S20679C1");
    check_base_class_offset(lv, (S20679C10*), 0, "S20679C1");
    check_field_offset(lv, s20679c1f0, ABISELECT(504,360), "S20679C1.s20679c1f0");
    check_field_offset(lv, s20679c1f1, ABISELECT(512,364), "S20679C1.s20679c1f1");
    check_field_offset(lv, s20679c1f2, ABISELECT(520,368), "S20679C1.s20679c1f2");
    check_field_offset(lv, s20679c1f3, ABISELECT(528,372), "S20679C1.s20679c1f3");
    check_field_offset(lv, s20679c1f4, ABISELECT(544,376), "S20679C1.s20679c1f4");
    check_field_offset(lv, s20679c1f5, ABISELECT(560,388), "S20679C1.s20679c1f5");
    check_field_offset(lv, s20679c1f6, ABISELECT(568,392), "S20679C1.s20679c1f6");
    check_field_offset(lv, s20679c1f7, ABISELECT(576,400), "S20679C1.s20679c1f7");
    check_field_offset(lv, s20679c1f8, ABISELECT(5536,3860), "S20679C1.s20679c1f8");
    test_class_info(&lv, &cd_S20679C1);
    dp->~S20679C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20679C1(Test_S20679C1, "S20679C1", ABISELECT(7104,4940));

#else // __cplusplus

extern void _ZN8S20679C1C1Ev();
extern void _ZN8S20679C1D1Ev();
Name_Map name_map_S20679C1[] = {
  NSPAIR(_ZN8S20679C1C1Ev),
  NSPAIR(_ZN8S20679C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20679C2;
extern VTBL_ENTRY _ZTI8S20679C2[];
extern  VTBL_ENTRY _ZTV8S20679C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C2[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20679C6;
extern VTBL_ENTRY _ZTI8S20679C6[];
extern  VTBL_ENTRY _ZTV8S20679C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C6[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20679C7;
extern VTBL_ENTRY _ZTI8S20679C7[];
extern  VTBL_ENTRY _ZTV8S20679C7[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20679C9;
extern VTBL_ENTRY _ZTI8S20679C9[];
extern  VTBL_ENTRY _ZTV8S20679C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C9[];
extern Class_Descriptor cd_S20679C5;
extern VTBL_ENTRY _ZTI8S20679C5[];
extern  VTBL_ENTRY _ZTV8S20679C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C5[];
extern Class_Descriptor cd_S20679C4;
extern VTBL_ENTRY _ZTI8S20679C4[];
extern  VTBL_ENTRY _ZTV8S20679C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C4[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20679C11;
extern VTBL_ENTRY _ZTI9S20679C11[];
extern Class_Descriptor cd_S20679C10;
extern VTBL_ENTRY _ZTI9S20679C10[];
extern  VTBL_ENTRY _ZTV9S20679C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20679C10[];
static Base_Class bases_S20679C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(5848,4060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20679C4,    ABISELECT(5904,4100), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20679C2,    ABISELECT(5616,3896), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20679C4,    ABISELECT(6048,4200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    4, //immediately_derived
  0, 0},
  {&cd_S20679C6,    ABISELECT(6048,4200), //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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20679C4,    ABISELECT(6464,4492), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20679C7,    ABISELECT(6656,4620), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20679C4,    ABISELECT(6928,4804), //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20679C9,    ABISELECT(6928,4804), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //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
    9, //immediately_derived
  0, 1},
  {&cd_S20679C5,    ABISELECT(6048,4200), //bcp->offset
    22, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20679C4,    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
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20677C3,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20679C11,    ABISELECT(144,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20679C10,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20679C1[];
extern void _ZN9S20679C103v11Ev();
extern void _ZN8S20679C12v1Ev();
extern void _ZN8S20679C12v2Ev();
extern void _ZN8S20679C22v3Ev();
extern void _ZN8S20679C22v4Ev();
extern void _ZN8S20679C62v5Ev();
extern void _ZN8S20679C62v6Ev();
extern void _ZN8S20679C62v7Ev();
extern void _ZN8S20679C53v10Ev();
extern void _ZN8S20679C72v8Ev();
extern void _ZN8S20679C92v9Ev();
static  VTBL_ENTRY vtc_S20679C1[] = {
  ABISELECT(6928,4804),
  ABISELECT(6048,4200),
  ABISELECT(5904,4100),
  ABISELECT(5616,3896),
  ABISELECT(6656,4620),
  ABISELECT(5848,4060),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C1[0]),
  (VTBL_ENTRY)&_ZN9S20679C103v11Ev,
  (VTBL_ENTRY)&_ZN8S20679C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20679C12v2Ev,
  0,
  0,
  ABISELECT(288,204),
  ABISELECT(232,164),
  ABISELECT(-5616,-3896),
  (VTBL_ENTRY)&(_ZTI8S20679C1[0]),
  (VTBL_ENTRY)&_ZN8S20679C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20679C22v4Ev,
  ABISELECT(-56,-40),
  ABISELECT(-5904,-4100),
  (VTBL_ENTRY)&(_ZTI8S20679C1[0]),
  0,
  0,
  0,
  0,
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-144,-100),
  ABISELECT(-432,-304),
  ABISELECT(-200,-140),
  ABISELECT(-6048,-4200),
  (VTBL_ENTRY)&(_ZTI8S20679C1[0]),
  (VTBL_ENTRY)&_ZN8S20679C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20679C53v10Ev,
  ABISELECT(-616,-432),
  ABISELECT(-6464,-4492),
  (VTBL_ENTRY)&(_ZTI8S20679C1[0]),
  0,
  ABISELECT(-6656,-4620),
  (VTBL_ENTRY)&(_ZTI8S20679C1[0]),
  (VTBL_ENTRY)&_ZN8S20679C72v8Ev,
  0,
  ABISELECT(-1080,-744),
  ABISELECT(-6928,-4804),
  (VTBL_ENTRY)&(_ZTI8S20679C1[0]),
  (VTBL_ENTRY)&_ZN8S20679C92v9Ev,
};
extern VTBL_ENTRY _ZTV8S20679C1[];
extern void _ZN9S20679C103v11Ev();
static  VTBL_ENTRY _tg__ZTV9S20679C10__8S20679C1[] = {
  ABISELECT(6656,4620),
  ABISELECT(5848,4060),
  0,
  (VTBL_ENTRY)&(_ZTI9S20679C10[0]),
  (VTBL_ENTRY)&_ZN9S20679C103v11Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20679C49S20679C10__A4__8S20679C1[] = {
  ABISELECT(5848,4060),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
extern void _ZN8S20679C72v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C7__9S20679C10__8S20679C1[] = {
  0,
  ABISELECT(-6656,-4620),
  (VTBL_ENTRY)&(_ZTI9S20679C10[0]),
  (VTBL_ENTRY)&_ZN8S20679C72v8Ev,
};
extern void _ZN8S20679C22v3Ev();
extern void _ZN8S20679C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C2__8S20679C1[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C2[0]),
  (VTBL_ENTRY)&_ZN8S20679C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20679C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20679C4__8S20679C2__8S20679C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI8S20679C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20679C4__8S20679C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
extern void _ZN8S20679C62v5Ev();
extern void _ZN8S20679C62v6Ev();
extern void _ZN8S20679C62v7Ev();
extern void _ZN8S20679C53v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C5__8S20679C1[] = {
  ABISELECT(880,604),
  ABISELECT(608,420),
  ABISELECT(-144,-100),
  ABISELECT(-432,-304),
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  (VTBL_ENTRY)&_ZN8S20679C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v7Ev,
  (VTBL_ENTRY)&_ZN8S20679C53v10Ev,
};
extern void _ZN8S20679C62v5Ev();
extern void _ZN8S20679C62v6Ev();
extern void _ZN8S20679C62v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C68S20679C5__8S20679C1[] = {
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C6[0]),
  (VTBL_ENTRY)&_ZN8S20679C62v5Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20679C62v7Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20679C48S20679C68S20679C5__A1__8S20679C1[] = {
  ABISELECT(-200,-140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20679C48S20679C5__A2__8S20679C1[] = {
  ABISELECT(-616,-432),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
extern void _ZN8S20679C22v3Ev();
extern void _ZN8S20679C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C2__8S20679C5__8S20679C1[] = {
  0,
  0,
  ABISELECT(288,204),
  ABISELECT(232,164),
  ABISELECT(432,304),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  (VTBL_ENTRY)&_ZN8S20679C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20679C22v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20679C4__A1__8S20679C5__8S20679C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20679C4__A__8S20679C5__8S20679C1[] = {
  ABISELECT(-616,-432),
  ABISELECT(-416,-292),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
};
extern void _ZN8S20679C72v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C7__8S20679C5__8S20679C1[] = {
  0,
  ABISELECT(-608,-420),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  (VTBL_ENTRY)&_ZN8S20679C72v8Ev,
};
extern void _ZN8S20679C92v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C9__8S20679C5__8S20679C1[] = {
  0,
  ABISELECT(-1080,-744),
  ABISELECT(-880,-604),
  (VTBL_ENTRY)&(_ZTI8S20679C5[0]),
  (VTBL_ENTRY)&_ZN8S20679C92v9Ev,
};
extern void _ZN8S20679C92v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20679C9__8S20679C1[] = {
  ABISELECT(-1080,-744),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C9[0]),
  (VTBL_ENTRY)&_ZN8S20679C92v9Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20679C48S20679C9__A3__8S20679C1[] = {
  ABISELECT(-1080,-744),
  0,
  (VTBL_ENTRY)&(_ZTI8S20679C4[0]),
};
static  VTT_ENTRY vtt_S20679C1[] = {
  {&(_ZTV8S20679C1[8]),  8,49},
  {&(_tg__ZTV9S20679C10__8S20679C1[4]),  4,5},
  {&(_tg__ZTV8S20679C49S20679C10__A4__8S20679C1[3]),  3,3},
  {&(_tg__ZTV8S20679C7__9S20679C10__8S20679C1[3]),  3,4},
  {&(_ZTV8S20679C1[17]),  17,49},
  {&(_ZTV8S20679C1[22]),  22,49},
  {&(_ZTV8S20679C1[33]),  33,49},
  {&(_ZTV8S20679C1[40]),  40,49},
  {&(_ZTV8S20679C1[43]),  43,49},
  {&(_ZTV8S20679C1[48]),  48,49},
  {&(_tg__ZTV8S20679C2__8S20679C1[4]),  4,6},
  {&(_tg__ZTV8S20679C4__8S20679C2__8S20679C1[3]),  3,3},
  {&(_tg__ZTV8S20679C4__8S20679C1[3]),  3,3},
  {&(_tg__ZTV8S20679C5__8S20679C1[7]),  7,11},
  {&(_tg__ZTV8S20679C68S20679C5__8S20679C1[3]),  3,6},
  {&(_tg__ZTV8S20679C48S20679C68S20679C5__A1__8S20679C1[3]),  3,3},
  {&(_tg__ZTV8S20679C48S20679C5__A2__8S20679C1[3]),  3,3},
  {&(_tg__ZTV8S20679C2__8S20679C5__8S20679C1[6]),  6,8},
  {&(_tg__ZTV8S20679C4__A1__8S20679C5__8S20679C1[3]),  3,3},
  {&(_tg__ZTV8S20679C4__A__8S20679C5__8S20679C1[3]),  3,3},
  {&(_tg__ZTV8S20679C7__8S20679C5__8S20679C1[3]),  3,4},
  {&(_tg__ZTV8S20679C9__8S20679C5__8S20679C1[4]),  4,5},
  {&(_tg__ZTV8S20679C9__8S20679C1[3]),  3,4},
  {&(_tg__ZTV8S20679C48S20679C9__A3__8S20679C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20679C1[];
extern  VTBL_ENTRY _ZTV8S20679C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20679C1[];
Class_Descriptor cd_S20679C1 = {  "S20679C1", // class name
  bases_S20679C1, 14,
  &(vtc_S20679C1[0]), // expected_vtbl_contents
  &(vtt_S20679C1[0]), // expected_vtt_contents
  ABISELECT(7104,4940), // object size
  NSPAIRA(_ZTI8S20679C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20679C1),49, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20679C1),24, //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  S20675C5  : virtual S20677C3 {
  long double s20675c5f0;
  int s20675c5f1;
  ::S20677C3 s20675c5f2;
  ::S20677C3 s20675c5f3;
  ~S20675C5(); // tgen
  S20675C5(); // tgen
};
//SIG(-1 S20675C5) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S20675C5 ::~S20675C5(){ note_dtor("S20675C5", this);} // tgen
S20675C5 ::S20675C5(){ note_ctor("S20675C5", this);} // tgen

static void Test_S20675C5()
{
  extern Class_Descriptor cd_S20675C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S20675C5, buf);
    S20675C5 *dp, &lv = *(dp=new (buf) S20675C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S20675C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C5)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S20675C5");
    check_field_offset(lv, s20675c5f0, ABISELECT(16,4), "S20675C5.s20675c5f0");
    check_field_offset(lv, s20675c5f1, ABISELECT(32,16), "S20675C5.s20675c5f1");
    check_field_offset(lv, s20675c5f2, ABISELECT(40,20), "S20675C5.s20675c5f2");
    check_field_offset(lv, s20675c5f3, ABISELECT(88,60), "S20675C5.s20675c5f3");
    test_class_info(&lv, &cd_S20675C5);
    dp->~S20675C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C5(Test_S20675C5, "S20675C5", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S20675C5C1Ev();
extern void _ZN8S20675C5D1Ev();
Name_Map name_map_S20675C5[] = {
  NSPAIR(_ZN8S20675C5C1Ev),
  NSPAIR(_ZN8S20675C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20675C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20675C5[];
static  VTBL_ENTRY vtc_S20675C5[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern VTBL_ENTRY _ZTV8S20675C5[];
static  VTT_ENTRY vtt_S20675C5[] = {
  {&(_ZTV8S20675C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
Class_Descriptor cd_S20675C5 = {  "S20675C5", // class name
  bases_S20675C5, 1,
  &(vtc_S20675C5[0]), // expected_vtbl_contents
  &(vtt_S20675C5[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S20675C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20675C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20675C5),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20675C4  : virtual S20677C3 , S20675C5 {
  short s20675c4f0;
  __tsi64 s20675c4f1;
  char s20675c4f2;
  int s20675c4f3[2];
  ::S20675C5 s20675c4f4;
  void *s20675c4f5;
  __tsi64 s20675c4f6;
  int s20675c4f7;
  __tsi64 s20675c4f8;
  int s20675c4f9;
  virtual void  v2(); // _ZN8S20675C42v2Ev
  virtual void  v3(); // _ZN8S20675C42v3Ev
  virtual void  v4(); // _ZN8S20675C42v4Ev
  ~S20675C4(); // tgen
  S20675C4(); // tgen
};
//SIG(-1 S20675C4) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S20675C4 ::v2(){vfunc_called(this, "_ZN8S20675C42v2Ev");}
void  S20675C4 ::v3(){vfunc_called(this, "_ZN8S20675C42v3Ev");}
void  S20675C4 ::v4(){vfunc_called(this, "_ZN8S20675C42v4Ev");}
S20675C4 ::~S20675C4(){ note_dtor("S20675C4", this);} // tgen
S20675C4 ::S20675C4(){ note_ctor("S20675C4", this);} // tgen

static void Test_S20675C4()
{
  extern Class_Descriptor cd_S20675C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S20675C4, buf);
    S20675C4 *dp, &lv = *(dp=new (buf) S20675C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S20675C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S20675C4");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*), ABISELECT(408,292), "S20675C4");
    check_base_class_offset(lv, (S20675C5*), 0, "S20675C4");
    check_field_offset(lv, s20675c4f0, ABISELECT(136,100), "S20675C4.s20675c4f0");
    check_field_offset(lv, s20675c4f1, ABISELECT(144,104), "S20675C4.s20675c4f1");
    check_field_offset(lv, s20675c4f2, ABISELECT(152,112), "S20675C4.s20675c4f2");
    check_field_offset(lv, s20675c4f3, ABISELECT(156,116), "S20675C4.s20675c4f3");
    check_field_offset(lv, s20675c4f4, ABISELECT(176,124), "S20675C4.s20675c4f4");
    check_field_offset(lv, s20675c4f5, ABISELECT(368,264), "S20675C4.s20675c4f5");
    check_field_offset(lv, s20675c4f6, ABISELECT(376,268), "S20675C4.s20675c4f6");
    check_field_offset(lv, s20675c4f7, ABISELECT(384,276), "S20675C4.s20675c4f7");
    check_field_offset(lv, s20675c4f8, ABISELECT(392,280), "S20675C4.s20675c4f8");
    check_field_offset(lv, s20675c4f9, ABISELECT(400,288), "S20675C4.s20675c4f9");
    test_class_info(&lv, &cd_S20675C4);
    dp->~S20675C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C4(Test_S20675C4, "S20675C4", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S20675C4C1Ev();
extern void _ZN8S20675C4D1Ev();
Name_Map name_map_S20675C4[] = {
  NSPAIR(_ZN8S20675C4C1Ev),
  NSPAIR(_ZN8S20675C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
static Base_Class bases_S20675C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20675C5,    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 _ZTI8S20675C4[];
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY vtc_S20675C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C4[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20675C4[];
static  VTBL_ENTRY _tg__ZTV8S20675C5__8S20675C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
static  VTT_ENTRY vtt_S20675C4[] = {
  {&(_ZTV8S20675C4[3]),  3,6},
  {&(_tg__ZTV8S20675C5__8S20675C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20675C4[];
extern  VTBL_ENTRY _ZTV8S20675C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C4[];
Class_Descriptor cd_S20675C4 = {  "S20675C4", // class name
  bases_S20675C4, 2,
  &(vtc_S20675C4[0]), // expected_vtbl_contents
  &(vtt_S20675C4[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S20675C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20675C4),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20675C4),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  S20675C2  : virtual S20677C3 , virtual S20675C4 {
  __tsi64 s20675c2f0;
  ::S20677C6_nt s20675c2f1;
  void *s20675c2f2;
  char s20675c2f3[2];
  ::S20677C3 s20675c2f4;
  long s20675c2f5;
  ::S20677C6_nt s20675c2f6;
  virtual void  v5(); // _ZN8S20675C22v5Ev
  virtual void  v6(); // _ZN8S20675C22v6Ev
  virtual void  v7(); // _ZN8S20675C22v7Ev
  ~S20675C2(); // tgen
  S20675C2(); // tgen
};
//SIG(-1 S20675C2) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S20675C2 ::v5(){vfunc_called(this, "_ZN8S20675C22v5Ev");}
void  S20675C2 ::v6(){vfunc_called(this, "_ZN8S20675C22v6Ev");}
void  S20675C2 ::v7(){vfunc_called(this, "_ZN8S20675C22v7Ev");}
S20675C2 ::~S20675C2(){ note_dtor("S20675C2", this);} // tgen
S20675C2 ::S20675C2(){ note_ctor("S20675C2", this);} // tgen

static void Test_S20675C2()
{
  extern Class_Descriptor cd_S20675C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S20675C2, buf);
    S20675C2 *dp, &lv = *(dp=new (buf) S20675C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S20675C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C2)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S20675C2");
    check_base_class_offset(lv, (S20677C3*)(S20675C4*), ABISELECT(104,72), "S20675C2");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*)(S20675C4*), ABISELECT(104,72), "S20675C2");
    check_base_class_offset(lv, (S20675C5*)(S20675C4*), ABISELECT(160,112), "S20675C2");
    check_base_class_offset(lv, (S20675C4*), ABISELECT(160,112), "S20675C2");
    check_field_offset(lv, s20675c2f0, ABISELECT(8,4), "S20675C2.s20675c2f0");
    check_field_offset(lv, s20675c2f1, ABISELECT(16,12), "S20675C2.s20675c2f1");
    check_field_offset(lv, s20675c2f2, ABISELECT(24,16), "S20675C2.s20675c2f2");
    check_field_offset(lv, s20675c2f3, ABISELECT(32,20), "S20675C2.s20675c2f3");
    check_field_offset(lv, s20675c2f4, ABISELECT(40,24), "S20675C2.s20675c2f4");
    check_field_offset(lv, s20675c2f5, ABISELECT(88,64), "S20675C2.s20675c2f5");
    check_field_offset(lv, s20675c2f6, ABISELECT(96,68), "S20675C2.s20675c2f6");
    test_class_info(&lv, &cd_S20675C2);
    dp->~S20675C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C2(Test_S20675C2, "S20675C2", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN8S20675C2C1Ev();
extern void _ZN8S20675C2D1Ev();
Name_Map name_map_S20675C2[] = {
  NSPAIR(_ZN8S20675C2C1Ev),
  NSPAIR(_ZN8S20675C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C4;
extern VTBL_ENTRY _ZTI8S20675C4[];
extern  VTBL_ENTRY _ZTV8S20675C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C4[];
static Base_Class bases_S20675C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20675C5,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20675C4,    ABISELECT(160,112), //bcp->offset
    7, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20675C2[];
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY vtc_S20675C2[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20675C2[];
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__8S20675C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C4[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C58S20675C4__8S20675C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
static  VTT_ENTRY vtt_S20675C2[] = {
  {&(_ZTV8S20675C2[4]),  4,16},
  {&(_ZTV8S20675C2[13]),  13,16},
  {&(_tg__ZTV8S20675C4__8S20675C2[3]),  3,6},
  {&(_tg__ZTV8S20675C58S20675C4__8S20675C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20675C2[];
extern  VTBL_ENTRY _ZTV8S20675C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C2[];
Class_Descriptor cd_S20675C2 = {  "S20675C2", // class name
  bases_S20675C2, 3,
  &(vtc_S20675C2[0]), // expected_vtbl_contents
  &(vtt_S20675C2[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI8S20675C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20675C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20675C2),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  S20675C8  : S20677C3 {
  ::S20677C3 s20675c8f0;
  int s20675c8f1;
  long double s20675c8f2;
  int s20675c8f3;
  __tsi64 s20675c8f4;
  long s20675c8f5;
};
//SIG(-1 S20675C8) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S20675C8()
{
  extern Class_Descriptor cd_S20675C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20675C8, buf);
    S20675C8 &lv = *(new (buf) S20675C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20675C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C8)");
    check_base_class_offset(lv, (S20677C3*), 0, "S20675C8");
    check_field_offset(lv, s20675c8f0, ABISELECT(48,40), "S20675C8.s20675c8f0");
    check_field_offset(lv, s20675c8f1, ABISELECT(96,80), "S20675C8.s20675c8f1");
    check_field_offset(lv, s20675c8f2, ABISELECT(112,84), "S20675C8.s20675c8f2");
    check_field_offset(lv, s20675c8f3, ABISELECT(128,96), "S20675C8.s20675c8f3");
    check_field_offset(lv, s20675c8f4, ABISELECT(136,100), "S20675C8.s20675c8f4");
    check_field_offset(lv, s20675c8f5, ABISELECT(144,108), "S20675C8.s20675c8f5");
    test_class_info(&lv, &cd_S20675C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C8(Test_S20675C8, "S20675C8", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20675C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20675C8[];
Class_Descriptor cd_S20675C8 = {  "S20675C8", // class name
  bases_S20675C8, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S20675C8),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20675C9  : S20675C5 {
  __tsi64 s20675c9f0;
  char s20675c9f1[7];
  void *s20675c9f2;
  int s20675c9f3;
  ::S20677C6_nt s20675c9f4;
  ::S20677C6_nt s20675c9f5;
  char s20675c9f6[10];
  virtual void  v8(); // _ZN8S20675C92v8Ev
  ~S20675C9(); // tgen
  S20675C9(); // tgen
};
//SIG(-1 S20675C9) C1{ BC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} v1 FL Fc[7] Fp Fi FC4{} FC4 Fc[10]}


void  S20675C9 ::v8(){vfunc_called(this, "_ZN8S20675C92v8Ev");}
S20675C9 ::~S20675C9(){ note_dtor("S20675C9", this);} // tgen
S20675C9 ::S20675C9(){ note_ctor("S20675C9", this);} // tgen

static void Test_S20675C9()
{
  extern Class_Descriptor cd_S20675C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,45)];
    init_test(&cd_S20675C9, buf);
    S20675C9 *dp, &lv = *(dp=new (buf) S20675C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,176), "sizeof(S20675C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C9)");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*), ABISELECT(176,136), "S20675C9");
    check_base_class_offset(lv, (S20675C5*), 0, "S20675C9");
    check_field_offset(lv, s20675c9f0, ABISELECT(136,100), "S20675C9.s20675c9f0");
    check_field_offset(lv, s20675c9f1, ABISELECT(144,108), "S20675C9.s20675c9f1");
    check_field_offset(lv, s20675c9f2, ABISELECT(152,116), "S20675C9.s20675c9f2");
    check_field_offset(lv, s20675c9f3, ABISELECT(160,120), "S20675C9.s20675c9f3");
    check_field_offset(lv, s20675c9f4, ABISELECT(164,124), "S20675C9.s20675c9f4");
    check_field_offset(lv, s20675c9f5, ABISELECT(165,125), "S20675C9.s20675c9f5");
    check_field_offset(lv, s20675c9f6, ABISELECT(166,126), "S20675C9.s20675c9f6");
    test_class_info(&lv, &cd_S20675C9);
    dp->~S20675C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C9(Test_S20675C9, "S20675C9", ABISELECT(224,176));

#else // __cplusplus

extern void _ZN8S20675C9C1Ev();
extern void _ZN8S20675C9D1Ev();
Name_Map name_map_S20675C9[] = {
  NSPAIR(_ZN8S20675C9C1Ev),
  NSPAIR(_ZN8S20675C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
static Base_Class bases_S20675C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(176,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
  0, 1},
  {&cd_S20675C5,    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 _ZTI8S20675C9[];
extern void _ZN8S20675C92v8Ev();
static  VTBL_ENTRY vtc_S20675C9[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C9[0]),
  (VTBL_ENTRY)&_ZN8S20675C92v8Ev,
};
extern VTBL_ENTRY _ZTV8S20675C9[];
static  VTBL_ENTRY _tg__ZTV8S20675C5__8S20675C9[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
static  VTT_ENTRY vtt_S20675C9[] = {
  {&(_ZTV8S20675C9[3]),  3,4},
  {&(_tg__ZTV8S20675C5__8S20675C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20675C9[];
extern  VTBL_ENTRY _ZTV8S20675C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C9[];
Class_Descriptor cd_S20675C9 = {  "S20675C9", // class name
  bases_S20675C9, 2,
  &(vtc_S20675C9[0]), // expected_vtbl_contents
  &(vtt_S20675C9[0]), // expected_vtt_contents
  ABISELECT(224,176), // object size
  NSPAIRA(_ZTI8S20675C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20675C9),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20675C9),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  S20675C12  : virtual S20677C3 , virtual S20675C5 {
  int s20675c12f0;
  ::S20675C5 s20675c12f1;
  __tsi64 s20675c12f2;
  int s20675c12f3;
  void *s20675c12f4;
  virtual void  v9(); // _ZN9S20675C122v9Ev
  virtual void  v10(); // _ZN9S20675C123v10Ev
  ~S20675C12(); // tgen
  S20675C12(); // tgen
};
//SIG(-1 S20675C12) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 FD Fi FC2 FC2} v1 v2 Fi FC3 FL Fi Fp}


void  S20675C12 ::v9(){vfunc_called(this, "_ZN9S20675C122v9Ev");}
void  S20675C12 ::v10(){vfunc_called(this, "_ZN9S20675C123v10Ev");}
S20675C12 ::~S20675C12(){ note_dtor("S20675C12", this);} // tgen
S20675C12 ::S20675C12(){ note_ctor("S20675C12", this);} // tgen

static void Test_S20675C12()
{
  extern Class_Descriptor cd_S20675C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,77)];
    init_test(&cd_S20675C12, buf);
    S20675C12 *dp, &lv = *(dp=new (buf) S20675C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,304), "sizeof(S20675C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C12)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(232,164), "S20675C12");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*), ABISELECT(232,164), "S20675C12");
    check_base_class_offset(lv, (S20675C5*), ABISELECT(288,204), "S20675C12");
    check_field_offset(lv, s20675c12f0, ABISELECT(8,4), "S20675C12.s20675c12f0");
    check_field_offset(lv, s20675c12f1, ABISELECT(16,8), "S20675C12.s20675c12f1");
    check_field_offset(lv, s20675c12f2, ABISELECT(208,148), "S20675C12.s20675c12f2");
    check_field_offset(lv, s20675c12f3, ABISELECT(216,156), "S20675C12.s20675c12f3");
    check_field_offset(lv, s20675c12f4, ABISELECT(224,160), "S20675C12.s20675c12f4");
    test_class_info(&lv, &cd_S20675C12);
    dp->~S20675C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C12(Test_S20675C12, "S20675C12", ABISELECT(432,304));

#else // __cplusplus

extern void _ZN9S20675C12C1Ev();
extern void _ZN9S20675C12D1Ev();
Name_Map name_map_S20675C12[] = {
  NSPAIR(_ZN9S20675C12C1Ev),
  NSPAIR(_ZN9S20675C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
static Base_Class bases_S20675C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(232,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20675C5,    ABISELECT(288,204), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20675C12[];
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY vtc_S20675C12[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
};
extern VTBL_ENTRY _ZTV9S20675C12[];
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C12[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
static  VTT_ENTRY vtt_S20675C12[] = {
  {&(_ZTV9S20675C12[4]),  4,9},
  {&(_ZTV9S20675C12[9]),  9,9},
  {&(_tg__ZTV8S20675C5__9S20675C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20675C12[];
extern  VTBL_ENTRY _ZTV9S20675C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C12[];
Class_Descriptor cd_S20675C12 = {  "S20675C12", // class name
  bases_S20675C12, 2,
  &(vtc_S20675C12[0]), // expected_vtbl_contents
  &(vtt_S20675C12[0]), // expected_vtt_contents
  ABISELECT(432,304), // object size
  NSPAIRA(_ZTI9S20675C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20675C12),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20675C12),3, //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  S20675C13  {
  ::S20677C6_nt s20675c13f0;
  ::S20675C5 s20675c13f1;
  ::S20677C6_nt s20675c13f2;
  __tsi64 s20675c13f3;
  ::S20677C6_nt s20675c13f4;
  void *s20675c13f5;
  ::S20677C6_nt s20675c13f6;
  void *s20675c13f7[2];
  ::S20677C6_nt s20675c13f8;
  virtual void  v13(); // _ZN9S20675C133v13Ev
  ~S20675C13(); // tgen
  S20675C13(); // tgen
};
//SIG(-1 S20675C13) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S20675C13 ::v13(){vfunc_called(this, "_ZN9S20675C133v13Ev");}
S20675C13 ::~S20675C13(){ note_dtor("S20675C13", this);} // tgen
S20675C13 ::S20675C13(){ note_ctor("S20675C13", this);} // tgen

static void Test_S20675C13()
{
  extern Class_Descriptor cd_S20675C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S20675C13, buf);
    S20675C13 *dp, &lv = *(dp=new (buf) S20675C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S20675C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C13)");
    check_field_offset(lv, s20675c13f0, ABISELECT(8,4), "S20675C13.s20675c13f0");
    check_field_offset(lv, s20675c13f1, ABISELECT(16,8), "S20675C13.s20675c13f1");
    check_field_offset(lv, s20675c13f2, ABISELECT(208,148), "S20675C13.s20675c13f2");
    check_field_offset(lv, s20675c13f3, ABISELECT(216,152), "S20675C13.s20675c13f3");
    check_field_offset(lv, s20675c13f4, ABISELECT(224,160), "S20675C13.s20675c13f4");
    check_field_offset(lv, s20675c13f5, ABISELECT(232,164), "S20675C13.s20675c13f5");
    check_field_offset(lv, s20675c13f6, ABISELECT(240,168), "S20675C13.s20675c13f6");
    check_field_offset(lv, s20675c13f7, ABISELECT(248,172), "S20675C13.s20675c13f7");
    check_field_offset(lv, s20675c13f8, ABISELECT(264,180), "S20675C13.s20675c13f8");
    test_class_info(&lv, &cd_S20675C13);
    dp->~S20675C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C13(Test_S20675C13, "S20675C13", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN9S20675C13C1Ev();
extern void _ZN9S20675C13D1Ev();
Name_Map name_map_S20675C13[] = {
  NSPAIR(_ZN9S20675C13C1Ev),
  NSPAIR(_ZN9S20675C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20675C13[];
extern void _ZN9S20675C133v13Ev();
static  VTBL_ENTRY vtc_S20675C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C13[0]),
  (VTBL_ENTRY)&_ZN9S20675C133v13Ev,
};
extern VTBL_ENTRY _ZTI9S20675C13[];
extern  VTBL_ENTRY _ZTV9S20675C13[];
Class_Descriptor cd_S20675C13 = {  "S20675C13", // class name
  0,0,//no base classes
  &(vtc_S20675C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI9S20675C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20675C13),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20675C11  : virtual S20675C4 , virtual S20675C2 , virtual S20675C12 {
  ::S20677C6_nt s20675c11f0;
  ::S20677C6_nt s20675c11f1;
  int s20675c11f2;
  ::S20675C5 s20675c11f3;
  ::S20677C6_nt s20675c11f4;
  ::S20677C6_nt s20675c11f5;
  ::S20675C13 s20675c11f6;
  ::S20675C2 s20675c11f7;
  void *s20675c11f8;
  ::S20677C6_nt s20675c11f9;
  virtual void  v11(); // _ZN9S20675C113v11Ev
  virtual void  v12(); // _ZN9S20675C113v12Ev
  ~S20675C11(); // tgen
  S20675C11(); // tgen
};
//SIG(-1 S20675C11) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v3 v4 v5 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC2 v6 v7 v8 FL FC6{} Fp Fc[2] FC3 Fl FC6} VBC7{ VBC3 VBC4 v9 v10 Fi FC4 FL Fi Fp} v1 v2 FC6 FC6 Fi FC4 FC6 FC6 FC8{ v11 FC6 FC4 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC5 Fp FC6}


void  S20675C11 ::v11(){vfunc_called(this, "_ZN9S20675C113v11Ev");}
void  S20675C11 ::v12(){vfunc_called(this, "_ZN9S20675C113v12Ev");}
S20675C11 ::~S20675C11(){ note_dtor("S20675C11", this);} // tgen
S20675C11 ::S20675C11(){ note_ctor("S20675C11", this);} // tgen

static void Test_S20675C11()
{
  extern Class_Descriptor cd_S20675C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(128,356)];
    init_test(&cd_S20675C11, buf);
    S20675C11 *dp, &lv = *(dp=new (buf) S20675C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2032,1420), "sizeof(S20675C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C11)");
    check_base_class_offset(lv, (S20677C3*)(S20675C4*), ABISELECT(1496,1044), "S20675C11");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*)(S20675C4*), ABISELECT(1496,1044), "S20675C11");
    check_base_class_offset(lv, (S20677C3*)(S20675C2*), ABISELECT(1496,1044), "S20675C11");
    check_base_class_offset(lv, (S20677C3*)(S20675C12*), ABISELECT(1496,1044), "S20675C11");
    /*is_ambiguous_... S20675C11::S20675C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C5*), ABISELECT(1496,1044), "S20675C11");
    check_base_class_offset(lv, (S20675C5*)(S20675C4*), ABISELECT(1088,752), "S20675C11");
    check_base_class_offset(lv, (S20675C4*), ABISELECT(1088,752), "S20675C11");
    check_base_class_offset(lv, (S20675C4*)(S20675C2*), ABISELECT(1088,752), "S20675C11");
    check_base_class_offset(lv, (S20675C2*), ABISELECT(1544,1084), "S20675C11");
    check_base_class_offset(lv, (S20675C5*)(S20675C12*), ABISELECT(1888,1320), "S20675C11");
    check_base_class_offset(lv, (S20675C12*), ABISELECT(1648,1156), "S20675C11");
    check_field_offset(lv, s20675c11f0, ABISELECT(8,4), "S20675C11.s20675c11f0");
    check_field_offset(lv, s20675c11f1, ABISELECT(9,5), "S20675C11.s20675c11f1");
    check_field_offset(lv, s20675c11f2, ABISELECT(12,8), "S20675C11.s20675c11f2");
    check_field_offset(lv, s20675c11f3, ABISELECT(16,12), "S20675C11.s20675c11f3");
    check_field_offset(lv, s20675c11f4, ABISELECT(208,152), "S20675C11.s20675c11f4");
    check_field_offset(lv, s20675c11f5, ABISELECT(209,153), "S20675C11.s20675c11f5");
    check_field_offset(lv, s20675c11f6, ABISELECT(224,156), "S20675C11.s20675c11f6");
    check_field_offset(lv, s20675c11f7, ABISELECT(496,340), "S20675C11.s20675c11f7");
    check_field_offset(lv, s20675c11f8, ABISELECT(1072,744), "S20675C11.s20675c11f8");
    check_field_offset(lv, s20675c11f9, ABISELECT(1080,748), "S20675C11.s20675c11f9");
    test_class_info(&lv, &cd_S20675C11);
    dp->~S20675C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C11(Test_S20675C11, "S20675C11", ABISELECT(2032,1420));

#else // __cplusplus

extern void _ZN9S20675C11C1Ev();
extern void _ZN9S20675C11D1Ev();
Name_Map name_map_S20675C11[] = {
  NSPAIR(_ZN9S20675C11C1Ev),
  NSPAIR(_ZN9S20675C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C4;
extern VTBL_ENTRY _ZTI8S20675C4[];
extern  VTBL_ENTRY _ZTV8S20675C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C4[];
extern Class_Descriptor cd_S20675C2;
extern VTBL_ENTRY _ZTI8S20675C2[];
extern  VTBL_ENTRY _ZTV8S20675C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C2[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C12;
extern VTBL_ENTRY _ZTI9S20675C12[];
extern  VTBL_ENTRY _ZTV9S20675C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C12[];
static Base_Class bases_S20675C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1496,1044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20675C5,    ABISELECT(1088,752), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20675C4,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20675C2,    ABISELECT(1544,1084), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20675C5,    ABISELECT(1888,1320), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20675C12,    ABISELECT(1648,1156), //bcp->offset
    28, //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},
  {0}};
extern VTBL_ENTRY _ZTI9S20675C11[];
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY vtc_S20675C11[] = {
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-1544,-1084),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-1648,-1156),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
  ABISELECT(-392,-276),
  ABISELECT(-1888,-1320),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
};
extern VTBL_ENTRY _ZTV9S20675C11[];
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__9S20675C11[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C4[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C58S20675C4__9S20675C11[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__9S20675C11[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__8S20675C2__9S20675C11[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__9S20675C11[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C12__9S20675C11[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__A1__9S20675C11[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
static  VTT_ENTRY vtt_S20675C11[] = {
  {&(_ZTV9S20675C11[7]),  7,39},
  {&(_ZTV9S20675C11[15]),  15,39},
  {&(_ZTV9S20675C11[25]),  25,39},
  {&(_ZTV9S20675C11[34]),  34,39},
  {&(_ZTV9S20675C11[39]),  39,39},
  {&(_tg__ZTV8S20675C4__9S20675C11[3]),  3,6},
  {&(_tg__ZTV8S20675C58S20675C4__9S20675C11[3]),  3,3},
  {&(_tg__ZTV8S20675C2__9S20675C11[4]),  4,7},
  {&(_tg__ZTV8S20675C4__8S20675C2__9S20675C11[6]),  6,9},
  {&(_tg__ZTV9S20675C12__9S20675C11[4]),  4,6},
  {&(_tg__ZTV8S20675C5__9S20675C12__9S20675C11[3]),  3,3},
  {&(_tg__ZTV8S20675C5__A1__9S20675C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20675C11[];
extern  VTBL_ENTRY _ZTV9S20675C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C11[];
Class_Descriptor cd_S20675C11 = {  "S20675C11", // class name
  bases_S20675C11, 6,
  &(vtc_S20675C11[0]), // expected_vtbl_contents
  &(vtt_S20675C11[0]), // expected_vtt_contents
  ABISELECT(2032,1420), // object size
  NSPAIRA(_ZTI9S20675C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20675C11),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20675C11),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20675C10  : virtual S20675C5 , S20675C11 , S20675C12 {
  int s20675c10f0;
  char s20675c10f1:2;
  ::S20677C6_nt s20675c10f2;
  int s20675c10f3;
  ~S20675C10(); // tgen
  S20675C10(); // tgen
};
//SIG(-1 S20675C10) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} BC4{ VBC5{ VBC3 BC2 v1 v2 v3 Fs FL Fc Fi[2] FC2 Fp FL Fi FL Fi} VBC6{ VBC3 VBC5 v4 v5 v6 FL FC7{} Fp Fc[2] FC3 Fl FC7} VBC8{ VBC3 VBC2 v7 v8 Fi FC2 FL Fi Fp} v9 v10 FC7 FC7 Fi FC2 FC7 FC7 FC9{ v11 FC7 FC2 FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} BC8 Fi Fc:2 FC7 Fi}


S20675C10 ::~S20675C10(){ note_dtor("S20675C10", this);} // tgen
S20675C10 ::S20675C10(){ note_ctor("S20675C10", this);} // tgen

static void Test_S20675C10()
{
  extern Class_Descriptor cd_S20675C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(144,400)];
    init_test(&cd_S20675C10, buf);
    S20675C10 *dp, &lv = *(dp=new (buf) S20675C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2288,1596), "sizeof(S20675C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C10)");
    /*is_ambiguous_... S20675C10::S20675C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C5*), ABISELECT(1480,1028), "S20675C10");
    check_base_class_offset(lv, (S20677C3*)(S20675C4*), ABISELECT(1480,1028), "S20675C10");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*)(S20675C4*), ABISELECT(1480,1028), "S20675C10");
    check_base_class_offset(lv, (S20677C3*)(S20675C2*), ABISELECT(1480,1028), "S20675C10");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C12*), ABISELECT(1480,1028), "S20675C10");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C12*), ABISELECT(1480,1028), "S20675C10");
    /*is_ambiguous_... S20675C10::S20675C5 */ AMB_check_base_class_offset(lv, (S20675C5*), ABISELECT(1344,928), "S20675C10");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C5*)(S20675C12*), ABISELECT(1344,928), "S20675C10");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C5*)(S20675C12*), ABISELECT(1344,928), "S20675C10");
    check_base_class_offset(lv, (S20675C5*)(S20675C4*), ABISELECT(1536,1068), "S20675C10");
    check_base_class_offset(lv, (S20675C4*)(S20675C11*), ABISELECT(1536,1068), "S20675C10");
    check_base_class_offset(lv, (S20675C4*)(S20675C2*), ABISELECT(1536,1068), "S20675C10");
    check_base_class_offset(lv, (S20675C2*)(S20675C11*), ABISELECT(1944,1360), "S20675C10");
    check_base_class_offset(lv, (S20675C12*)(S20675C11*), ABISELECT(2048,1432), "S20675C10");
    check_base_class_offset(lv, (S20675C11*), 0, "S20675C10");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C12*), ABISELECT(1088,752), "S20675C10");
    check_field_offset(lv, s20675c10f0, ABISELECT(1320,916), "S20675C10.s20675c10f0");
    set_bf_and_test(lv, s20675c10f1, ABISELECT(1324,920), 0, 2, 1, "S20675C10");
    set_bf_and_test(lv, s20675c10f1, ABISELECT(1324,920), 0, 2, hide_sll(1LL<<1), "S20675C10");
    check_field_offset(lv, s20675c10f2, ABISELECT(1325,921), "S20675C10.s20675c10f2");
    check_field_offset(lv, s20675c10f3, ABISELECT(1328,924), "S20675C10.s20675c10f3");
    test_class_info(&lv, &cd_S20675C10);
    dp->~S20675C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C10(Test_S20675C10, "S20675C10", ABISELECT(2288,1596));

#else // __cplusplus

extern void _ZN9S20675C10C1Ev();
extern void _ZN9S20675C10D1Ev();
Name_Map name_map_S20675C10[] = {
  NSPAIR(_ZN9S20675C10C1Ev),
  NSPAIR(_ZN9S20675C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C4;
extern VTBL_ENTRY _ZTI8S20675C4[];
extern  VTBL_ENTRY _ZTV8S20675C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C4[];
extern Class_Descriptor cd_S20675C2;
extern VTBL_ENTRY _ZTI8S20675C2[];
extern  VTBL_ENTRY _ZTV8S20675C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C2[];
extern Class_Descriptor cd_S20675C12;
extern VTBL_ENTRY _ZTI9S20675C12[];
extern  VTBL_ENTRY _ZTV9S20675C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C12[];
extern Class_Descriptor cd_S20675C11;
extern VTBL_ENTRY _ZTI9S20675C11[];
extern  VTBL_ENTRY _ZTV9S20675C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C11[];
extern Class_Descriptor cd_S20675C12;
extern VTBL_ENTRY _ZTI9S20675C12[];
extern  VTBL_ENTRY _ZTV9S20675C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C12[];
static Base_Class bases_S20675C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1480,1028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20675C5,    ABISELECT(1344,928), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20675C5,    ABISELECT(1536,1068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    3, //immediately_derived
  0, 0},
  {&cd_S20675C4,    ABISELECT(1536,1068), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20675C2,    ABISELECT(1944,1360), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20675C12,    ABISELECT(2048,1432), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20675C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20675C12,    ABISELECT(1088,752), //bcp->offset
    9, //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20675C10[];
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY vtc_S20675C10[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
  ABISELECT(256,176),
  ABISELECT(392,276),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
extern VTBL_ENTRY _ZTV9S20675C10[];
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C11__9S20675C10[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__9S20675C11__9S20675C10[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__9S20675C11__9S20675C10[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__9S20675C11__9S20675C10[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__A1__9S20675C11__9S20675C10[] = {
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__A__9S20675C10[] = {
  ABISELECT(256,176),
  ABISELECT(392,276),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C12__A__9S20675C10[] = {
  ABISELECT(136,100),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C10[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__9S20675C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C4[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C58S20675C4__A1__9S20675C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__9S20675C10[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__8S20675C2__9S20675C10[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__9S20675C10[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C12__9S20675C10[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
};
static  VTT_ENTRY vtt_S20675C10[] = {
  {&(_ZTV9S20675C10[7]),  7,45},
  {&(_tg__ZTV9S20675C11__9S20675C10[7]),  7,9},
  {&(_tg__ZTV8S20675C4__9S20675C11__9S20675C10[6]),  6,9},
  {&(_tg__ZTV8S20675C2__9S20675C11__9S20675C10[7]),  7,10},
  {&(_tg__ZTV9S20675C12__9S20675C11__9S20675C10[6]),  6,8},
  {&(_tg__ZTV8S20675C5__A1__9S20675C11__9S20675C10[3]),  3,3},
  {&(_tg__ZTV9S20675C12__A__9S20675C10[4]),  4,6},
  {&(_tg__ZTV8S20675C5__9S20675C12__A__9S20675C10[3]),  3,3},
  {&(_ZTV9S20675C10[18]),  18,45},
  {&(_ZTV9S20675C10[24]),  24,45},
  {&(_ZTV9S20675C10[34]),  34,45},
  {&(_ZTV9S20675C10[43]),  43,45},
  {&(_ZTV9S20675C10[13]),  13,45},
  {&(_tg__ZTV8S20675C5__9S20675C10[3]),  3,3},
  {&(_tg__ZTV8S20675C4__9S20675C10[3]),  3,6},
  {&(_tg__ZTV8S20675C58S20675C4__A1__9S20675C10[3]),  3,3},
  {&(_tg__ZTV8S20675C2__9S20675C10[4]),  4,7},
  {&(_tg__ZTV8S20675C4__8S20675C2__9S20675C10[6]),  6,9},
  {&(_tg__ZTV9S20675C12__9S20675C10[4]),  4,6},
  {&(_tg__ZTV8S20675C5__9S20675C12__9S20675C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20675C10[];
extern  VTBL_ENTRY _ZTV9S20675C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C10[];
Class_Descriptor cd_S20675C10 = {  "S20675C10", // class name
  bases_S20675C10, 8,
  &(vtc_S20675C10[0]), // expected_vtbl_contents
  &(vtt_S20675C10[0]), // expected_vtt_contents
  ABISELECT(2288,1596), // object size
  NSPAIRA(_ZTI9S20675C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20675C10),45, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20675C10),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20675C7  : S20675C8 , S20677C3 , virtual S20675C9 , virtual S20675C10 {
  long s20675c7f0;
  virtual  ~S20675C7(); // _ZN8S20675C7D2Ev
  S20675C7(); // tgen
};
//SIG(-1 S20675C7) C1{ BC2{ BC3{ m Fp FL[4] Fs} FC3 Fi FD Fi FL Fl} BC3 VBC4{ BC5{ VBC3 FD Fi FC3 FC3} v1 FL Fc[7] Fp Fi FC6{} FC6 Fc[10]} VBC7{ VBC5 BC8{ VBC9{ VBC3 BC5 v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC10{ VBC3 VBC9 v5 v6 v7 FL FC6 Fp Fc[2] FC3 Fl FC6} VBC11{ VBC3 VBC5 v8 v9 Fi FC5 FL Fi Fp} v10 v11 FC6 FC6 Fi FC5 FC6 FC6 FC12{ v12 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC10 Fp FC6} BC11 Fi Fc:2 FC6 Fi} vd Fl}


 S20675C7 ::~S20675C7(){ note_dtor("S20675C7", this);}
S20675C7 ::S20675C7(){ note_ctor("S20675C7", this);} // tgen

static void Test_S20675C7()
{
  extern Class_Descriptor cd_S20675C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(169,474)];
    init_test(&cd_S20675C7, buf);
    S20675C7 *dp, &lv = *(dp=new (buf) S20675C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2688,1892), "sizeof(S20675C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C7)");
    check_base_class_offset(lv, (S20677C3*)(S20675C8*), ABISELECT(16,4), "S20675C7");
    check_base_class_offset(lv, (S20675C8*), ABISELECT(16,4), "S20675C7");
    /*is_ambiguous_... S20675C7::S20677C3 */ AMB_check_base_class_offset(lv, (S20677C3*), ABISELECT(168,116), "S20675C7");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*)(S20675C9*), ABISELECT(400,296), "S20675C7");
    /*is_ambiguous_... S20675C7::S20675C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C5*), ABISELECT(400,296), "S20675C7");
    check_base_class_offset(lv, (S20677C3*)(S20675C4*), ABISELECT(400,296), "S20675C7");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*)(S20675C4*), ABISELECT(400,296), "S20675C7");
    check_base_class_offset(lv, (S20677C3*)(S20675C2*), ABISELECT(400,296), "S20675C7");
    /*is_ambiguous_... S20675C7::S20675C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C12*), ABISELECT(400,296), "S20675C7");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C12*)(S20675C10*), ABISELECT(400,296), "S20675C7");
    check_base_class_offset(lv, (S20675C5*)(S20675C9*), ABISELECT(224,160), "S20675C7");
    check_base_class_offset(lv, (S20675C9*), ABISELECT(224,160), "S20675C7");
    /*is_ambiguous_... S20675C10::S20675C5 */ AMB_check_base_class_offset(lv, (S20675C5*)(S20675C10*), ABISELECT(1792,1264), "S20675C7");
    /*is_ambiguous_... S20675C7::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C5*)(S20675C12*), ABISELECT(1792,1264), "S20675C7");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C5*)(S20675C12*)(S20675C10*), ABISELECT(1792,1264), "S20675C7");
    check_base_class_offset(lv, (S20675C5*)(S20675C4*), ABISELECT(1936,1364), "S20675C7");
    check_base_class_offset(lv, (S20675C4*)(S20675C11*)(S20675C10*), ABISELECT(1936,1364), "S20675C7");
    check_base_class_offset(lv, (S20675C4*)(S20675C2*), ABISELECT(1936,1364), "S20675C7");
    check_base_class_offset(lv, (S20675C2*)(S20675C11*)(S20675C10*), ABISELECT(2344,1656), "S20675C7");
    check_base_class_offset(lv, (S20675C12*)(S20675C11*)(S20675C10*), ABISELECT(2448,1728), "S20675C7");
    check_base_class_offset(lv, (S20675C11*)(S20675C10*), ABISELECT(448,336), "S20675C7");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C12*)(S20675C10*), ABISELECT(1536,1088), "S20675C7");
    check_base_class_offset(lv, (S20675C10*), ABISELECT(448,336), "S20675C7");
    check_field_offset(lv, s20675c7f0, ABISELECT(216,156), "S20675C7.s20675c7f0");
    test_class_info(&lv, &cd_S20675C7);
    dp->~S20675C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C7(Test_S20675C7, "S20675C7", ABISELECT(2688,1892));

#else // __cplusplus

extern void _ZN8S20675C7C1Ev();
extern void _ZN8S20675C7D2Ev();
Name_Map name_map_S20675C7[] = {
  NSPAIR(_ZN8S20675C7C1Ev),
  NSPAIR(_ZN8S20675C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C8;
extern VTBL_ENTRY _ZTI8S20675C8[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C9;
extern VTBL_ENTRY _ZTI8S20675C9[];
extern  VTBL_ENTRY _ZTV8S20675C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C9[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C4;
extern VTBL_ENTRY _ZTI8S20675C4[];
extern  VTBL_ENTRY _ZTV8S20675C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C4[];
extern Class_Descriptor cd_S20675C2;
extern VTBL_ENTRY _ZTI8S20675C2[];
extern  VTBL_ENTRY _ZTV8S20675C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C2[];
extern Class_Descriptor cd_S20675C12;
extern VTBL_ENTRY _ZTI9S20675C12[];
extern  VTBL_ENTRY _ZTV9S20675C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C12[];
extern Class_Descriptor cd_S20675C11;
extern VTBL_ENTRY _ZTI9S20675C11[];
extern  VTBL_ENTRY _ZTV9S20675C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C11[];
extern Class_Descriptor cd_S20675C12;
extern VTBL_ENTRY _ZTI9S20675C12[];
extern  VTBL_ENTRY _ZTV9S20675C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C12[];
extern Class_Descriptor cd_S20675C10;
extern VTBL_ENTRY _ZTI9S20675C10[];
extern  VTBL_ENTRY _ZTV9S20675C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C10[];
static Base_Class bases_S20675C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    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
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20675C8,    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
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C3,    ABISELECT(168,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20677C3,    ABISELECT(400,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
    4, //immediately_derived
  0, 1},
  {&cd_S20675C5,    ABISELECT(224,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20675C9,    ABISELECT(224,160), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20675C5,    ABISELECT(1792,1264), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20675C5,    ABISELECT(1936,1364), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20675C4,    ABISELECT(1936,1364), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20675C2,    ABISELECT(2344,1656), //bcp->offset
    47, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20675C12,    ABISELECT(2448,1728), //bcp->offset
    57, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20675C11,    ABISELECT(448,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20675C12,    ABISELECT(1536,1088), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20675C10,    ABISELECT(448,336), //bcp->offset
    16, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20675C7[];
extern void _ZN8S20675C7D1Ev();
extern void _ZN8S20675C7D0Ev();
extern void _ZN8S20675C92v8Ev();
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY vtc_S20675C7[] = {
  ABISELECT(2448,1728),
  ABISELECT(2344,1656),
  ABISELECT(1936,1364),
  ABISELECT(1792,1264),
  ABISELECT(448,336),
  ABISELECT(400,296),
  ABISELECT(224,160),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN8S20675C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20675C7D0Ev,
  0,
  ABISELECT(176,136),
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN8S20675C92v8Ev,
  ABISELECT(1088,752),
  ABISELECT(1088,752),
  0,
  0,
  ABISELECT(1344,928),
  ABISELECT(2000,1392),
  ABISELECT(1896,1320),
  ABISELECT(-48,-40),
  ABISELECT(1488,1028),
  ABISELECT(-448,-336),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
  ABISELECT(256,176),
  ABISELECT(-1136,-792),
  ABISELECT(-1536,-1088),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
  ABISELECT(-1392,-968),
  ABISELECT(-1792,-1264),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  0,
  0,
  0,
  ABISELECT(-1536,-1068),
  ABISELECT(-1936,-1364),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1944,-1360),
  ABISELECT(-2344,-1656),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
  0,
  0,
  ABISELECT(-656,-464),
  ABISELECT(-2048,-1432),
  ABISELECT(-2448,-1728),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
extern VTBL_ENTRY _ZTV8S20675C7[];
extern void _ZN8S20675C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C9__8S20675C7[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C9[0]),
  (VTBL_ENTRY)&_ZN8S20675C92v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C58S20675C9__8S20675C7[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C10__8S20675C7[] = {
  ABISELECT(1344,928),
  ABISELECT(2000,1392),
  ABISELECT(1896,1320),
  ABISELECT(-48,-40),
  ABISELECT(1488,1028),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
};
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C119S20675C10__8S20675C7[] = {
  ABISELECT(1344,928),
  ABISELECT(2000,1392),
  ABISELECT(1896,1320),
  ABISELECT(-48,-40),
  ABISELECT(1488,1028),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__9S20675C119S20675C10__8S20675C7[] = {
  0,
  0,
  0,
  ABISELECT(-1536,-1068),
  ABISELECT(-1488,-1028),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__9S20675C119S20675C10__8S20675C7[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1944,-1360),
  ABISELECT(-1896,-1320),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__9S20675C119S20675C10__8S20675C7[] = {
  0,
  0,
  ABISELECT(-656,-464),
  ABISELECT(-2048,-1432),
  ABISELECT(-2000,-1392),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__A1__9S20675C119S20675C10__8S20675C7[] = {
  ABISELECT(-1392,-968),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C129S20675C10__A1__8S20675C7[] = {
  ABISELECT(256,176),
  ABISELECT(-1136,-792),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C129S20675C10__A1__8S20675C7[] = {
  ABISELECT(-1392,-968),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C10__8S20675C7[] = {
  ABISELECT(-1392,-968),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__9S20675C10__8S20675C7[] = {
  0,
  0,
  0,
  ABISELECT(-1536,-1068),
  ABISELECT(-1488,-1028),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__9S20675C10__8S20675C7[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1944,-1360),
  ABISELECT(-1896,-1320),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__9S20675C10__8S20675C7[] = {
  0,
  0,
  ABISELECT(-656,-464),
  ABISELECT(-2048,-1432),
  ABISELECT(-2000,-1392),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__A__9S20675C10__8S20675C7[] = {
  ABISELECT(256,176),
  ABISELECT(-1136,-792),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__A1__8S20675C7[] = {
  ABISELECT(-1392,-968),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__8S20675C7[] = {
  ABISELECT(-1536,-1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C4[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C58S20675C4__A2__8S20675C7[] = {
  ABISELECT(-1536,-1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__8S20675C7[] = {
  ABISELECT(-408,-292),
  ABISELECT(-1944,-1360),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__8S20675C2__8S20675C7[] = {
  0,
  0,
  0,
  ABISELECT(-1536,-1068),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__8S20675C7[] = {
  ABISELECT(-656,-464),
  ABISELECT(-2048,-1432),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C12__8S20675C7[] = {
  ABISELECT(-1392,-968),
  ABISELECT(656,464),
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
};
static  VTT_ENTRY vtt_S20675C7[] = {
  {&(_ZTV8S20675C7[9]),  9,65},
  {&(_ZTV8S20675C7[15]),  15,65},
  {&(_ZTV8S20675C7[27]),  27,65},
  {&(_ZTV8S20675C7[38]),  38,65},
  {&(_ZTV8S20675C7[44]),  44,65},
  {&(_ZTV8S20675C7[54]),  54,65},
  {&(_ZTV8S20675C7[63]),  63,65},
  {&(_ZTV8S20675C7[33]),  33,65},
  {&(_tg__ZTV8S20675C9__8S20675C7[3]),  3,4},
  {&(_tg__ZTV8S20675C58S20675C9__8S20675C7[3]),  3,3},
  {&(_tg__ZTV9S20675C10__8S20675C7[7]),  7,9},
  {&(_tg__ZTV9S20675C119S20675C10__8S20675C7[7]),  7,9},
  {&(_tg__ZTV8S20675C4__9S20675C119S20675C10__8S20675C7[6]),  6,9},
  {&(_tg__ZTV8S20675C2__9S20675C119S20675C10__8S20675C7[7]),  7,10},
  {&(_tg__ZTV9S20675C12__9S20675C119S20675C10__8S20675C7[6]),  6,8},
  {&(_tg__ZTV8S20675C5__A1__9S20675C119S20675C10__8S20675C7[3]),  3,3},
  {&(_tg__ZTV9S20675C129S20675C10__A1__8S20675C7[4]),  4,6},
  {&(_tg__ZTV8S20675C5__9S20675C129S20675C10__A1__8S20675C7[3]),  3,3},
  {&(_tg__ZTV8S20675C5__9S20675C10__8S20675C7[3]),  3,3},
  {&(_tg__ZTV8S20675C4__9S20675C10__8S20675C7[6]),  6,9},
  {&(_tg__ZTV8S20675C2__9S20675C10__8S20675C7[7]),  7,10},
  {&(_tg__ZTV9S20675C12__9S20675C10__8S20675C7[6]),  6,8},
  {&(_tg__ZTV9S20675C12__A__9S20675C10__8S20675C7[4]),  4,6},
  {&(_tg__ZTV8S20675C5__A1__8S20675C7[3]),  3,3},
  {&(_tg__ZTV8S20675C4__8S20675C7[3]),  3,6},
  {&(_tg__ZTV8S20675C58S20675C4__A2__8S20675C7[3]),  3,3},
  {&(_tg__ZTV8S20675C2__8S20675C7[4]),  4,7},
  {&(_tg__ZTV8S20675C4__8S20675C2__8S20675C7[6]),  6,9},
  {&(_tg__ZTV9S20675C12__8S20675C7[4]),  4,6},
  {&(_tg__ZTV8S20675C5__9S20675C12__8S20675C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20675C7[];
extern  VTBL_ENTRY _ZTV8S20675C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C7[];
Class_Descriptor cd_S20675C7 = {  "S20675C7", // class name
  bases_S20675C7, 14,
  &(vtc_S20675C7[0]), // expected_vtbl_contents
  &(vtt_S20675C7[0]), // expected_vtt_contents
  ABISELECT(2688,1892), // object size
  NSPAIRA(_ZTI8S20675C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20675C7),65, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20675C7),30, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20675C14  : virtual S20675C13 {
  ::S20680C5 s20675c14f0;
  ::S20677C6_nt s20675c14f1;
  long s20675c14f2;
  int s20675c14f3[2];
  virtual void  v14(); // _ZN9S20675C143v14Ev
  ~S20675C14(); // tgen
  S20675C14(); // tgen
};
//SIG(-1 S20675C14) C1{ VBC2{ v2 FC3{} FC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} FC3 FL FC3 Fp FC3 Fp[2] FC3} v1 FC6{ BC7{ VBC5 BC8{ VBC5 FD Fi FC5 FC5} v4 v5 v6 Fs FL Fc Fi[2] FC8 Fp FL Fi FL Fi} VBC9{ VBC5 VBC8 v7 v8 Fi FC8 FL Fi Fp} BC8 VBC10{ v9 FC3 FC8 FC3 FL FC3 Fp FC3 Fp[2] FC3} VBC11{ BC8 v10 FL Fc[7] Fp Fi FC3 FC3 Fc[10]} v3 Fl FL FD FC3} FC3 Fl Fi[2]}


void  S20675C14 ::v14(){vfunc_called(this, "_ZN9S20675C143v14Ev");}
S20675C14 ::~S20675C14(){ note_dtor("S20675C14", this);} // tgen
S20675C14 ::S20675C14(){ note_ctor("S20675C14", this);} // tgen

static void Test_S20675C14()
{
  extern Class_Descriptor cd_S20675C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(114,313)];
    init_test(&cd_S20675C14, buf);
    S20675C14 *dp, &lv = *(dp=new (buf) S20675C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1808,1248), "sizeof(S20675C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C14)");
    check_base_class_offset(lv, (S20675C13*), ABISELECT(1536,1064), "S20675C14");
    check_field_offset(lv, s20675c14f0, ABISELECT(16,4), "S20675C14.s20675c14f0");
    check_field_offset(lv, s20675c14f1, ABISELECT(1504,1048), "S20675C14.s20675c14f1");
    check_field_offset(lv, s20675c14f2, ABISELECT(1512,1052), "S20675C14.s20675c14f2");
    check_field_offset(lv, s20675c14f3, ABISELECT(1520,1056), "S20675C14.s20675c14f3");
    test_class_info(&lv, &cd_S20675C14);
    dp->~S20675C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C14(Test_S20675C14, "S20675C14", ABISELECT(1808,1248));

#else // __cplusplus

extern void _ZN9S20675C14C1Ev();
extern void _ZN9S20675C14D1Ev();
Name_Map name_map_S20675C14[] = {
  NSPAIR(_ZN9S20675C14C1Ev),
  NSPAIR(_ZN9S20675C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20675C13;
extern VTBL_ENTRY _ZTI9S20675C13[];
extern  VTBL_ENTRY _ZTV9S20675C13[];
static Base_Class bases_S20675C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20675C13,    ABISELECT(1536,1064), //bcp->offset
    4, //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 _ZTI9S20675C14[];
extern void _ZN9S20675C143v14Ev();
extern void _ZN9S20675C133v13Ev();
static  VTBL_ENTRY vtc_S20675C14[] = {
  ABISELECT(1536,1064),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C14[0]),
  (VTBL_ENTRY)&_ZN9S20675C143v14Ev,
  0,
  ABISELECT(-1536,-1064),
  (VTBL_ENTRY)&(_ZTI9S20675C14[0]),
  (VTBL_ENTRY)&_ZN9S20675C133v13Ev,
};
extern VTBL_ENTRY _ZTV9S20675C14[];
static  VTT_ENTRY vtt_S20675C14[] = {
  {&(_ZTV9S20675C14[3]),  3,8},
  {&(_ZTV9S20675C14[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S20675C14[];
extern  VTBL_ENTRY _ZTV9S20675C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C14[];
Class_Descriptor cd_S20675C14 = {  "S20675C14", // class name
  bases_S20675C14, 1,
  &(vtc_S20675C14[0]), // expected_vtbl_contents
  &(vtt_S20675C14[0]), // expected_vtt_contents
  ABISELECT(1808,1248), // object size
  NSPAIRA(_ZTI9S20675C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20675C14),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20675C14),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  S20675C1  : virtual S20675C2 , S20675C7 , virtual S20675C14 {
  int s20675c1f0;
  int s20675c1f1:13;
  ::S20677C6_nt s20675c1f2;
  ::S20677C6_nt s20675c1f3;
  void *s20675c1f4;
  ::S20677C6_nt s20675c1f5;
  __tsi64 s20675c1f6;
  char s20675c1f7;
  ::S20677C6_nt s20675c1f8;
  virtual void  v1(); // _ZN8S20675C12v1Ev
  ~S20675C1(); // tgen
  S20675C1(); // tgen
};
//SIG(1 S20675C1) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v5 v6 v7 FL FC6{} Fp Fc[2] FC3 Fl FC6} BC7{ BC8{ BC3 FC3 Fi FD Fi FL Fl} BC3 VBC9{ BC5 v8 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} VBC10{ VBC5 BC11{ VBC4 VBC2 VBC12{ VBC3 VBC5 v9 v10 Fi FC5 FL Fi Fp} v11 v12 FC6 FC6 Fi FC5 FC6 FC6 FC13{ v13 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC2 Fp FC6} BC12 Fi Fc:2 FC6 Fi} vd Fl} VBC14{ VBC13 v14 FC15{ BC16{ VBC3 BC17{ VBC3 FD Fi FC3 FC3} v16 v17 v18 Fs FL Fc Fi[2] FC17 Fp FL Fi FL Fi} VBC18{ VBC3 VBC17 v19 v20 Fi FC17 FL Fi Fp} BC17 VBC19{ v21 FC6 FC17 FC6 FL FC6 Fp FC6 Fp[2] FC6} VBC20{ BC17 v22 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v15 Fl FL FD FC6} FC6 Fl Fi[2]} v1 Fi Fi:13 FC6 FC6 Fp FC6 FL Fc FC6}


void  S20675C1 ::v1(){vfunc_called(this, "_ZN8S20675C12v1Ev");}
S20675C1 ::~S20675C1(){ note_dtor("S20675C1", this);} // tgen
S20675C1 ::S20675C1(){ note_ctor("S20675C1", this);} // tgen

static void Test_S20675C1()
{
  extern Class_Descriptor cd_S20675C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(285,793)];
    init_test(&cd_S20675C1, buf);
    S20675C1 *dp, &lv = *(dp=new (buf) S20675C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4544,3168), "sizeof(S20675C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20675C1)");
    check_base_class_offset(lv, (S20677C3*)(S20675C2*), ABISELECT(368,260), "S20675C1");
    check_base_class_offset(lv, (S20677C3*)(S20675C4*), ABISELECT(368,260), "S20675C1");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*)(S20675C4*), ABISELECT(368,260), "S20675C1");
    check_base_class_offset(lv, (S20677C3*)(S20675C5*)(S20675C9*), ABISELECT(368,260), "S20675C1");
    /*is_ambiguous_... S20675C1::S20675C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C5*), ABISELECT(368,260), "S20675C1");
    /*is_ambiguous_... S20675C1::S20675C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C12*), ABISELECT(368,260), "S20675C1");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C12*)(S20675C10*), ABISELECT(368,260), "S20675C1");
    check_base_class_offset(lv, (S20675C5*)(S20675C4*), ABISELECT(416,300), "S20675C1");
    check_base_class_offset(lv, (S20675C4*)(S20675C2*), ABISELECT(416,300), "S20675C1");
    check_base_class_offset(lv, (S20675C4*)(S20675C11*)(S20675C10*), ABISELECT(416,300), "S20675C1");
    check_base_class_offset(lv, (S20675C2*), ABISELECT(264,188), "S20675C1");
    check_base_class_offset(lv, (S20675C2*)(S20675C11*)(S20675C10*), ABISELECT(264,188), "S20675C1");
    check_base_class_offset(lv, (S20677C3*)(S20675C8*)(S20675C7*), ABISELECT(16,4), "S20675C1");
    check_base_class_offset(lv, (S20675C8*)(S20675C7*), ABISELECT(16,4), "S20675C1");
    /*is_ambiguous_... S20675C7::S20677C3 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20675C7*), ABISELECT(168,116), "S20675C1");
    check_base_class_offset(lv, (S20675C5*)(S20675C9*), ABISELECT(832,592), "S20675C1");
    check_base_class_offset(lv, (S20675C9*)(S20675C7*), ABISELECT(832,592), "S20675C1");
    /*is_ambiguous_... S20675C10::S20675C5 */ AMB_check_base_class_offset(lv, (S20675C5*)(S20675C10*), ABISELECT(2352,1656), "S20675C1");
    /*is_ambiguous_... S20675C1::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C5*)(S20675C12*), ABISELECT(2352,1656), "S20675C1");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C5*)(S20675C12*)(S20675C10*), ABISELECT(2352,1656), "S20675C1");
    check_base_class_offset(lv, (S20675C12*)(S20675C11*)(S20675C10*), ABISELECT(2496,1756), "S20675C1");
    check_base_class_offset(lv, (S20675C11*)(S20675C10*), ABISELECT(1008,728), "S20675C1");
    /*is_ambiguous_... S20675C10::S20675C12 */ AMB_check_base_class_offset(lv, (S20675C12*)(S20675C10*), ABISELECT(2096,1480), "S20675C1");
    check_base_class_offset(lv, (S20675C10*)(S20675C7*), ABISELECT(1008,728), "S20675C1");
    check_base_class_offset(lv, (S20675C7*), 0, "S20675C1");
    check_base_class_offset(lv, (S20675C13*)(S20675C14*), ABISELECT(4272,2984), "S20675C1");
    check_base_class_offset(lv, (S20675C14*), ABISELECT(2736,1920), "S20675C1");
    check_field_offset(lv, s20675c1f0, ABISELECT(224,160), "S20675C1.s20675c1f0");
    set_bf_and_test(lv, s20675c1f1, ABISELECT(228,164), 0, 13, 1, "S20675C1");
    set_bf_and_test(lv, s20675c1f1, ABISELECT(228,164), 0, 13, hide_sll(1LL<<12), "S20675C1");
    check_field_offset(lv, s20675c1f2, ABISELECT(230,166), "S20675C1.s20675c1f2");
    check_field_offset(lv, s20675c1f3, ABISELECT(231,167), "S20675C1.s20675c1f3");
    check_field_offset(lv, s20675c1f4, ABISELECT(232,168), "S20675C1.s20675c1f4");
    check_field_offset(lv, s20675c1f5, ABISELECT(240,172), "S20675C1.s20675c1f5");
    check_field_offset(lv, s20675c1f6, ABISELECT(248,176), "S20675C1.s20675c1f6");
    check_field_offset(lv, s20675c1f7, ABISELECT(256,184), "S20675C1.s20675c1f7");
    check_field_offset(lv, s20675c1f8, ABISELECT(257,185), "S20675C1.s20675c1f8");
    test_class_info(&lv, &cd_S20675C1);
    dp->~S20675C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20675C1(Test_S20675C1, "S20675C1", ABISELECT(4544,3168));

#else // __cplusplus

extern void _ZN8S20675C1C1Ev();
extern void _ZN8S20675C1D1Ev();
Name_Map name_map_S20675C1[] = {
  NSPAIR(_ZN8S20675C1C1Ev),
  NSPAIR(_ZN8S20675C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C4;
extern VTBL_ENTRY _ZTI8S20675C4[];
extern  VTBL_ENTRY _ZTV8S20675C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C4[];
extern Class_Descriptor cd_S20675C2;
extern VTBL_ENTRY _ZTI8S20675C2[];
extern  VTBL_ENTRY _ZTV8S20675C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C2[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C8;
extern VTBL_ENTRY _ZTI8S20675C8[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C9;
extern VTBL_ENTRY _ZTI8S20675C9[];
extern  VTBL_ENTRY _ZTV8S20675C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C9[];
extern Class_Descriptor cd_S20675C5;
extern VTBL_ENTRY _ZTI8S20675C5[];
extern  VTBL_ENTRY _ZTV8S20675C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C5[];
extern Class_Descriptor cd_S20675C12;
extern VTBL_ENTRY _ZTI9S20675C12[];
extern  VTBL_ENTRY _ZTV9S20675C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C12[];
extern Class_Descriptor cd_S20675C11;
extern VTBL_ENTRY _ZTI9S20675C11[];
extern  VTBL_ENTRY _ZTV9S20675C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C11[];
extern Class_Descriptor cd_S20675C12;
extern VTBL_ENTRY _ZTI9S20675C12[];
extern  VTBL_ENTRY _ZTV9S20675C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C12[];
extern Class_Descriptor cd_S20675C10;
extern VTBL_ENTRY _ZTI9S20675C10[];
extern  VTBL_ENTRY _ZTV9S20675C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C10[];
extern Class_Descriptor cd_S20675C7;
extern VTBL_ENTRY _ZTI8S20675C7[];
extern  VTBL_ENTRY _ZTV8S20675C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C7[];
extern Class_Descriptor cd_S20675C13;
extern VTBL_ENTRY _ZTI9S20675C13[];
extern  VTBL_ENTRY _ZTV9S20675C13[];
extern Class_Descriptor cd_S20675C14;
extern VTBL_ENTRY _ZTI9S20675C14[];
extern  VTBL_ENTRY _ZTV9S20675C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20675C14[];
static Base_Class bases_S20675C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(368,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
  0, 1},
  {&cd_S20675C5,    ABISELECT(416,300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20675C4,    ABISELECT(416,300), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20675C2,    ABISELECT(264,188), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20675C8,    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
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20677C3,    ABISELECT(168,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20675C5,    ABISELECT(832,592), //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20675C9,    ABISELECT(832,592), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20675C5,    ABISELECT(2352,1656), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20675C12,    ABISELECT(2496,1756), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20675C11,    ABISELECT(1008,728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20675C12,    ABISELECT(2096,1480), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20675C10,    ABISELECT(1008,728), //bcp->offset
    38, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20675C7,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20675C13,    ABISELECT(4272,2984), //bcp->offset
    73, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20675C14,    ABISELECT(2736,1920), //bcp->offset
    68, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20675C1[];
extern void _ZN8S20675C1D1Ev();
extern void _ZN8S20675C1D0Ev();
extern void _ZN8S20675C12v1Ev();
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
extern void _ZN8S20675C92v8Ev();
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
extern void _ZN9S20675C143v14Ev();
extern void _ZN9S20675C133v13Ev();
static  VTBL_ENTRY vtc_S20675C1[] = {
  ABISELECT(4272,2984),
  ABISELECT(2736,1920),
  ABISELECT(2496,1756),
  ABISELECT(264,188),
  ABISELECT(416,300),
  ABISELECT(2352,1656),
  ABISELECT(1008,728),
  ABISELECT(368,260),
  ABISELECT(832,592),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN8S20675C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20675C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20675C12v1Ev,
  0,
  0,
  0,
  ABISELECT(152,112),
  ABISELECT(104,72),
  ABISELECT(-264,-188),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(-416,-300),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
  0,
  ABISELECT(-464,-332),
  ABISELECT(-832,-592),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN8S20675C92v8Ev,
  ABISELECT(1088,752),
  ABISELECT(1088,752),
  0,
  0,
  ABISELECT(1344,928),
  ABISELECT(1488,1028),
  ABISELECT(-744,-540),
  ABISELECT(-640,-468),
  ABISELECT(-592,-428),
  ABISELECT(-1008,-728),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
  ABISELECT(256,176),
  ABISELECT(-1728,-1220),
  ABISELECT(-2096,-1480),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
  ABISELECT(-1984,-1396),
  ABISELECT(-2352,-1656),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  ABISELECT(-2496,-1756),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
  0,
  ABISELECT(1536,1064),
  ABISELECT(-2736,-1920),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN9S20675C143v14Ev,
  0,
  ABISELECT(-4272,-2984),
  (VTBL_ENTRY)&(_ZTI8S20675C1[0]),
  (VTBL_ENTRY)&_ZN9S20675C133v13Ev,
};
extern VTBL_ENTRY _ZTV8S20675C1[];
extern void _ZN8S20675C7D1Ev();
extern void _ZN8S20675C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C7__8S20675C1[] = {
  ABISELECT(2496,1756),
  ABISELECT(264,188),
  ABISELECT(416,300),
  ABISELECT(2352,1656),
  ABISELECT(1008,728),
  ABISELECT(368,260),
  ABISELECT(832,592),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN8S20675C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20675C7D0Ev,
};
extern void _ZN8S20675C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C9__8S20675C7__8S20675C1[] = {
  0,
  ABISELECT(-464,-332),
  ABISELECT(-832,-592),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN8S20675C92v8Ev,
};
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C10__8S20675C7__8S20675C1[] = {
  ABISELECT(1088,752),
  ABISELECT(1088,752),
  0,
  0,
  ABISELECT(1344,928),
  ABISELECT(1488,1028),
  ABISELECT(-744,-540),
  ABISELECT(-640,-468),
  ABISELECT(-592,-428),
  ABISELECT(-1008,-728),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__A1__8S20675C7__8S20675C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(-2352,-1656),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__8S20675C7__8S20675C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(-416,-300),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__8S20675C7__8S20675C1[] = {
  0,
  0,
  0,
  ABISELECT(152,112),
  ABISELECT(104,72),
  ABISELECT(-264,-188),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__8S20675C7__8S20675C1[] = {
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  ABISELECT(-2496,-1756),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C129S20675C10__A1__8S20675C7__8S20675C1[] = {
  ABISELECT(256,176),
  ABISELECT(-1728,-1220),
  ABISELECT(-2096,-1480),
  (VTBL_ENTRY)&(_ZTI8S20675C7[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__8S20675C1[] = {
  ABISELECT(152,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__8S20675C2__8S20675C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(-152,-112),
  (VTBL_ENTRY)&(_ZTI8S20675C2[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__8S20675C1[] = {
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C4[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C58S20675C4__8S20675C1[] = {
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN8S20675C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C9__8S20675C1[] = {
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C9[0]),
  (VTBL_ENTRY)&_ZN8S20675C92v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C58S20675C9__A1__8S20675C1[] = {
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C10__8S20675C1[] = {
  ABISELECT(1344,928),
  ABISELECT(1488,1028),
  ABISELECT(-744,-540),
  ABISELECT(-640,-468),
  ABISELECT(-592,-428),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
};
extern void _ZN9S20675C113v11Ev();
extern void _ZN9S20675C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C119S20675C10__8S20675C1[] = {
  ABISELECT(1344,928),
  ABISELECT(1488,1028),
  ABISELECT(-744,-540),
  ABISELECT(-640,-468),
  ABISELECT(-592,-428),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN9S20675C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20675C113v12Ev,
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__9S20675C119S20675C10__8S20675C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(592,428),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__9S20675C119S20675C10__8S20675C1[] = {
  0,
  0,
  0,
  ABISELECT(152,112),
  ABISELECT(104,72),
  ABISELECT(744,540),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__9S20675C119S20675C10__8S20675C1[] = {
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  ABISELECT(-1488,-1028),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__A1__9S20675C119S20675C10__8S20675C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20675C11[0]),
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C129S20675C10__A1__8S20675C1[] = {
  ABISELECT(256,176),
  ABISELECT(-1728,-1220),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C129S20675C10__A1__8S20675C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C10__8S20675C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
};
extern void _ZN8S20675C42v2Ev();
extern void _ZN8S20675C42v3Ev();
extern void _ZN8S20675C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C4__9S20675C10__8S20675C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(592,428),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN8S20675C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20675C42v4Ev,
};
extern void _ZN8S20675C22v5Ev();
extern void _ZN8S20675C22v6Ev();
extern void _ZN8S20675C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20675C2__9S20675C10__8S20675C1[] = {
  0,
  0,
  0,
  ABISELECT(152,112),
  ABISELECT(104,72),
  ABISELECT(744,540),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN8S20675C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20675C22v7Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__9S20675C10__8S20675C1[] = {
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  ABISELECT(-1488,-1028),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__A__9S20675C10__8S20675C1[] = {
  ABISELECT(256,176),
  ABISELECT(-1728,-1220),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20675C10[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__A2__8S20675C1[] = {
  ABISELECT(-1984,-1396),
  0,
  (VTBL_ENTRY)&(_ZTI8S20675C5[0]),
};
extern void _ZN9S20675C122v9Ev();
extern void _ZN9S20675C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C12__8S20675C1[] = {
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
  (VTBL_ENTRY)&_ZN9S20675C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20675C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20675C5__9S20675C12__8S20675C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20675C12[0]),
};
extern void _ZN9S20675C143v14Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C14__8S20675C1[] = {
  ABISELECT(1536,1064),
  0,
  (VTBL_ENTRY)&(_ZTI9S20675C14[0]),
  (VTBL_ENTRY)&_ZN9S20675C143v14Ev,
};
extern void _ZN9S20675C133v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20675C13__9S20675C14__8S20675C1[] = {
  0,
  ABISELECT(-1536,-1064),
  (VTBL_ENTRY)&(_ZTI9S20675C14[0]),
  (VTBL_ENTRY)&_ZN9S20675C133v13Ev,
};
static  VTT_ENTRY vtt_S20675C1[] = {
  {&(_ZTV8S20675C1[11]),  11,77},
  {&(_tg__ZTV8S20675C7__8S20675C1[9]),  9,11},
  {&(_tg__ZTV8S20675C9__8S20675C7__8S20675C1[4]),  4,5},
  {&(_tg__ZTV9S20675C10__8S20675C7__8S20675C1[11]),  11,13},
  {&(_tg__ZTV8S20675C5__A1__8S20675C7__8S20675C1[3]),  3,3},
  {&(_tg__ZTV8S20675C4__8S20675C7__8S20675C1[6]),  6,9},
  {&(_tg__ZTV8S20675C2__8S20675C7__8S20675C1[7]),  7,10},
  {&(_tg__ZTV9S20675C12__8S20675C7__8S20675C1[6]),  6,8},
  {&(_tg__ZTV9S20675C129S20675C10__A1__8S20675C7__8S20675C1[4]),  4,6},
  {&(_ZTV8S20675C1[21]),  21,77},
  {&(_ZTV8S20675C1[30]),  30,77},
  {&(_ZTV8S20675C1[37]),  37,77},
  {&(_ZTV8S20675C1[49]),  49,77},
  {&(_ZTV8S20675C1[60]),  60,77},
  {&(_ZTV8S20675C1[66]),  66,77},
  {&(_ZTV8S20675C1[55]),  55,77},
  {&(_ZTV8S20675C1[72]),  72,77},
  {&(_ZTV8S20675C1[76]),  76,77},
  {&(_tg__ZTV8S20675C2__8S20675C1[4]),  4,7},
  {&(_tg__ZTV8S20675C4__8S20675C2__8S20675C1[6]),  6,9},
  {&(_tg__ZTV8S20675C4__8S20675C1[3]),  3,6},
  {&(_tg__ZTV8S20675C58S20675C4__8S20675C1[3]),  3,3},
  {&(_tg__ZTV8S20675C9__8S20675C1[3]),  3,4},
  {&(_tg__ZTV8S20675C58S20675C9__A1__8S20675C1[3]),  3,3},
  {&(_tg__ZTV9S20675C10__8S20675C1[7]),  7,9},
  {&(_tg__ZTV9S20675C119S20675C10__8S20675C1[7]),  7,9},
  {&(_tg__ZTV8S20675C4__9S20675C119S20675C10__8S20675C1[6]),  6,9},
  {&(_tg__ZTV8S20675C2__9S20675C119S20675C10__8S20675C1[7]),  7,10},
  {&(_tg__ZTV9S20675C12__9S20675C119S20675C10__8S20675C1[6]),  6,8},
  {&(_tg__ZTV8S20675C5__A1__9S20675C119S20675C10__8S20675C1[3]),  3,3},
  {&(_tg__ZTV9S20675C129S20675C10__A1__8S20675C1[4]),  4,6},
  {&(_tg__ZTV8S20675C5__9S20675C129S20675C10__A1__8S20675C1[3]),  3,3},
  {&(_tg__ZTV8S20675C5__9S20675C10__8S20675C1[3]),  3,3},
  {&(_tg__ZTV8S20675C4__9S20675C10__8S20675C1[6]),  6,9},
  {&(_tg__ZTV8S20675C2__9S20675C10__8S20675C1[7]),  7,10},
  {&(_tg__ZTV9S20675C12__9S20675C10__8S20675C1[6]),  6,8},
  {&(_tg__ZTV9S20675C12__A__9S20675C10__8S20675C1[4]),  4,6},
  {&(_tg__ZTV8S20675C5__A2__8S20675C1[3]),  3,3},
  {&(_tg__ZTV9S20675C12__8S20675C1[4]),  4,6},
  {&(_tg__ZTV8S20675C5__9S20675C12__8S20675C1[3]),  3,3},
  {&(_tg__ZTV9S20675C14__8S20675C1[3]),  3,4},
  {&(_tg__ZTV9S20675C13__9S20675C14__8S20675C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20675C1[];
extern  VTBL_ENTRY _ZTV8S20675C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20675C1[];
Class_Descriptor cd_S20675C1 = {  "S20675C1", // class name
  bases_S20675C1, 17,
  &(vtc_S20675C1[0]), // expected_vtbl_contents
  &(vtt_S20675C1[0]), // expected_vtt_contents
  ABISELECT(4544,3168), // object size
  NSPAIRA(_ZTI8S20675C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20675C1),77, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20675C1),42, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20676C5  : virtual S20677C3 {
  long double s20676c5f0;
  int s20676c5f1;
  ::S20677C3 s20676c5f2;
  ::S20677C3 s20676c5f3;
  ~S20676C5(); // tgen
  S20676C5(); // tgen
};
//SIG(-1 S20676C5) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S20676C5 ::~S20676C5(){ note_dtor("S20676C5", this);} // tgen
S20676C5 ::S20676C5(){ note_ctor("S20676C5", this);} // tgen

static void Test_S20676C5()
{
  extern Class_Descriptor cd_S20676C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S20676C5, buf);
    S20676C5 *dp, &lv = *(dp=new (buf) S20676C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S20676C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C5)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S20676C5");
    check_field_offset(lv, s20676c5f0, ABISELECT(16,4), "S20676C5.s20676c5f0");
    check_field_offset(lv, s20676c5f1, ABISELECT(32,16), "S20676C5.s20676c5f1");
    check_field_offset(lv, s20676c5f2, ABISELECT(40,20), "S20676C5.s20676c5f2");
    check_field_offset(lv, s20676c5f3, ABISELECT(88,60), "S20676C5.s20676c5f3");
    test_class_info(&lv, &cd_S20676C5);
    dp->~S20676C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C5(Test_S20676C5, "S20676C5", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S20676C5C1Ev();
extern void _ZN8S20676C5D1Ev();
Name_Map name_map_S20676C5[] = {
  NSPAIR(_ZN8S20676C5C1Ev),
  NSPAIR(_ZN8S20676C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20676C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20676C5[];
static  VTBL_ENTRY vtc_S20676C5[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern VTBL_ENTRY _ZTV8S20676C5[];
static  VTT_ENTRY vtt_S20676C5[] = {
  {&(_ZTV8S20676C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
Class_Descriptor cd_S20676C5 = {  "S20676C5", // class name
  bases_S20676C5, 1,
  &(vtc_S20676C5[0]), // expected_vtbl_contents
  &(vtt_S20676C5[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S20676C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20676C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20676C5),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20676C4  : virtual S20677C3 , S20676C5 {
  short s20676c4f0;
  __tsi64 s20676c4f1;
  char s20676c4f2;
  int s20676c4f3[2];
  ::S20676C5 s20676c4f4;
  void *s20676c4f5;
  __tsi64 s20676c4f6;
  int s20676c4f7;
  __tsi64 s20676c4f8;
  int s20676c4f9;
  virtual void  v2(); // _ZN8S20676C42v2Ev
  virtual void  v3(); // _ZN8S20676C42v3Ev
  virtual void  v4(); // _ZN8S20676C42v4Ev
  ~S20676C4(); // tgen
  S20676C4(); // tgen
};
//SIG(-1 S20676C4) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S20676C4 ::v2(){vfunc_called(this, "_ZN8S20676C42v2Ev");}
void  S20676C4 ::v3(){vfunc_called(this, "_ZN8S20676C42v3Ev");}
void  S20676C4 ::v4(){vfunc_called(this, "_ZN8S20676C42v4Ev");}
S20676C4 ::~S20676C4(){ note_dtor("S20676C4", this);} // tgen
S20676C4 ::S20676C4(){ note_ctor("S20676C4", this);} // tgen

static void Test_S20676C4()
{
  extern Class_Descriptor cd_S20676C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S20676C4, buf);
    S20676C4 *dp, &lv = *(dp=new (buf) S20676C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S20676C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S20676C4");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*), ABISELECT(408,292), "S20676C4");
    check_base_class_offset(lv, (S20676C5*), 0, "S20676C4");
    check_field_offset(lv, s20676c4f0, ABISELECT(136,100), "S20676C4.s20676c4f0");
    check_field_offset(lv, s20676c4f1, ABISELECT(144,104), "S20676C4.s20676c4f1");
    check_field_offset(lv, s20676c4f2, ABISELECT(152,112), "S20676C4.s20676c4f2");
    check_field_offset(lv, s20676c4f3, ABISELECT(156,116), "S20676C4.s20676c4f3");
    check_field_offset(lv, s20676c4f4, ABISELECT(176,124), "S20676C4.s20676c4f4");
    check_field_offset(lv, s20676c4f5, ABISELECT(368,264), "S20676C4.s20676c4f5");
    check_field_offset(lv, s20676c4f6, ABISELECT(376,268), "S20676C4.s20676c4f6");
    check_field_offset(lv, s20676c4f7, ABISELECT(384,276), "S20676C4.s20676c4f7");
    check_field_offset(lv, s20676c4f8, ABISELECT(392,280), "S20676C4.s20676c4f8");
    check_field_offset(lv, s20676c4f9, ABISELECT(400,288), "S20676C4.s20676c4f9");
    test_class_info(&lv, &cd_S20676C4);
    dp->~S20676C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C4(Test_S20676C4, "S20676C4", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S20676C4C1Ev();
extern void _ZN8S20676C4D1Ev();
Name_Map name_map_S20676C4[] = {
  NSPAIR(_ZN8S20676C4C1Ev),
  NSPAIR(_ZN8S20676C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
static Base_Class bases_S20676C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20676C5,    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 _ZTI8S20676C4[];
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY vtc_S20676C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C4[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20676C4[];
static  VTBL_ENTRY _tg__ZTV8S20676C5__8S20676C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
static  VTT_ENTRY vtt_S20676C4[] = {
  {&(_ZTV8S20676C4[3]),  3,6},
  {&(_tg__ZTV8S20676C5__8S20676C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20676C4[];
extern  VTBL_ENTRY _ZTV8S20676C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C4[];
Class_Descriptor cd_S20676C4 = {  "S20676C4", // class name
  bases_S20676C4, 2,
  &(vtc_S20676C4[0]), // expected_vtbl_contents
  &(vtt_S20676C4[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S20676C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20676C4),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20676C4),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  S20676C2  : virtual S20677C3 , virtual S20676C4 {
  __tsi64 s20676c2f0;
  ::S20677C6_nt s20676c2f1;
  void *s20676c2f2;
  char s20676c2f3[2];
  ::S20677C3 s20676c2f4;
  long s20676c2f5;
  ::S20677C6_nt s20676c2f6;
  virtual void  v5(); // _ZN8S20676C22v5Ev
  virtual void  v6(); // _ZN8S20676C22v6Ev
  virtual void  v7(); // _ZN8S20676C22v7Ev
  ~S20676C2(); // tgen
  S20676C2(); // tgen
};
//SIG(-1 S20676C2) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S20676C2 ::v5(){vfunc_called(this, "_ZN8S20676C22v5Ev");}
void  S20676C2 ::v6(){vfunc_called(this, "_ZN8S20676C22v6Ev");}
void  S20676C2 ::v7(){vfunc_called(this, "_ZN8S20676C22v7Ev");}
S20676C2 ::~S20676C2(){ note_dtor("S20676C2", this);} // tgen
S20676C2 ::S20676C2(){ note_ctor("S20676C2", this);} // tgen

static void Test_S20676C2()
{
  extern Class_Descriptor cd_S20676C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S20676C2, buf);
    S20676C2 *dp, &lv = *(dp=new (buf) S20676C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S20676C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C2)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S20676C2");
    check_base_class_offset(lv, (S20677C3*)(S20676C4*), ABISELECT(104,72), "S20676C2");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*)(S20676C4*), ABISELECT(104,72), "S20676C2");
    check_base_class_offset(lv, (S20676C5*)(S20676C4*), ABISELECT(160,112), "S20676C2");
    check_base_class_offset(lv, (S20676C4*), ABISELECT(160,112), "S20676C2");
    check_field_offset(lv, s20676c2f0, ABISELECT(8,4), "S20676C2.s20676c2f0");
    check_field_offset(lv, s20676c2f1, ABISELECT(16,12), "S20676C2.s20676c2f1");
    check_field_offset(lv, s20676c2f2, ABISELECT(24,16), "S20676C2.s20676c2f2");
    check_field_offset(lv, s20676c2f3, ABISELECT(32,20), "S20676C2.s20676c2f3");
    check_field_offset(lv, s20676c2f4, ABISELECT(40,24), "S20676C2.s20676c2f4");
    check_field_offset(lv, s20676c2f5, ABISELECT(88,64), "S20676C2.s20676c2f5");
    check_field_offset(lv, s20676c2f6, ABISELECT(96,68), "S20676C2.s20676c2f6");
    test_class_info(&lv, &cd_S20676C2);
    dp->~S20676C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C2(Test_S20676C2, "S20676C2", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN8S20676C2C1Ev();
extern void _ZN8S20676C2D1Ev();
Name_Map name_map_S20676C2[] = {
  NSPAIR(_ZN8S20676C2C1Ev),
  NSPAIR(_ZN8S20676C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C4;
extern VTBL_ENTRY _ZTI8S20676C4[];
extern  VTBL_ENTRY _ZTV8S20676C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C4[];
static Base_Class bases_S20676C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20676C5,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20676C4,    ABISELECT(160,112), //bcp->offset
    7, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20676C2[];
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY vtc_S20676C2[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern VTBL_ENTRY _ZTV8S20676C2[];
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__8S20676C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C4[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C58S20676C4__8S20676C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
static  VTT_ENTRY vtt_S20676C2[] = {
  {&(_ZTV8S20676C2[4]),  4,16},
  {&(_ZTV8S20676C2[13]),  13,16},
  {&(_tg__ZTV8S20676C4__8S20676C2[3]),  3,6},
  {&(_tg__ZTV8S20676C58S20676C4__8S20676C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20676C2[];
extern  VTBL_ENTRY _ZTV8S20676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C2[];
Class_Descriptor cd_S20676C2 = {  "S20676C2", // class name
  bases_S20676C2, 3,
  &(vtc_S20676C2[0]), // expected_vtbl_contents
  &(vtt_S20676C2[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI8S20676C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20676C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20676C2),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  S20676C8  : S20677C3 {
  ::S20677C3 s20676c8f0;
  int s20676c8f1;
  long double s20676c8f2;
  int s20676c8f3;
  __tsi64 s20676c8f4;
  long s20676c8f5;
};
//SIG(-1 S20676C8) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S20676C8()
{
  extern Class_Descriptor cd_S20676C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20676C8, buf);
    S20676C8 &lv = *(new (buf) S20676C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20676C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C8)");
    check_base_class_offset(lv, (S20677C3*), 0, "S20676C8");
    check_field_offset(lv, s20676c8f0, ABISELECT(48,40), "S20676C8.s20676c8f0");
    check_field_offset(lv, s20676c8f1, ABISELECT(96,80), "S20676C8.s20676c8f1");
    check_field_offset(lv, s20676c8f2, ABISELECT(112,84), "S20676C8.s20676c8f2");
    check_field_offset(lv, s20676c8f3, ABISELECT(128,96), "S20676C8.s20676c8f3");
    check_field_offset(lv, s20676c8f4, ABISELECT(136,100), "S20676C8.s20676c8f4");
    check_field_offset(lv, s20676c8f5, ABISELECT(144,108), "S20676C8.s20676c8f5");
    test_class_info(&lv, &cd_S20676C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C8(Test_S20676C8, "S20676C8", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20676C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20676C8[];
Class_Descriptor cd_S20676C8 = {  "S20676C8", // class name
  bases_S20676C8, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S20676C8),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20676C9  : S20676C5 {
  __tsi64 s20676c9f0;
  char s20676c9f1[7];
  void *s20676c9f2;
  int s20676c9f3;
  ::S20677C6_nt s20676c9f4;
  ::S20677C6_nt s20676c9f5;
  char s20676c9f6[10];
  virtual void  v8(); // _ZN8S20676C92v8Ev
  ~S20676C9(); // tgen
  S20676C9(); // tgen
};
//SIG(-1 S20676C9) C1{ BC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} v1 FL Fc[7] Fp Fi FC4{} FC4 Fc[10]}


void  S20676C9 ::v8(){vfunc_called(this, "_ZN8S20676C92v8Ev");}
S20676C9 ::~S20676C9(){ note_dtor("S20676C9", this);} // tgen
S20676C9 ::S20676C9(){ note_ctor("S20676C9", this);} // tgen

static void Test_S20676C9()
{
  extern Class_Descriptor cd_S20676C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,45)];
    init_test(&cd_S20676C9, buf);
    S20676C9 *dp, &lv = *(dp=new (buf) S20676C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,176), "sizeof(S20676C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C9)");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*), ABISELECT(176,136), "S20676C9");
    check_base_class_offset(lv, (S20676C5*), 0, "S20676C9");
    check_field_offset(lv, s20676c9f0, ABISELECT(136,100), "S20676C9.s20676c9f0");
    check_field_offset(lv, s20676c9f1, ABISELECT(144,108), "S20676C9.s20676c9f1");
    check_field_offset(lv, s20676c9f2, ABISELECT(152,116), "S20676C9.s20676c9f2");
    check_field_offset(lv, s20676c9f3, ABISELECT(160,120), "S20676C9.s20676c9f3");
    check_field_offset(lv, s20676c9f4, ABISELECT(164,124), "S20676C9.s20676c9f4");
    check_field_offset(lv, s20676c9f5, ABISELECT(165,125), "S20676C9.s20676c9f5");
    check_field_offset(lv, s20676c9f6, ABISELECT(166,126), "S20676C9.s20676c9f6");
    test_class_info(&lv, &cd_S20676C9);
    dp->~S20676C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C9(Test_S20676C9, "S20676C9", ABISELECT(224,176));

#else // __cplusplus

extern void _ZN8S20676C9C1Ev();
extern void _ZN8S20676C9D1Ev();
Name_Map name_map_S20676C9[] = {
  NSPAIR(_ZN8S20676C9C1Ev),
  NSPAIR(_ZN8S20676C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
static Base_Class bases_S20676C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(176,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
  0, 1},
  {&cd_S20676C5,    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 _ZTI8S20676C9[];
extern void _ZN8S20676C92v8Ev();
static  VTBL_ENTRY vtc_S20676C9[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C9[0]),
  (VTBL_ENTRY)&_ZN8S20676C92v8Ev,
};
extern VTBL_ENTRY _ZTV8S20676C9[];
static  VTBL_ENTRY _tg__ZTV8S20676C5__8S20676C9[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
static  VTT_ENTRY vtt_S20676C9[] = {
  {&(_ZTV8S20676C9[3]),  3,4},
  {&(_tg__ZTV8S20676C5__8S20676C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20676C9[];
extern  VTBL_ENTRY _ZTV8S20676C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C9[];
Class_Descriptor cd_S20676C9 = {  "S20676C9", // class name
  bases_S20676C9, 2,
  &(vtc_S20676C9[0]), // expected_vtbl_contents
  &(vtt_S20676C9[0]), // expected_vtt_contents
  ABISELECT(224,176), // object size
  NSPAIRA(_ZTI8S20676C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20676C9),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20676C9),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  S20676C12  : virtual S20677C3 , virtual S20676C5 {
  int s20676c12f0;
  ::S20676C5 s20676c12f1;
  __tsi64 s20676c12f2;
  int s20676c12f3;
  void *s20676c12f4;
  virtual void  v9(); // _ZN9S20676C122v9Ev
  virtual void  v10(); // _ZN9S20676C123v10Ev
  ~S20676C12(); // tgen
  S20676C12(); // tgen
};
//SIG(-1 S20676C12) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 FD Fi FC2 FC2} v1 v2 Fi FC3 FL Fi Fp}


void  S20676C12 ::v9(){vfunc_called(this, "_ZN9S20676C122v9Ev");}
void  S20676C12 ::v10(){vfunc_called(this, "_ZN9S20676C123v10Ev");}
S20676C12 ::~S20676C12(){ note_dtor("S20676C12", this);} // tgen
S20676C12 ::S20676C12(){ note_ctor("S20676C12", this);} // tgen

static void Test_S20676C12()
{
  extern Class_Descriptor cd_S20676C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,77)];
    init_test(&cd_S20676C12, buf);
    S20676C12 *dp, &lv = *(dp=new (buf) S20676C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,304), "sizeof(S20676C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C12)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(232,164), "S20676C12");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*), ABISELECT(232,164), "S20676C12");
    check_base_class_offset(lv, (S20676C5*), ABISELECT(288,204), "S20676C12");
    check_field_offset(lv, s20676c12f0, ABISELECT(8,4), "S20676C12.s20676c12f0");
    check_field_offset(lv, s20676c12f1, ABISELECT(16,8), "S20676C12.s20676c12f1");
    check_field_offset(lv, s20676c12f2, ABISELECT(208,148), "S20676C12.s20676c12f2");
    check_field_offset(lv, s20676c12f3, ABISELECT(216,156), "S20676C12.s20676c12f3");
    check_field_offset(lv, s20676c12f4, ABISELECT(224,160), "S20676C12.s20676c12f4");
    test_class_info(&lv, &cd_S20676C12);
    dp->~S20676C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C12(Test_S20676C12, "S20676C12", ABISELECT(432,304));

#else // __cplusplus

extern void _ZN9S20676C12C1Ev();
extern void _ZN9S20676C12D1Ev();
Name_Map name_map_S20676C12[] = {
  NSPAIR(_ZN9S20676C12C1Ev),
  NSPAIR(_ZN9S20676C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
static Base_Class bases_S20676C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(232,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20676C5,    ABISELECT(288,204), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20676C12[];
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY vtc_S20676C12[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
};
extern VTBL_ENTRY _ZTV9S20676C12[];
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C12[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
static  VTT_ENTRY vtt_S20676C12[] = {
  {&(_ZTV9S20676C12[4]),  4,9},
  {&(_ZTV9S20676C12[9]),  9,9},
  {&(_tg__ZTV8S20676C5__9S20676C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20676C12[];
extern  VTBL_ENTRY _ZTV9S20676C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C12[];
Class_Descriptor cd_S20676C12 = {  "S20676C12", // class name
  bases_S20676C12, 2,
  &(vtc_S20676C12[0]), // expected_vtbl_contents
  &(vtt_S20676C12[0]), // expected_vtt_contents
  ABISELECT(432,304), // object size
  NSPAIRA(_ZTI9S20676C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20676C12),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20676C12),3, //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  S20676C13  {
  ::S20677C6_nt s20676c13f0;
  ::S20676C5 s20676c13f1;
  ::S20677C6_nt s20676c13f2;
  __tsi64 s20676c13f3;
  ::S20677C6_nt s20676c13f4;
  void *s20676c13f5;
  ::S20677C6_nt s20676c13f6;
  void *s20676c13f7[2];
  ::S20677C6_nt s20676c13f8;
  virtual void  v13(); // _ZN9S20676C133v13Ev
  ~S20676C13(); // tgen
  S20676C13(); // tgen
};
//SIG(-1 S20676C13) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S20676C13 ::v13(){vfunc_called(this, "_ZN9S20676C133v13Ev");}
S20676C13 ::~S20676C13(){ note_dtor("S20676C13", this);} // tgen
S20676C13 ::S20676C13(){ note_ctor("S20676C13", this);} // tgen

static void Test_S20676C13()
{
  extern Class_Descriptor cd_S20676C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S20676C13, buf);
    S20676C13 *dp, &lv = *(dp=new (buf) S20676C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S20676C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C13)");
    check_field_offset(lv, s20676c13f0, ABISELECT(8,4), "S20676C13.s20676c13f0");
    check_field_offset(lv, s20676c13f1, ABISELECT(16,8), "S20676C13.s20676c13f1");
    check_field_offset(lv, s20676c13f2, ABISELECT(208,148), "S20676C13.s20676c13f2");
    check_field_offset(lv, s20676c13f3, ABISELECT(216,152), "S20676C13.s20676c13f3");
    check_field_offset(lv, s20676c13f4, ABISELECT(224,160), "S20676C13.s20676c13f4");
    check_field_offset(lv, s20676c13f5, ABISELECT(232,164), "S20676C13.s20676c13f5");
    check_field_offset(lv, s20676c13f6, ABISELECT(240,168), "S20676C13.s20676c13f6");
    check_field_offset(lv, s20676c13f7, ABISELECT(248,172), "S20676C13.s20676c13f7");
    check_field_offset(lv, s20676c13f8, ABISELECT(264,180), "S20676C13.s20676c13f8");
    test_class_info(&lv, &cd_S20676C13);
    dp->~S20676C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C13(Test_S20676C13, "S20676C13", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN9S20676C13C1Ev();
extern void _ZN9S20676C13D1Ev();
Name_Map name_map_S20676C13[] = {
  NSPAIR(_ZN9S20676C13C1Ev),
  NSPAIR(_ZN9S20676C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20676C13[];
extern void _ZN9S20676C133v13Ev();
static  VTBL_ENTRY vtc_S20676C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C13[0]),
  (VTBL_ENTRY)&_ZN9S20676C133v13Ev,
};
extern VTBL_ENTRY _ZTI9S20676C13[];
extern  VTBL_ENTRY _ZTV9S20676C13[];
Class_Descriptor cd_S20676C13 = {  "S20676C13", // class name
  0,0,//no base classes
  &(vtc_S20676C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI9S20676C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20676C13),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20676C11  : virtual S20676C4 , virtual S20676C2 , virtual S20676C12 {
  ::S20677C6_nt s20676c11f0;
  ::S20677C6_nt s20676c11f1;
  int s20676c11f2;
  ::S20676C5 s20676c11f3;
  ::S20677C6_nt s20676c11f4;
  ::S20677C6_nt s20676c11f5;
  ::S20676C13 s20676c11f6;
  ::S20676C2 s20676c11f7;
  void *s20676c11f8;
  ::S20677C6_nt s20676c11f9;
  virtual void  v11(); // _ZN9S20676C113v11Ev
  virtual void  v12(); // _ZN9S20676C113v12Ev
  ~S20676C11(); // tgen
  S20676C11(); // tgen
};
//SIG(-1 S20676C11) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v3 v4 v5 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC2 v6 v7 v8 FL FC6{} Fp Fc[2] FC3 Fl FC6} VBC7{ VBC3 VBC4 v9 v10 Fi FC4 FL Fi Fp} v1 v2 FC6 FC6 Fi FC4 FC6 FC6 FC8{ v11 FC6 FC4 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC5 Fp FC6}


void  S20676C11 ::v11(){vfunc_called(this, "_ZN9S20676C113v11Ev");}
void  S20676C11 ::v12(){vfunc_called(this, "_ZN9S20676C113v12Ev");}
S20676C11 ::~S20676C11(){ note_dtor("S20676C11", this);} // tgen
S20676C11 ::S20676C11(){ note_ctor("S20676C11", this);} // tgen

static void Test_S20676C11()
{
  extern Class_Descriptor cd_S20676C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(128,356)];
    init_test(&cd_S20676C11, buf);
    S20676C11 *dp, &lv = *(dp=new (buf) S20676C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2032,1420), "sizeof(S20676C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C11)");
    check_base_class_offset(lv, (S20677C3*)(S20676C4*), ABISELECT(1496,1044), "S20676C11");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*)(S20676C4*), ABISELECT(1496,1044), "S20676C11");
    check_base_class_offset(lv, (S20677C3*)(S20676C2*), ABISELECT(1496,1044), "S20676C11");
    check_base_class_offset(lv, (S20677C3*)(S20676C12*), ABISELECT(1496,1044), "S20676C11");
    /*is_ambiguous_... S20676C11::S20676C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C5*), ABISELECT(1496,1044), "S20676C11");
    check_base_class_offset(lv, (S20676C5*)(S20676C4*), ABISELECT(1088,752), "S20676C11");
    check_base_class_offset(lv, (S20676C4*), ABISELECT(1088,752), "S20676C11");
    check_base_class_offset(lv, (S20676C4*)(S20676C2*), ABISELECT(1088,752), "S20676C11");
    check_base_class_offset(lv, (S20676C2*), ABISELECT(1544,1084), "S20676C11");
    check_base_class_offset(lv, (S20676C5*)(S20676C12*), ABISELECT(1888,1320), "S20676C11");
    check_base_class_offset(lv, (S20676C12*), ABISELECT(1648,1156), "S20676C11");
    check_field_offset(lv, s20676c11f0, ABISELECT(8,4), "S20676C11.s20676c11f0");
    check_field_offset(lv, s20676c11f1, ABISELECT(9,5), "S20676C11.s20676c11f1");
    check_field_offset(lv, s20676c11f2, ABISELECT(12,8), "S20676C11.s20676c11f2");
    check_field_offset(lv, s20676c11f3, ABISELECT(16,12), "S20676C11.s20676c11f3");
    check_field_offset(lv, s20676c11f4, ABISELECT(208,152), "S20676C11.s20676c11f4");
    check_field_offset(lv, s20676c11f5, ABISELECT(209,153), "S20676C11.s20676c11f5");
    check_field_offset(lv, s20676c11f6, ABISELECT(224,156), "S20676C11.s20676c11f6");
    check_field_offset(lv, s20676c11f7, ABISELECT(496,340), "S20676C11.s20676c11f7");
    check_field_offset(lv, s20676c11f8, ABISELECT(1072,744), "S20676C11.s20676c11f8");
    check_field_offset(lv, s20676c11f9, ABISELECT(1080,748), "S20676C11.s20676c11f9");
    test_class_info(&lv, &cd_S20676C11);
    dp->~S20676C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C11(Test_S20676C11, "S20676C11", ABISELECT(2032,1420));

#else // __cplusplus

extern void _ZN9S20676C11C1Ev();
extern void _ZN9S20676C11D1Ev();
Name_Map name_map_S20676C11[] = {
  NSPAIR(_ZN9S20676C11C1Ev),
  NSPAIR(_ZN9S20676C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C4;
extern VTBL_ENTRY _ZTI8S20676C4[];
extern  VTBL_ENTRY _ZTV8S20676C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C4[];
extern Class_Descriptor cd_S20676C2;
extern VTBL_ENTRY _ZTI8S20676C2[];
extern  VTBL_ENTRY _ZTV8S20676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C2[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C12;
extern VTBL_ENTRY _ZTI9S20676C12[];
extern  VTBL_ENTRY _ZTV9S20676C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C12[];
static Base_Class bases_S20676C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1496,1044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20676C5,    ABISELECT(1088,752), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20676C4,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20676C2,    ABISELECT(1544,1084), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20676C5,    ABISELECT(1888,1320), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20676C12,    ABISELECT(1648,1156), //bcp->offset
    28, //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},
  {0}};
extern VTBL_ENTRY _ZTI9S20676C11[];
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY vtc_S20676C11[] = {
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-1544,-1084),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-1648,-1156),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
  ABISELECT(-392,-276),
  ABISELECT(-1888,-1320),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
};
extern VTBL_ENTRY _ZTV9S20676C11[];
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__9S20676C11[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C4[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C58S20676C4__9S20676C11[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__9S20676C11[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__8S20676C2__9S20676C11[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__9S20676C11[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C12__9S20676C11[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__A1__9S20676C11[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
static  VTT_ENTRY vtt_S20676C11[] = {
  {&(_ZTV9S20676C11[7]),  7,39},
  {&(_ZTV9S20676C11[15]),  15,39},
  {&(_ZTV9S20676C11[25]),  25,39},
  {&(_ZTV9S20676C11[34]),  34,39},
  {&(_ZTV9S20676C11[39]),  39,39},
  {&(_tg__ZTV8S20676C4__9S20676C11[3]),  3,6},
  {&(_tg__ZTV8S20676C58S20676C4__9S20676C11[3]),  3,3},
  {&(_tg__ZTV8S20676C2__9S20676C11[4]),  4,7},
  {&(_tg__ZTV8S20676C4__8S20676C2__9S20676C11[6]),  6,9},
  {&(_tg__ZTV9S20676C12__9S20676C11[4]),  4,6},
  {&(_tg__ZTV8S20676C5__9S20676C12__9S20676C11[3]),  3,3},
  {&(_tg__ZTV8S20676C5__A1__9S20676C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20676C11[];
extern  VTBL_ENTRY _ZTV9S20676C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C11[];
Class_Descriptor cd_S20676C11 = {  "S20676C11", // class name
  bases_S20676C11, 6,
  &(vtc_S20676C11[0]), // expected_vtbl_contents
  &(vtt_S20676C11[0]), // expected_vtt_contents
  ABISELECT(2032,1420), // object size
  NSPAIRA(_ZTI9S20676C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20676C11),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20676C11),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20676C10  : virtual S20676C5 , S20676C11 , S20676C12 {
  int s20676c10f0;
  char s20676c10f1:2;
  ::S20677C6_nt s20676c10f2;
  int s20676c10f3;
  ~S20676C10(); // tgen
  S20676C10(); // tgen
};
//SIG(-1 S20676C10) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} BC4{ VBC5{ VBC3 BC2 v1 v2 v3 Fs FL Fc Fi[2] FC2 Fp FL Fi FL Fi} VBC6{ VBC3 VBC5 v4 v5 v6 FL FC7{} Fp Fc[2] FC3 Fl FC7} VBC8{ VBC3 VBC2 v7 v8 Fi FC2 FL Fi Fp} v9 v10 FC7 FC7 Fi FC2 FC7 FC7 FC9{ v11 FC7 FC2 FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} BC8 Fi Fc:2 FC7 Fi}


S20676C10 ::~S20676C10(){ note_dtor("S20676C10", this);} // tgen
S20676C10 ::S20676C10(){ note_ctor("S20676C10", this);} // tgen

static void Test_S20676C10()
{
  extern Class_Descriptor cd_S20676C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(144,400)];
    init_test(&cd_S20676C10, buf);
    S20676C10 *dp, &lv = *(dp=new (buf) S20676C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2288,1596), "sizeof(S20676C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C10)");
    /*is_ambiguous_... S20676C10::S20676C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C5*), ABISELECT(1480,1028), "S20676C10");
    check_base_class_offset(lv, (S20677C3*)(S20676C4*), ABISELECT(1480,1028), "S20676C10");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*)(S20676C4*), ABISELECT(1480,1028), "S20676C10");
    check_base_class_offset(lv, (S20677C3*)(S20676C2*), ABISELECT(1480,1028), "S20676C10");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C12*), ABISELECT(1480,1028), "S20676C10");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C12*), ABISELECT(1480,1028), "S20676C10");
    /*is_ambiguous_... S20676C10::S20676C5 */ AMB_check_base_class_offset(lv, (S20676C5*), ABISELECT(1344,928), "S20676C10");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C5*)(S20676C12*), ABISELECT(1344,928), "S20676C10");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C5*)(S20676C12*), ABISELECT(1344,928), "S20676C10");
    check_base_class_offset(lv, (S20676C5*)(S20676C4*), ABISELECT(1536,1068), "S20676C10");
    check_base_class_offset(lv, (S20676C4*)(S20676C11*), ABISELECT(1536,1068), "S20676C10");
    check_base_class_offset(lv, (S20676C4*)(S20676C2*), ABISELECT(1536,1068), "S20676C10");
    check_base_class_offset(lv, (S20676C2*)(S20676C11*), ABISELECT(1944,1360), "S20676C10");
    check_base_class_offset(lv, (S20676C12*)(S20676C11*), ABISELECT(2048,1432), "S20676C10");
    check_base_class_offset(lv, (S20676C11*), 0, "S20676C10");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C12*), ABISELECT(1088,752), "S20676C10");
    check_field_offset(lv, s20676c10f0, ABISELECT(1320,916), "S20676C10.s20676c10f0");
    set_bf_and_test(lv, s20676c10f1, ABISELECT(1324,920), 0, 2, 1, "S20676C10");
    set_bf_and_test(lv, s20676c10f1, ABISELECT(1324,920), 0, 2, hide_sll(1LL<<1), "S20676C10");
    check_field_offset(lv, s20676c10f2, ABISELECT(1325,921), "S20676C10.s20676c10f2");
    check_field_offset(lv, s20676c10f3, ABISELECT(1328,924), "S20676C10.s20676c10f3");
    test_class_info(&lv, &cd_S20676C10);
    dp->~S20676C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C10(Test_S20676C10, "S20676C10", ABISELECT(2288,1596));

#else // __cplusplus

extern void _ZN9S20676C10C1Ev();
extern void _ZN9S20676C10D1Ev();
Name_Map name_map_S20676C10[] = {
  NSPAIR(_ZN9S20676C10C1Ev),
  NSPAIR(_ZN9S20676C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C4;
extern VTBL_ENTRY _ZTI8S20676C4[];
extern  VTBL_ENTRY _ZTV8S20676C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C4[];
extern Class_Descriptor cd_S20676C2;
extern VTBL_ENTRY _ZTI8S20676C2[];
extern  VTBL_ENTRY _ZTV8S20676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C2[];
extern Class_Descriptor cd_S20676C12;
extern VTBL_ENTRY _ZTI9S20676C12[];
extern  VTBL_ENTRY _ZTV9S20676C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C12[];
extern Class_Descriptor cd_S20676C11;
extern VTBL_ENTRY _ZTI9S20676C11[];
extern  VTBL_ENTRY _ZTV9S20676C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C11[];
extern Class_Descriptor cd_S20676C12;
extern VTBL_ENTRY _ZTI9S20676C12[];
extern  VTBL_ENTRY _ZTV9S20676C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C12[];
static Base_Class bases_S20676C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1480,1028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20676C5,    ABISELECT(1344,928), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20676C5,    ABISELECT(1536,1068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    3, //immediately_derived
  0, 0},
  {&cd_S20676C4,    ABISELECT(1536,1068), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20676C2,    ABISELECT(1944,1360), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20676C12,    ABISELECT(2048,1432), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20676C11,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20676C12,    ABISELECT(1088,752), //bcp->offset
    9, //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20676C10[];
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY vtc_S20676C10[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
  ABISELECT(256,176),
  ABISELECT(392,276),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
extern VTBL_ENTRY _ZTV9S20676C10[];
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C11__9S20676C10[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__9S20676C11__9S20676C10[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__9S20676C11__9S20676C10[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__9S20676C11__9S20676C10[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__A1__9S20676C11__9S20676C10[] = {
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__A__9S20676C10[] = {
  ABISELECT(256,176),
  ABISELECT(392,276),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C12__A__9S20676C10[] = {
  ABISELECT(136,100),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C10[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__9S20676C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C4[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C58S20676C4__A1__9S20676C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__9S20676C10[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__8S20676C2__9S20676C10[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__9S20676C10[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C12__9S20676C10[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
};
static  VTT_ENTRY vtt_S20676C10[] = {
  {&(_ZTV9S20676C10[7]),  7,45},
  {&(_tg__ZTV9S20676C11__9S20676C10[7]),  7,9},
  {&(_tg__ZTV8S20676C4__9S20676C11__9S20676C10[6]),  6,9},
  {&(_tg__ZTV8S20676C2__9S20676C11__9S20676C10[7]),  7,10},
  {&(_tg__ZTV9S20676C12__9S20676C11__9S20676C10[6]),  6,8},
  {&(_tg__ZTV8S20676C5__A1__9S20676C11__9S20676C10[3]),  3,3},
  {&(_tg__ZTV9S20676C12__A__9S20676C10[4]),  4,6},
  {&(_tg__ZTV8S20676C5__9S20676C12__A__9S20676C10[3]),  3,3},
  {&(_ZTV9S20676C10[18]),  18,45},
  {&(_ZTV9S20676C10[24]),  24,45},
  {&(_ZTV9S20676C10[34]),  34,45},
  {&(_ZTV9S20676C10[43]),  43,45},
  {&(_ZTV9S20676C10[13]),  13,45},
  {&(_tg__ZTV8S20676C5__9S20676C10[3]),  3,3},
  {&(_tg__ZTV8S20676C4__9S20676C10[3]),  3,6},
  {&(_tg__ZTV8S20676C58S20676C4__A1__9S20676C10[3]),  3,3},
  {&(_tg__ZTV8S20676C2__9S20676C10[4]),  4,7},
  {&(_tg__ZTV8S20676C4__8S20676C2__9S20676C10[6]),  6,9},
  {&(_tg__ZTV9S20676C12__9S20676C10[4]),  4,6},
  {&(_tg__ZTV8S20676C5__9S20676C12__9S20676C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20676C10[];
extern  VTBL_ENTRY _ZTV9S20676C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C10[];
Class_Descriptor cd_S20676C10 = {  "S20676C10", // class name
  bases_S20676C10, 8,
  &(vtc_S20676C10[0]), // expected_vtbl_contents
  &(vtt_S20676C10[0]), // expected_vtt_contents
  ABISELECT(2288,1596), // object size
  NSPAIRA(_ZTI9S20676C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20676C10),45, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20676C10),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20676C7  : S20676C8 , S20677C3 , virtual S20676C9 , virtual S20676C10 {
  __tsi64 s20676c7f0;
  virtual  ~S20676C7(); // _ZN8S20676C7D2Ev
  S20676C7(); // tgen
};
//SIG(-1 S20676C7) C1{ BC2{ BC3{ m Fp FL[4] Fs} FC3 Fi FD Fi FL Fl} BC3 VBC4{ BC5{ VBC3 FD Fi FC3 FC3} v1 FL Fc[7] Fp Fi FC6{} FC6 Fc[10]} VBC7{ VBC5 BC8{ VBC9{ VBC3 BC5 v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} VBC10{ VBC3 VBC9 v5 v6 v7 FL FC6 Fp Fc[2] FC3 Fl FC6} VBC11{ VBC3 VBC5 v8 v9 Fi FC5 FL Fi Fp} v10 v11 FC6 FC6 Fi FC5 FC6 FC6 FC12{ v12 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC10 Fp FC6} BC11 Fi Fc:2 FC6 Fi} vd FL}


 S20676C7 ::~S20676C7(){ note_dtor("S20676C7", this);}
S20676C7 ::S20676C7(){ note_ctor("S20676C7", this);} // tgen

static void Test_S20676C7()
{
  extern Class_Descriptor cd_S20676C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(169,475)];
    init_test(&cd_S20676C7, buf);
    S20676C7 *dp, &lv = *(dp=new (buf) S20676C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2688,1896), "sizeof(S20676C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C7)");
    check_base_class_offset(lv, (S20677C3*)(S20676C8*), ABISELECT(16,4), "S20676C7");
    check_base_class_offset(lv, (S20676C8*), ABISELECT(16,4), "S20676C7");
    /*is_ambiguous_... S20676C7::S20677C3 */ AMB_check_base_class_offset(lv, (S20677C3*), ABISELECT(168,116), "S20676C7");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*)(S20676C9*), ABISELECT(400,300), "S20676C7");
    /*is_ambiguous_... S20676C7::S20676C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C5*), ABISELECT(400,300), "S20676C7");
    check_base_class_offset(lv, (S20677C3*)(S20676C4*), ABISELECT(400,300), "S20676C7");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*)(S20676C4*), ABISELECT(400,300), "S20676C7");
    check_base_class_offset(lv, (S20677C3*)(S20676C2*), ABISELECT(400,300), "S20676C7");
    /*is_ambiguous_... S20676C7::S20676C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C12*), ABISELECT(400,300), "S20676C7");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C12*)(S20676C10*), ABISELECT(400,300), "S20676C7");
    check_base_class_offset(lv, (S20676C5*)(S20676C9*), ABISELECT(224,164), "S20676C7");
    check_base_class_offset(lv, (S20676C9*), ABISELECT(224,164), "S20676C7");
    /*is_ambiguous_... S20676C10::S20676C5 */ AMB_check_base_class_offset(lv, (S20676C5*)(S20676C10*), ABISELECT(1792,1268), "S20676C7");
    /*is_ambiguous_... S20676C7::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C5*)(S20676C12*), ABISELECT(1792,1268), "S20676C7");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C5*)(S20676C12*)(S20676C10*), ABISELECT(1792,1268), "S20676C7");
    check_base_class_offset(lv, (S20676C5*)(S20676C4*), ABISELECT(1936,1368), "S20676C7");
    check_base_class_offset(lv, (S20676C4*)(S20676C11*)(S20676C10*), ABISELECT(1936,1368), "S20676C7");
    check_base_class_offset(lv, (S20676C4*)(S20676C2*), ABISELECT(1936,1368), "S20676C7");
    check_base_class_offset(lv, (S20676C2*)(S20676C11*)(S20676C10*), ABISELECT(2344,1660), "S20676C7");
    check_base_class_offset(lv, (S20676C12*)(S20676C11*)(S20676C10*), ABISELECT(2448,1732), "S20676C7");
    check_base_class_offset(lv, (S20676C11*)(S20676C10*), ABISELECT(448,340), "S20676C7");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C12*)(S20676C10*), ABISELECT(1536,1092), "S20676C7");
    check_base_class_offset(lv, (S20676C10*), ABISELECT(448,340), "S20676C7");
    check_field_offset(lv, s20676c7f0, ABISELECT(216,156), "S20676C7.s20676c7f0");
    test_class_info(&lv, &cd_S20676C7);
    dp->~S20676C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C7(Test_S20676C7, "S20676C7", ABISELECT(2688,1896));

#else // __cplusplus

extern void _ZN8S20676C7C1Ev();
extern void _ZN8S20676C7D2Ev();
Name_Map name_map_S20676C7[] = {
  NSPAIR(_ZN8S20676C7C1Ev),
  NSPAIR(_ZN8S20676C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C8;
extern VTBL_ENTRY _ZTI8S20676C8[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C9;
extern VTBL_ENTRY _ZTI8S20676C9[];
extern  VTBL_ENTRY _ZTV8S20676C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C9[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C4;
extern VTBL_ENTRY _ZTI8S20676C4[];
extern  VTBL_ENTRY _ZTV8S20676C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C4[];
extern Class_Descriptor cd_S20676C2;
extern VTBL_ENTRY _ZTI8S20676C2[];
extern  VTBL_ENTRY _ZTV8S20676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C2[];
extern Class_Descriptor cd_S20676C12;
extern VTBL_ENTRY _ZTI9S20676C12[];
extern  VTBL_ENTRY _ZTV9S20676C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C12[];
extern Class_Descriptor cd_S20676C11;
extern VTBL_ENTRY _ZTI9S20676C11[];
extern  VTBL_ENTRY _ZTV9S20676C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C11[];
extern Class_Descriptor cd_S20676C12;
extern VTBL_ENTRY _ZTI9S20676C12[];
extern  VTBL_ENTRY _ZTV9S20676C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C12[];
extern Class_Descriptor cd_S20676C10;
extern VTBL_ENTRY _ZTI9S20676C10[];
extern  VTBL_ENTRY _ZTV9S20676C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C10[];
static Base_Class bases_S20676C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    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
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S20676C8,    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
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20677C3,    ABISELECT(168,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20677C3,    ABISELECT(400,300), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20676C5,    ABISELECT(224,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20676C9,    ABISELECT(224,164), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20676C5,    ABISELECT(1792,1268), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20676C5,    ABISELECT(1936,1368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20676C4,    ABISELECT(1936,1368), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20676C2,    ABISELECT(2344,1660), //bcp->offset
    47, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20676C12,    ABISELECT(2448,1732), //bcp->offset
    57, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20676C11,    ABISELECT(448,340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20676C12,    ABISELECT(1536,1092), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20676C10,    ABISELECT(448,340), //bcp->offset
    16, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20676C7[];
extern void _ZN8S20676C7D1Ev();
extern void _ZN8S20676C7D0Ev();
extern void _ZN8S20676C92v8Ev();
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY vtc_S20676C7[] = {
  ABISELECT(2448,1732),
  ABISELECT(2344,1660),
  ABISELECT(1936,1368),
  ABISELECT(1792,1268),
  ABISELECT(448,340),
  ABISELECT(400,300),
  ABISELECT(224,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN8S20676C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20676C7D0Ev,
  0,
  ABISELECT(176,136),
  ABISELECT(-224,-164),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN8S20676C92v8Ev,
  ABISELECT(1088,752),
  ABISELECT(1088,752),
  0,
  0,
  ABISELECT(1344,928),
  ABISELECT(2000,1392),
  ABISELECT(1896,1320),
  ABISELECT(-48,-40),
  ABISELECT(1488,1028),
  ABISELECT(-448,-340),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
  ABISELECT(256,176),
  ABISELECT(-1136,-792),
  ABISELECT(-1536,-1092),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
  ABISELECT(-1392,-968),
  ABISELECT(-1792,-1268),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  0,
  0,
  0,
  ABISELECT(-1536,-1068),
  ABISELECT(-1936,-1368),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1944,-1360),
  ABISELECT(-2344,-1660),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
  0,
  0,
  ABISELECT(-656,-464),
  ABISELECT(-2048,-1432),
  ABISELECT(-2448,-1732),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
extern VTBL_ENTRY _ZTV8S20676C7[];
extern void _ZN8S20676C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C9__8S20676C7[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C9[0]),
  (VTBL_ENTRY)&_ZN8S20676C92v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C58S20676C9__8S20676C7[] = {
  ABISELECT(176,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C10__8S20676C7[] = {
  ABISELECT(1344,928),
  ABISELECT(2000,1392),
  ABISELECT(1896,1320),
  ABISELECT(-48,-40),
  ABISELECT(1488,1028),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
};
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C119S20676C10__8S20676C7[] = {
  ABISELECT(1344,928),
  ABISELECT(2000,1392),
  ABISELECT(1896,1320),
  ABISELECT(-48,-40),
  ABISELECT(1488,1028),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__9S20676C119S20676C10__8S20676C7[] = {
  0,
  0,
  0,
  ABISELECT(-1536,-1068),
  ABISELECT(-1488,-1028),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__9S20676C119S20676C10__8S20676C7[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1944,-1360),
  ABISELECT(-1896,-1320),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__9S20676C119S20676C10__8S20676C7[] = {
  0,
  0,
  ABISELECT(-656,-464),
  ABISELECT(-2048,-1432),
  ABISELECT(-2000,-1392),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__A1__9S20676C119S20676C10__8S20676C7[] = {
  ABISELECT(-1392,-968),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C129S20676C10__A1__8S20676C7[] = {
  ABISELECT(256,176),
  ABISELECT(-1136,-792),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C129S20676C10__A1__8S20676C7[] = {
  ABISELECT(-1392,-968),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C10__8S20676C7[] = {
  ABISELECT(-1392,-968),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__9S20676C10__8S20676C7[] = {
  0,
  0,
  0,
  ABISELECT(-1536,-1068),
  ABISELECT(-1488,-1028),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__9S20676C10__8S20676C7[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-1944,-1360),
  ABISELECT(-1896,-1320),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__9S20676C10__8S20676C7[] = {
  0,
  0,
  ABISELECT(-656,-464),
  ABISELECT(-2048,-1432),
  ABISELECT(-2000,-1392),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__A__9S20676C10__8S20676C7[] = {
  ABISELECT(256,176),
  ABISELECT(-1136,-792),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__A1__8S20676C7[] = {
  ABISELECT(-1392,-968),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__8S20676C7[] = {
  ABISELECT(-1536,-1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C4[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C58S20676C4__A2__8S20676C7[] = {
  ABISELECT(-1536,-1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__8S20676C7[] = {
  ABISELECT(-408,-292),
  ABISELECT(-1944,-1360),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__8S20676C2__8S20676C7[] = {
  0,
  0,
  0,
  ABISELECT(-1536,-1068),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__8S20676C7[] = {
  ABISELECT(-656,-464),
  ABISELECT(-2048,-1432),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C12__8S20676C7[] = {
  ABISELECT(-1392,-968),
  ABISELECT(656,464),
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
};
static  VTT_ENTRY vtt_S20676C7[] = {
  {&(_ZTV8S20676C7[9]),  9,65},
  {&(_ZTV8S20676C7[15]),  15,65},
  {&(_ZTV8S20676C7[27]),  27,65},
  {&(_ZTV8S20676C7[38]),  38,65},
  {&(_ZTV8S20676C7[44]),  44,65},
  {&(_ZTV8S20676C7[54]),  54,65},
  {&(_ZTV8S20676C7[63]),  63,65},
  {&(_ZTV8S20676C7[33]),  33,65},
  {&(_tg__ZTV8S20676C9__8S20676C7[3]),  3,4},
  {&(_tg__ZTV8S20676C58S20676C9__8S20676C7[3]),  3,3},
  {&(_tg__ZTV9S20676C10__8S20676C7[7]),  7,9},
  {&(_tg__ZTV9S20676C119S20676C10__8S20676C7[7]),  7,9},
  {&(_tg__ZTV8S20676C4__9S20676C119S20676C10__8S20676C7[6]),  6,9},
  {&(_tg__ZTV8S20676C2__9S20676C119S20676C10__8S20676C7[7]),  7,10},
  {&(_tg__ZTV9S20676C12__9S20676C119S20676C10__8S20676C7[6]),  6,8},
  {&(_tg__ZTV8S20676C5__A1__9S20676C119S20676C10__8S20676C7[3]),  3,3},
  {&(_tg__ZTV9S20676C129S20676C10__A1__8S20676C7[4]),  4,6},
  {&(_tg__ZTV8S20676C5__9S20676C129S20676C10__A1__8S20676C7[3]),  3,3},
  {&(_tg__ZTV8S20676C5__9S20676C10__8S20676C7[3]),  3,3},
  {&(_tg__ZTV8S20676C4__9S20676C10__8S20676C7[6]),  6,9},
  {&(_tg__ZTV8S20676C2__9S20676C10__8S20676C7[7]),  7,10},
  {&(_tg__ZTV9S20676C12__9S20676C10__8S20676C7[6]),  6,8},
  {&(_tg__ZTV9S20676C12__A__9S20676C10__8S20676C7[4]),  4,6},
  {&(_tg__ZTV8S20676C5__A1__8S20676C7[3]),  3,3},
  {&(_tg__ZTV8S20676C4__8S20676C7[3]),  3,6},
  {&(_tg__ZTV8S20676C58S20676C4__A2__8S20676C7[3]),  3,3},
  {&(_tg__ZTV8S20676C2__8S20676C7[4]),  4,7},
  {&(_tg__ZTV8S20676C4__8S20676C2__8S20676C7[6]),  6,9},
  {&(_tg__ZTV9S20676C12__8S20676C7[4]),  4,6},
  {&(_tg__ZTV8S20676C5__9S20676C12__8S20676C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20676C7[];
extern  VTBL_ENTRY _ZTV8S20676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C7[];
Class_Descriptor cd_S20676C7 = {  "S20676C7", // class name
  bases_S20676C7, 14,
  &(vtc_S20676C7[0]), // expected_vtbl_contents
  &(vtt_S20676C7[0]), // expected_vtt_contents
  ABISELECT(2688,1896), // object size
  NSPAIRA(_ZTI8S20676C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20676C7),65, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20676C7),30, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20676C14  : virtual S20676C13 {
  ::S20680C5 s20676c14f0;
  ::S20677C6_nt s20676c14f1;
  __tsi64 s20676c14f2;
  int s20676c14f3[2];
  virtual void  v14(); // _ZN9S20676C143v14Ev
  ~S20676C14(); // tgen
  S20676C14(); // tgen
};
//SIG(-1 S20676C14) C1{ VBC2{ v2 FC3{} FC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} FC3 FL FC3 Fp FC3 Fp[2] FC3} v1 FC6{ BC7{ VBC5 BC8{ VBC5 FD Fi FC5 FC5} v4 v5 v6 Fs FL Fc Fi[2] FC8 Fp FL Fi FL Fi} VBC9{ VBC5 VBC8 v7 v8 Fi FC8 FL Fi Fp} BC8 VBC10{ v9 FC3 FC8 FC3 FL FC3 Fp FC3 Fp[2] FC3} VBC11{ BC8 v10 FL Fc[7] Fp Fi FC3 FC3 Fc[10]} v3 Fl FL FD FC3} FC3 FL Fi[2]}


void  S20676C14 ::v14(){vfunc_called(this, "_ZN9S20676C143v14Ev");}
S20676C14 ::~S20676C14(){ note_dtor("S20676C14", this);} // tgen
S20676C14 ::S20676C14(){ note_ctor("S20676C14", this);} // tgen

static void Test_S20676C14()
{
  extern Class_Descriptor cd_S20676C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(114,314)];
    init_test(&cd_S20676C14, buf);
    S20676C14 *dp, &lv = *(dp=new (buf) S20676C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1808,1252), "sizeof(S20676C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C14)");
    check_base_class_offset(lv, (S20676C13*), ABISELECT(1536,1068), "S20676C14");
    check_field_offset(lv, s20676c14f0, ABISELECT(16,4), "S20676C14.s20676c14f0");
    check_field_offset(lv, s20676c14f1, ABISELECT(1504,1048), "S20676C14.s20676c14f1");
    check_field_offset(lv, s20676c14f2, ABISELECT(1512,1052), "S20676C14.s20676c14f2");
    check_field_offset(lv, s20676c14f3, ABISELECT(1520,1060), "S20676C14.s20676c14f3");
    test_class_info(&lv, &cd_S20676C14);
    dp->~S20676C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C14(Test_S20676C14, "S20676C14", ABISELECT(1808,1252));

#else // __cplusplus

extern void _ZN9S20676C14C1Ev();
extern void _ZN9S20676C14D1Ev();
Name_Map name_map_S20676C14[] = {
  NSPAIR(_ZN9S20676C14C1Ev),
  NSPAIR(_ZN9S20676C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20676C13;
extern VTBL_ENTRY _ZTI9S20676C13[];
extern  VTBL_ENTRY _ZTV9S20676C13[];
static Base_Class bases_S20676C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20676C13,    ABISELECT(1536,1068), //bcp->offset
    4, //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 _ZTI9S20676C14[];
extern void _ZN9S20676C143v14Ev();
extern void _ZN9S20676C133v13Ev();
static  VTBL_ENTRY vtc_S20676C14[] = {
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C14[0]),
  (VTBL_ENTRY)&_ZN9S20676C143v14Ev,
  0,
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20676C14[0]),
  (VTBL_ENTRY)&_ZN9S20676C133v13Ev,
};
extern VTBL_ENTRY _ZTV9S20676C14[];
static  VTT_ENTRY vtt_S20676C14[] = {
  {&(_ZTV9S20676C14[3]),  3,8},
  {&(_ZTV9S20676C14[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S20676C14[];
extern  VTBL_ENTRY _ZTV9S20676C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C14[];
Class_Descriptor cd_S20676C14 = {  "S20676C14", // class name
  bases_S20676C14, 1,
  &(vtc_S20676C14[0]), // expected_vtbl_contents
  &(vtt_S20676C14[0]), // expected_vtt_contents
  ABISELECT(1808,1252), // object size
  NSPAIRA(_ZTI9S20676C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20676C14),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20676C14),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  S20676C1  : virtual S20676C2 , S20676C7 , virtual S20676C14 {
  int s20676c1f0;
  int s20676c1f1:13;
  ::S20677C6_nt s20676c1f2;
  ::S20677C6_nt s20676c1f3;
  void *s20676c1f4;
  ::S20677C6_nt s20676c1f5;
  __tsi64 s20676c1f6;
  char s20676c1f7;
  ::S20677C6_nt s20676c1f8;
  virtual void  v1(); // _ZN8S20676C12v1Ev
  ~S20676C1(); // tgen
  S20676C1(); // tgen
};
//SIG(1 S20676C1) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v5 v6 v7 FL FC6{} Fp Fc[2] FC3 Fl FC6} BC7{ BC8{ BC3 FC3 Fi FD Fi FL Fl} BC3 VBC9{ BC5 v8 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} VBC10{ VBC5 BC11{ VBC4 VBC2 VBC12{ VBC3 VBC5 v9 v10 Fi FC5 FL Fi Fp} v11 v12 FC6 FC6 Fi FC5 FC6 FC6 FC13{ v13 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC2 Fp FC6} BC12 Fi Fc:2 FC6 Fi} vd FL} VBC14{ VBC13 v14 FC15{ BC16{ VBC3 BC17{ VBC3 FD Fi FC3 FC3} v16 v17 v18 Fs FL Fc Fi[2] FC17 Fp FL Fi FL Fi} VBC18{ VBC3 VBC17 v19 v20 Fi FC17 FL Fi Fp} BC17 VBC19{ v21 FC6 FC17 FC6 FL FC6 Fp FC6 Fp[2] FC6} VBC20{ BC17 v22 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v15 Fl FL FD FC6} FC6 FL Fi[2]} v1 Fi Fi:13 FC6 FC6 Fp FC6 FL Fc FC6}


void  S20676C1 ::v1(){vfunc_called(this, "_ZN8S20676C12v1Ev");}
S20676C1 ::~S20676C1(){ note_dtor("S20676C1", this);} // tgen
S20676C1 ::S20676C1(){ note_ctor("S20676C1", this);} // tgen

static void Test_S20676C1()
{
  extern Class_Descriptor cd_S20676C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(285,795)];
    init_test(&cd_S20676C1, buf);
    S20676C1 *dp, &lv = *(dp=new (buf) S20676C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4544,3176), "sizeof(S20676C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20676C1)");
    check_base_class_offset(lv, (S20677C3*)(S20676C2*), ABISELECT(368,264), "S20676C1");
    check_base_class_offset(lv, (S20677C3*)(S20676C4*), ABISELECT(368,264), "S20676C1");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*)(S20676C4*), ABISELECT(368,264), "S20676C1");
    check_base_class_offset(lv, (S20677C3*)(S20676C5*)(S20676C9*), ABISELECT(368,264), "S20676C1");
    /*is_ambiguous_... S20676C1::S20676C5 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C5*), ABISELECT(368,264), "S20676C1");
    /*is_ambiguous_... S20676C1::S20676C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C12*), ABISELECT(368,264), "S20676C1");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C12*)(S20676C10*), ABISELECT(368,264), "S20676C1");
    check_base_class_offset(lv, (S20676C5*)(S20676C4*), ABISELECT(416,304), "S20676C1");
    check_base_class_offset(lv, (S20676C4*)(S20676C2*), ABISELECT(416,304), "S20676C1");
    check_base_class_offset(lv, (S20676C4*)(S20676C11*)(S20676C10*), ABISELECT(416,304), "S20676C1");
    check_base_class_offset(lv, (S20676C2*), ABISELECT(264,192), "S20676C1");
    check_base_class_offset(lv, (S20676C2*)(S20676C11*)(S20676C10*), ABISELECT(264,192), "S20676C1");
    check_base_class_offset(lv, (S20677C3*)(S20676C8*)(S20676C7*), ABISELECT(16,4), "S20676C1");
    check_base_class_offset(lv, (S20676C8*)(S20676C7*), ABISELECT(16,4), "S20676C1");
    /*is_ambiguous_... S20676C7::S20677C3 */ AMB_check_base_class_offset(lv, (S20677C3*)(S20676C7*), ABISELECT(168,116), "S20676C1");
    check_base_class_offset(lv, (S20676C5*)(S20676C9*), ABISELECT(832,596), "S20676C1");
    check_base_class_offset(lv, (S20676C9*)(S20676C7*), ABISELECT(832,596), "S20676C1");
    /*is_ambiguous_... S20676C10::S20676C5 */ AMB_check_base_class_offset(lv, (S20676C5*)(S20676C10*), ABISELECT(2352,1660), "S20676C1");
    /*is_ambiguous_... S20676C1::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C5*)(S20676C12*), ABISELECT(2352,1660), "S20676C1");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C5*)(S20676C12*)(S20676C10*), ABISELECT(2352,1660), "S20676C1");
    check_base_class_offset(lv, (S20676C12*)(S20676C11*)(S20676C10*), ABISELECT(2496,1760), "S20676C1");
    check_base_class_offset(lv, (S20676C11*)(S20676C10*), ABISELECT(1008,732), "S20676C1");
    /*is_ambiguous_... S20676C10::S20676C12 */ AMB_check_base_class_offset(lv, (S20676C12*)(S20676C10*), ABISELECT(2096,1484), "S20676C1");
    check_base_class_offset(lv, (S20676C10*)(S20676C7*), ABISELECT(1008,732), "S20676C1");
    check_base_class_offset(lv, (S20676C7*), 0, "S20676C1");
    check_base_class_offset(lv, (S20676C13*)(S20676C14*), ABISELECT(4272,2992), "S20676C1");
    check_base_class_offset(lv, (S20676C14*), ABISELECT(2736,1924), "S20676C1");
    check_field_offset(lv, s20676c1f0, ABISELECT(224,164), "S20676C1.s20676c1f0");
    set_bf_and_test(lv, s20676c1f1, ABISELECT(228,168), 0, 13, 1, "S20676C1");
    set_bf_and_test(lv, s20676c1f1, ABISELECT(228,168), 0, 13, hide_sll(1LL<<12), "S20676C1");
    check_field_offset(lv, s20676c1f2, ABISELECT(230,170), "S20676C1.s20676c1f2");
    check_field_offset(lv, s20676c1f3, ABISELECT(231,171), "S20676C1.s20676c1f3");
    check_field_offset(lv, s20676c1f4, ABISELECT(232,172), "S20676C1.s20676c1f4");
    check_field_offset(lv, s20676c1f5, ABISELECT(240,176), "S20676C1.s20676c1f5");
    check_field_offset(lv, s20676c1f6, ABISELECT(248,180), "S20676C1.s20676c1f6");
    check_field_offset(lv, s20676c1f7, ABISELECT(256,188), "S20676C1.s20676c1f7");
    check_field_offset(lv, s20676c1f8, ABISELECT(257,189), "S20676C1.s20676c1f8");
    test_class_info(&lv, &cd_S20676C1);
    dp->~S20676C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20676C1(Test_S20676C1, "S20676C1", ABISELECT(4544,3176));

#else // __cplusplus

extern void _ZN8S20676C1C1Ev();
extern void _ZN8S20676C1D1Ev();
Name_Map name_map_S20676C1[] = {
  NSPAIR(_ZN8S20676C1C1Ev),
  NSPAIR(_ZN8S20676C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C4;
extern VTBL_ENTRY _ZTI8S20676C4[];
extern  VTBL_ENTRY _ZTV8S20676C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C4[];
extern Class_Descriptor cd_S20676C2;
extern VTBL_ENTRY _ZTI8S20676C2[];
extern  VTBL_ENTRY _ZTV8S20676C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C2[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C8;
extern VTBL_ENTRY _ZTI8S20676C8[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C9;
extern VTBL_ENTRY _ZTI8S20676C9[];
extern  VTBL_ENTRY _ZTV8S20676C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C9[];
extern Class_Descriptor cd_S20676C5;
extern VTBL_ENTRY _ZTI8S20676C5[];
extern  VTBL_ENTRY _ZTV8S20676C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C5[];
extern Class_Descriptor cd_S20676C12;
extern VTBL_ENTRY _ZTI9S20676C12[];
extern  VTBL_ENTRY _ZTV9S20676C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C12[];
extern Class_Descriptor cd_S20676C11;
extern VTBL_ENTRY _ZTI9S20676C11[];
extern  VTBL_ENTRY _ZTV9S20676C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C11[];
extern Class_Descriptor cd_S20676C12;
extern VTBL_ENTRY _ZTI9S20676C12[];
extern  VTBL_ENTRY _ZTV9S20676C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C12[];
extern Class_Descriptor cd_S20676C10;
extern VTBL_ENTRY _ZTI9S20676C10[];
extern  VTBL_ENTRY _ZTV9S20676C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C10[];
extern Class_Descriptor cd_S20676C7;
extern VTBL_ENTRY _ZTI8S20676C7[];
extern  VTBL_ENTRY _ZTV8S20676C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C7[];
extern Class_Descriptor cd_S20676C13;
extern VTBL_ENTRY _ZTI9S20676C13[];
extern  VTBL_ENTRY _ZTV9S20676C13[];
extern Class_Descriptor cd_S20676C14;
extern VTBL_ENTRY _ZTI9S20676C14[];
extern  VTBL_ENTRY _ZTV9S20676C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20676C14[];
static Base_Class bases_S20676C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(368,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20676C5,    ABISELECT(416,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20676C4,    ABISELECT(416,304), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20676C2,    ABISELECT(264,192), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20676C8,    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
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20677C3,    ABISELECT(168,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20676C5,    ABISELECT(832,596), //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
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20676C9,    ABISELECT(832,596), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20676C5,    ABISELECT(2352,1660), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20676C12,    ABISELECT(2496,1760), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20676C11,    ABISELECT(1008,732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20676C12,    ABISELECT(2096,1484), //bcp->offset
    51, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20676C10,    ABISELECT(1008,732), //bcp->offset
    38, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20676C7,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20676C13,    ABISELECT(4272,2992), //bcp->offset
    73, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20676C14,    ABISELECT(2736,1924), //bcp->offset
    68, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20676C1[];
extern void _ZN8S20676C1D1Ev();
extern void _ZN8S20676C1D0Ev();
extern void _ZN8S20676C12v1Ev();
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
extern void _ZN8S20676C92v8Ev();
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
extern void _ZN9S20676C143v14Ev();
extern void _ZN9S20676C133v13Ev();
static  VTBL_ENTRY vtc_S20676C1[] = {
  ABISELECT(4272,2992),
  ABISELECT(2736,1924),
  ABISELECT(2496,1760),
  ABISELECT(264,192),
  ABISELECT(416,304),
  ABISELECT(2352,1660),
  ABISELECT(1008,732),
  ABISELECT(368,264),
  ABISELECT(832,596),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN8S20676C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20676C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20676C12v1Ev,
  0,
  0,
  0,
  ABISELECT(152,112),
  ABISELECT(104,72),
  ABISELECT(-264,-192),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(-416,-304),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
  0,
  ABISELECT(-464,-332),
  ABISELECT(-832,-596),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN8S20676C92v8Ev,
  ABISELECT(1088,752),
  ABISELECT(1088,752),
  0,
  0,
  ABISELECT(1344,928),
  ABISELECT(1488,1028),
  ABISELECT(-744,-540),
  ABISELECT(-640,-468),
  ABISELECT(-592,-428),
  ABISELECT(-1008,-732),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
  ABISELECT(256,176),
  ABISELECT(-1728,-1220),
  ABISELECT(-2096,-1484),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
  ABISELECT(-1984,-1396),
  ABISELECT(-2352,-1660),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  ABISELECT(-2496,-1760),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
  0,
  ABISELECT(1536,1068),
  ABISELECT(-2736,-1924),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN9S20676C143v14Ev,
  0,
  ABISELECT(-4272,-2992),
  (VTBL_ENTRY)&(_ZTI8S20676C1[0]),
  (VTBL_ENTRY)&_ZN9S20676C133v13Ev,
};
extern VTBL_ENTRY _ZTV8S20676C1[];
extern void _ZN8S20676C7D1Ev();
extern void _ZN8S20676C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C7__8S20676C1[] = {
  ABISELECT(2496,1760),
  ABISELECT(264,192),
  ABISELECT(416,304),
  ABISELECT(2352,1660),
  ABISELECT(1008,732),
  ABISELECT(368,264),
  ABISELECT(832,596),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN8S20676C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20676C7D0Ev,
};
extern void _ZN8S20676C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C9__8S20676C7__8S20676C1[] = {
  0,
  ABISELECT(-464,-332),
  ABISELECT(-832,-596),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN8S20676C92v8Ev,
};
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C10__8S20676C7__8S20676C1[] = {
  ABISELECT(1088,752),
  ABISELECT(1088,752),
  0,
  0,
  ABISELECT(1344,928),
  ABISELECT(1488,1028),
  ABISELECT(-744,-540),
  ABISELECT(-640,-468),
  ABISELECT(-592,-428),
  ABISELECT(-1008,-732),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__A1__8S20676C7__8S20676C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(-2352,-1660),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__8S20676C7__8S20676C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(-416,-304),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__8S20676C7__8S20676C1[] = {
  0,
  0,
  0,
  ABISELECT(152,112),
  ABISELECT(104,72),
  ABISELECT(-264,-192),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__8S20676C7__8S20676C1[] = {
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  ABISELECT(-2496,-1760),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C129S20676C10__A1__8S20676C7__8S20676C1[] = {
  ABISELECT(256,176),
  ABISELECT(-1728,-1220),
  ABISELECT(-2096,-1484),
  (VTBL_ENTRY)&(_ZTI8S20676C7[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__8S20676C1[] = {
  ABISELECT(152,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__8S20676C2__8S20676C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(-152,-112),
  (VTBL_ENTRY)&(_ZTI8S20676C2[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__8S20676C1[] = {
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C4[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C58S20676C4__8S20676C1[] = {
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN8S20676C92v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C9__8S20676C1[] = {
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C9[0]),
  (VTBL_ENTRY)&_ZN8S20676C92v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C58S20676C9__A1__8S20676C1[] = {
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C10__8S20676C1[] = {
  ABISELECT(1344,928),
  ABISELECT(1488,1028),
  ABISELECT(-744,-540),
  ABISELECT(-640,-468),
  ABISELECT(-592,-428),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
};
extern void _ZN9S20676C113v11Ev();
extern void _ZN9S20676C113v12Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C119S20676C10__8S20676C1[] = {
  ABISELECT(1344,928),
  ABISELECT(1488,1028),
  ABISELECT(-744,-540),
  ABISELECT(-640,-468),
  ABISELECT(-592,-428),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN9S20676C113v11Ev,
  (VTBL_ENTRY)&_ZN9S20676C113v12Ev,
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__9S20676C119S20676C10__8S20676C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(592,428),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__9S20676C119S20676C10__8S20676C1[] = {
  0,
  0,
  0,
  ABISELECT(152,112),
  ABISELECT(104,72),
  ABISELECT(744,540),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__9S20676C119S20676C10__8S20676C1[] = {
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  ABISELECT(-1488,-1028),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__A1__9S20676C119S20676C10__8S20676C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20676C11[0]),
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C129S20676C10__A1__8S20676C1[] = {
  ABISELECT(256,176),
  ABISELECT(-1728,-1220),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C129S20676C10__A1__8S20676C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C10__8S20676C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
};
extern void _ZN8S20676C42v2Ev();
extern void _ZN8S20676C42v3Ev();
extern void _ZN8S20676C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C4__9S20676C10__8S20676C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-40),
  ABISELECT(592,428),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN8S20676C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20676C42v4Ev,
};
extern void _ZN8S20676C22v5Ev();
extern void _ZN8S20676C22v6Ev();
extern void _ZN8S20676C22v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20676C2__9S20676C10__8S20676C1[] = {
  0,
  0,
  0,
  ABISELECT(152,112),
  ABISELECT(104,72),
  ABISELECT(744,540),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN8S20676C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20676C22v7Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__9S20676C10__8S20676C1[] = {
  0,
  0,
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  ABISELECT(-1488,-1028),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__A__9S20676C10__8S20676C1[] = {
  ABISELECT(256,176),
  ABISELECT(-1728,-1220),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI9S20676C10[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__A2__8S20676C1[] = {
  ABISELECT(-1984,-1396),
  0,
  (VTBL_ENTRY)&(_ZTI8S20676C5[0]),
};
extern void _ZN9S20676C122v9Ev();
extern void _ZN9S20676C123v10Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C12__8S20676C1[] = {
  ABISELECT(-144,-100),
  ABISELECT(-2128,-1496),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
  (VTBL_ENTRY)&_ZN9S20676C122v9Ev,
  (VTBL_ENTRY)&_ZN9S20676C123v10Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20676C5__9S20676C12__8S20676C1[] = {
  ABISELECT(-1984,-1396),
  ABISELECT(144,100),
  (VTBL_ENTRY)&(_ZTI9S20676C12[0]),
};
extern void _ZN9S20676C143v14Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C14__8S20676C1[] = {
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI9S20676C14[0]),
  (VTBL_ENTRY)&_ZN9S20676C143v14Ev,
};
extern void _ZN9S20676C133v13Ev();
static  VTBL_ENTRY _tg__ZTV9S20676C13__9S20676C14__8S20676C1[] = {
  0,
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI9S20676C14[0]),
  (VTBL_ENTRY)&_ZN9S20676C133v13Ev,
};
static  VTT_ENTRY vtt_S20676C1[] = {
  {&(_ZTV8S20676C1[11]),  11,77},
  {&(_tg__ZTV8S20676C7__8S20676C1[9]),  9,11},
  {&(_tg__ZTV8S20676C9__8S20676C7__8S20676C1[4]),  4,5},
  {&(_tg__ZTV9S20676C10__8S20676C7__8S20676C1[11]),  11,13},
  {&(_tg__ZTV8S20676C5__A1__8S20676C7__8S20676C1[3]),  3,3},
  {&(_tg__ZTV8S20676C4__8S20676C7__8S20676C1[6]),  6,9},
  {&(_tg__ZTV8S20676C2__8S20676C7__8S20676C1[7]),  7,10},
  {&(_tg__ZTV9S20676C12__8S20676C7__8S20676C1[6]),  6,8},
  {&(_tg__ZTV9S20676C129S20676C10__A1__8S20676C7__8S20676C1[4]),  4,6},
  {&(_ZTV8S20676C1[21]),  21,77},
  {&(_ZTV8S20676C1[30]),  30,77},
  {&(_ZTV8S20676C1[37]),  37,77},
  {&(_ZTV8S20676C1[49]),  49,77},
  {&(_ZTV8S20676C1[60]),  60,77},
  {&(_ZTV8S20676C1[66]),  66,77},
  {&(_ZTV8S20676C1[55]),  55,77},
  {&(_ZTV8S20676C1[72]),  72,77},
  {&(_ZTV8S20676C1[76]),  76,77},
  {&(_tg__ZTV8S20676C2__8S20676C1[4]),  4,7},
  {&(_tg__ZTV8S20676C4__8S20676C2__8S20676C1[6]),  6,9},
  {&(_tg__ZTV8S20676C4__8S20676C1[3]),  3,6},
  {&(_tg__ZTV8S20676C58S20676C4__8S20676C1[3]),  3,3},
  {&(_tg__ZTV8S20676C9__8S20676C1[3]),  3,4},
  {&(_tg__ZTV8S20676C58S20676C9__A1__8S20676C1[3]),  3,3},
  {&(_tg__ZTV9S20676C10__8S20676C1[7]),  7,9},
  {&(_tg__ZTV9S20676C119S20676C10__8S20676C1[7]),  7,9},
  {&(_tg__ZTV8S20676C4__9S20676C119S20676C10__8S20676C1[6]),  6,9},
  {&(_tg__ZTV8S20676C2__9S20676C119S20676C10__8S20676C1[7]),  7,10},
  {&(_tg__ZTV9S20676C12__9S20676C119S20676C10__8S20676C1[6]),  6,8},
  {&(_tg__ZTV8S20676C5__A1__9S20676C119S20676C10__8S20676C1[3]),  3,3},
  {&(_tg__ZTV9S20676C129S20676C10__A1__8S20676C1[4]),  4,6},
  {&(_tg__ZTV8S20676C5__9S20676C129S20676C10__A1__8S20676C1[3]),  3,3},
  {&(_tg__ZTV8S20676C5__9S20676C10__8S20676C1[3]),  3,3},
  {&(_tg__ZTV8S20676C4__9S20676C10__8S20676C1[6]),  6,9},
  {&(_tg__ZTV8S20676C2__9S20676C10__8S20676C1[7]),  7,10},
  {&(_tg__ZTV9S20676C12__9S20676C10__8S20676C1[6]),  6,8},
  {&(_tg__ZTV9S20676C12__A__9S20676C10__8S20676C1[4]),  4,6},
  {&(_tg__ZTV8S20676C5__A2__8S20676C1[3]),  3,3},
  {&(_tg__ZTV9S20676C12__8S20676C1[4]),  4,6},
  {&(_tg__ZTV8S20676C5__9S20676C12__8S20676C1[3]),  3,3},
  {&(_tg__ZTV9S20676C14__8S20676C1[3]),  3,4},
  {&(_tg__ZTV9S20676C13__9S20676C14__8S20676C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20676C1[];
extern  VTBL_ENTRY _ZTV8S20676C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20676C1[];
Class_Descriptor cd_S20676C1 = {  "S20676C1", // class name
  bases_S20676C1, 17,
  &(vtc_S20676C1[0]), // expected_vtbl_contents
  &(vtt_S20676C1[0]), // expected_vtt_contents
  ABISELECT(4544,3176), // object size
  NSPAIRA(_ZTI8S20676C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20676C1),77, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20676C1),42, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20673C5  : virtual S20677C3 {
  long double s20673c5f0;
  int s20673c5f1;
  ::S20677C3 s20673c5f2;
  ::S20677C3 s20673c5f3;
  ~S20673C5(); // tgen
  S20673C5(); // tgen
};
//SIG(-1 S20673C5) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S20673C5 ::~S20673C5(){ note_dtor("S20673C5", this);} // tgen
S20673C5 ::S20673C5(){ note_ctor("S20673C5", this);} // tgen

static void Test_S20673C5()
{
  extern Class_Descriptor cd_S20673C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S20673C5, buf);
    S20673C5 *dp, &lv = *(dp=new (buf) S20673C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S20673C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20673C5)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S20673C5");
    check_field_offset(lv, s20673c5f0, ABISELECT(16,4), "S20673C5.s20673c5f0");
    check_field_offset(lv, s20673c5f1, ABISELECT(32,16), "S20673C5.s20673c5f1");
    check_field_offset(lv, s20673c5f2, ABISELECT(40,20), "S20673C5.s20673c5f2");
    check_field_offset(lv, s20673c5f3, ABISELECT(88,60), "S20673C5.s20673c5f3");
    test_class_info(&lv, &cd_S20673C5);
    dp->~S20673C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20673C5(Test_S20673C5, "S20673C5", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S20673C5C1Ev();
extern void _ZN8S20673C5D1Ev();
Name_Map name_map_S20673C5[] = {
  NSPAIR(_ZN8S20673C5C1Ev),
  NSPAIR(_ZN8S20673C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20673C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20673C5[];
static  VTBL_ENTRY vtc_S20673C5[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C5[0]),
};
extern VTBL_ENTRY _ZTV8S20673C5[];
static  VTT_ENTRY vtt_S20673C5[] = {
  {&(_ZTV8S20673C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20673C5[];
extern  VTBL_ENTRY _ZTV8S20673C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C5[];
Class_Descriptor cd_S20673C5 = {  "S20673C5", // class name
  bases_S20673C5, 1,
  &(vtc_S20673C5[0]), // expected_vtbl_contents
  &(vtt_S20673C5[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S20673C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20673C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20673C5),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20673C4  : virtual S20677C3 , S20673C5 {
  short s20673c4f0;
  __tsi64 s20673c4f1;
  char s20673c4f2;
  int s20673c4f3[2];
  ::S20673C5 s20673c4f4;
  void *s20673c4f5;
  __tsi64 s20673c4f6;
  int s20673c4f7;
  __tsi64 s20673c4f8;
  int s20673c4f9;
  virtual void  v1(); // _ZN8S20673C42v1Ev
  virtual void  v2(); // _ZN8S20673C42v2Ev
  virtual void  v3(); // _ZN8S20673C42v3Ev
  ~S20673C4(); // tgen
  S20673C4(); // tgen
};
//SIG(-1 S20673C4) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S20673C4 ::v1(){vfunc_called(this, "_ZN8S20673C42v1Ev");}
void  S20673C4 ::v2(){vfunc_called(this, "_ZN8S20673C42v2Ev");}
void  S20673C4 ::v3(){vfunc_called(this, "_ZN8S20673C42v3Ev");}
S20673C4 ::~S20673C4(){ note_dtor("S20673C4", this);} // tgen
S20673C4 ::S20673C4(){ note_ctor("S20673C4", this);} // tgen

static void Test_S20673C4()
{
  extern Class_Descriptor cd_S20673C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S20673C4, buf);
    S20673C4 *dp, &lv = *(dp=new (buf) S20673C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S20673C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20673C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S20673C4");
    check_base_class_offset(lv, (S20677C3*)(S20673C5*), ABISELECT(408,292), "S20673C4");
    check_base_class_offset(lv, (S20673C5*), 0, "S20673C4");
    check_field_offset(lv, s20673c4f0, ABISELECT(136,100), "S20673C4.s20673c4f0");
    check_field_offset(lv, s20673c4f1, ABISELECT(144,104), "S20673C4.s20673c4f1");
    check_field_offset(lv, s20673c4f2, ABISELECT(152,112), "S20673C4.s20673c4f2");
    check_field_offset(lv, s20673c4f3, ABISELECT(156,116), "S20673C4.s20673c4f3");
    check_field_offset(lv, s20673c4f4, ABISELECT(176,124), "S20673C4.s20673c4f4");
    check_field_offset(lv, s20673c4f5, ABISELECT(368,264), "S20673C4.s20673c4f5");
    check_field_offset(lv, s20673c4f6, ABISELECT(376,268), "S20673C4.s20673c4f6");
    check_field_offset(lv, s20673c4f7, ABISELECT(384,276), "S20673C4.s20673c4f7");
    check_field_offset(lv, s20673c4f8, ABISELECT(392,280), "S20673C4.s20673c4f8");
    check_field_offset(lv, s20673c4f9, ABISELECT(400,288), "S20673C4.s20673c4f9");
    test_class_info(&lv, &cd_S20673C4);
    dp->~S20673C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20673C4(Test_S20673C4, "S20673C4", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S20673C4C1Ev();
extern void _ZN8S20673C4D1Ev();
Name_Map name_map_S20673C4[] = {
  NSPAIR(_ZN8S20673C4C1Ev),
  NSPAIR(_ZN8S20673C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20673C5;
extern VTBL_ENTRY _ZTI8S20673C5[];
extern  VTBL_ENTRY _ZTV8S20673C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C5[];
static Base_Class bases_S20673C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20673C5,    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 _ZTI8S20673C4[];
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY vtc_S20673C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C4[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20673C4[];
static  VTBL_ENTRY _tg__ZTV8S20673C5__8S20673C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C5[0]),
};
static  VTT_ENTRY vtt_S20673C4[] = {
  {&(_ZTV8S20673C4[3]),  3,6},
  {&(_tg__ZTV8S20673C5__8S20673C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20673C4[];
extern  VTBL_ENTRY _ZTV8S20673C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C4[];
Class_Descriptor cd_S20673C4 = {  "S20673C4", // class name
  bases_S20673C4, 2,
  &(vtc_S20673C4[0]), // expected_vtbl_contents
  &(vtt_S20673C4[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S20673C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20673C4),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20673C4),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  S20673C2  : virtual S20677C3 , virtual S20673C4 {
  __tsi64 s20673c2f0;
  ::S20677C6_nt s20673c2f1;
  void *s20673c2f2;
  char s20673c2f3[2];
  ::S20677C3 s20673c2f4;
  long s20673c2f5;
  ::S20677C6_nt s20673c2f6;
  virtual void  v4(); // _ZN8S20673C22v4Ev
  virtual void  v5(); // _ZN8S20673C22v5Ev
  virtual void  v6(); // _ZN8S20673C22v6Ev
  ~S20673C2(); // tgen
  S20673C2(); // tgen
};
//SIG(-1 S20673C2) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S20673C2 ::v4(){vfunc_called(this, "_ZN8S20673C22v4Ev");}
void  S20673C2 ::v5(){vfunc_called(this, "_ZN8S20673C22v5Ev");}
void  S20673C2 ::v6(){vfunc_called(this, "_ZN8S20673C22v6Ev");}
S20673C2 ::~S20673C2(){ note_dtor("S20673C2", this);} // tgen
S20673C2 ::S20673C2(){ note_ctor("S20673C2", this);} // tgen

static void Test_S20673C2()
{
  extern Class_Descriptor cd_S20673C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S20673C2, buf);
    S20673C2 *dp, &lv = *(dp=new (buf) S20673C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S20673C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20673C2)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S20673C2");
    check_base_class_offset(lv, (S20677C3*)(S20673C4*), ABISELECT(104,72), "S20673C2");
    check_base_class_offset(lv, (S20677C3*)(S20673C5*)(S20673C4*), ABISELECT(104,72), "S20673C2");
    check_base_class_offset(lv, (S20673C5*)(S20673C4*), ABISELECT(160,112), "S20673C2");
    check_base_class_offset(lv, (S20673C4*), ABISELECT(160,112), "S20673C2");
    check_field_offset(lv, s20673c2f0, ABISELECT(8,4), "S20673C2.s20673c2f0");
    check_field_offset(lv, s20673c2f1, ABISELECT(16,12), "S20673C2.s20673c2f1");
    check_field_offset(lv, s20673c2f2, ABISELECT(24,16), "S20673C2.s20673c2f2");
    check_field_offset(lv, s20673c2f3, ABISELECT(32,20), "S20673C2.s20673c2f3");
    check_field_offset(lv, s20673c2f4, ABISELECT(40,24), "S20673C2.s20673c2f4");
    check_field_offset(lv, s20673c2f5, ABISELECT(88,64), "S20673C2.s20673c2f5");
    check_field_offset(lv, s20673c2f6, ABISELECT(96,68), "S20673C2.s20673c2f6");
    test_class_info(&lv, &cd_S20673C2);
    dp->~S20673C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20673C2(Test_S20673C2, "S20673C2", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN8S20673C2C1Ev();
extern void _ZN8S20673C2D1Ev();
Name_Map name_map_S20673C2[] = {
  NSPAIR(_ZN8S20673C2C1Ev),
  NSPAIR(_ZN8S20673C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20673C5;
extern VTBL_ENTRY _ZTI8S20673C5[];
extern  VTBL_ENTRY _ZTV8S20673C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C5[];
extern Class_Descriptor cd_S20673C4;
extern VTBL_ENTRY _ZTI8S20673C4[];
extern  VTBL_ENTRY _ZTV8S20673C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C4[];
static Base_Class bases_S20673C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20673C5,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20673C4,    ABISELECT(160,112), //bcp->offset
    7, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20673C2[];
extern void _ZN8S20673C22v4Ev();
extern void _ZN8S20673C22v5Ev();
extern void _ZN8S20673C22v6Ev();
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY vtc_S20673C2[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C2[0]),
  (VTBL_ENTRY)&_ZN8S20673C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v6Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20673C2[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20673C2[];
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20673C4__8S20673C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C4[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20673C58S20673C4__8S20673C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C5[0]),
};
static  VTT_ENTRY vtt_S20673C2[] = {
  {&(_ZTV8S20673C2[4]),  4,16},
  {&(_ZTV8S20673C2[13]),  13,16},
  {&(_tg__ZTV8S20673C4__8S20673C2[3]),  3,6},
  {&(_tg__ZTV8S20673C58S20673C4__8S20673C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20673C2[];
extern  VTBL_ENTRY _ZTV8S20673C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C2[];
Class_Descriptor cd_S20673C2 = {  "S20673C2", // class name
  bases_S20673C2, 3,
  &(vtc_S20673C2[0]), // expected_vtbl_contents
  &(vtt_S20673C2[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI8S20673C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20673C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20673C2),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  S20673C11  : S20677C3 {
  ::S20677C3 s20673c11f0;
  int s20673c11f1;
  long double s20673c11f2;
  int s20673c11f3;
  __tsi64 s20673c11f4;
  long s20673c11f5;
};
//SIG(-1 S20673C11) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S20673C11()
{
  extern Class_Descriptor cd_S20673C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20673C11, buf);
    S20673C11 &lv = *(new (buf) S20673C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20673C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20673C11)");
    check_base_class_offset(lv, (S20677C3*), 0, "S20673C11");
    check_field_offset(lv, s20673c11f0, ABISELECT(48,40), "S20673C11.s20673c11f0");
    check_field_offset(lv, s20673c11f1, ABISELECT(96,80), "S20673C11.s20673c11f1");
    check_field_offset(lv, s20673c11f2, ABISELECT(112,84), "S20673C11.s20673c11f2");
    check_field_offset(lv, s20673c11f3, ABISELECT(128,96), "S20673C11.s20673c11f3");
    check_field_offset(lv, s20673c11f4, ABISELECT(136,100), "S20673C11.s20673c11f4");
    check_field_offset(lv, s20673c11f5, ABISELECT(144,108), "S20673C11.s20673c11f5");
    test_class_info(&lv, &cd_S20673C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20673C11(Test_S20673C11, "S20673C11", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20673C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20673C11[];
Class_Descriptor cd_S20673C11 = {  "S20673C11", // class name
  bases_S20673C11, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI9S20673C11),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20673C9  {
  ::S20677C6_nt s20673c9f0;
  ::S20673C5 s20673c9f1;
  ::S20677C6_nt s20673c9f2;
  __tsi64 s20673c9f3;
  ::S20677C6_nt s20673c9f4;
  void *s20673c9f5;
  ::S20677C6_nt s20673c9f6;
  void *s20673c9f7[2];
  ::S20677C6_nt s20673c9f8;
  virtual void  v11(); // _ZN8S20673C93v11Ev
  ~S20673C9(); // tgen
  S20673C9(); // tgen
};
//SIG(-1 S20673C9) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S20673C9 ::v11(){vfunc_called(this, "_ZN8S20673C93v11Ev");}
S20673C9 ::~S20673C9(){ note_dtor("S20673C9", this);} // tgen
S20673C9 ::S20673C9(){ note_ctor("S20673C9", this);} // tgen

static void Test_S20673C9()
{
  extern Class_Descriptor cd_S20673C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S20673C9, buf);
    S20673C9 *dp, &lv = *(dp=new (buf) S20673C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S20673C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20673C9)");
    check_field_offset(lv, s20673c9f0, ABISELECT(8,4), "S20673C9.s20673c9f0");
    check_field_offset(lv, s20673c9f1, ABISELECT(16,8), "S20673C9.s20673c9f1");
    check_field_offset(lv, s20673c9f2, ABISELECT(208,148), "S20673C9.s20673c9f2");
    check_field_offset(lv, s20673c9f3, ABISELECT(216,152), "S20673C9.s20673c9f3");
    check_field_offset(lv, s20673c9f4, ABISELECT(224,160), "S20673C9.s20673c9f4");
    check_field_offset(lv, s20673c9f5, ABISELECT(232,164), "S20673C9.s20673c9f5");
    check_field_offset(lv, s20673c9f6, ABISELECT(240,168), "S20673C9.s20673c9f6");
    check_field_offset(lv, s20673c9f7, ABISELECT(248,172), "S20673C9.s20673c9f7");
    check_field_offset(lv, s20673c9f8, ABISELECT(264,180), "S20673C9.s20673c9f8");
    test_class_info(&lv, &cd_S20673C9);
    dp->~S20673C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20673C9(Test_S20673C9, "S20673C9", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN8S20673C9C1Ev();
extern void _ZN8S20673C9D1Ev();
Name_Map name_map_S20673C9[] = {
  NSPAIR(_ZN8S20673C9C1Ev),
  NSPAIR(_ZN8S20673C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20673C9[];
extern void _ZN8S20673C93v11Ev();
static  VTBL_ENTRY vtc_S20673C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C9[0]),
  (VTBL_ENTRY)&_ZN8S20673C93v11Ev,
};
extern VTBL_ENTRY _ZTI8S20673C9[];
extern  VTBL_ENTRY _ZTV8S20673C9[];
Class_Descriptor cd_S20673C9 = {  "S20673C9", // class name
  0,0,//no base classes
  &(vtc_S20673C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI8S20673C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20673C9),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20673C10  : virtual S20673C2 , S20673C11 , S20673C9 {
  ::S20673C9 s20673c10f0;
  int s20673c10f1:3;
  ::S20680C5 s20673c10f2[2];
  int s20673c10f3;
  long double s20673c10f4;
  __tsi64 s20673c10f5;
  long double s20673c10f6;
  virtual  ~S20673C10(); // _ZN9S20673C10D2Ev
  virtual void  v12(); // _ZN9S20673C103v12Ev
  S20673C10(); // tgen
};
//SIG(-1 S20673C10) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v5 v6 v7 FL FC6{} Fp Fc[2] FC3 Fl FC6} BC7{ BC3 FC3 Fi FD Fi FL Fl} BC8{ v8 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} vd v1 FC8 Fi:3 FC9{ BC10{ VBC3 BC11{ VBC3 FD Fi FC3 FC3} v10 v11 v12 Fs FL Fc Fi[2] FC11 Fp FL Fi FL Fi} VBC12{ VBC3 VBC11 v13 v14 Fi FC11 FL Fi Fp} BC11 VBC13{ v15 FC6 FC11 FC6 FL FC6 Fp FC6 Fp[2] FC6} VBC14{ BC11 v16 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v9 Fl FL FD FC6}[2] Fi FD FL FD}


 S20673C10 ::~S20673C10(){ note_dtor("S20673C10", this);}
void  S20673C10 ::v12(){vfunc_called(this, "_ZN9S20673C103v12Ev");}
S20673C10 ::S20673C10(){ note_ctor("S20673C10", this);} // tgen

static void Test_S20673C10()
{
  extern Class_Descriptor cd_S20673C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(272,754)];
    init_test(&cd_S20673C10, buf);
    S20673C10 *dp, &lv = *(dp=new (buf) S20673C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4336,3012), "sizeof(S20673C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20673C10)");
    check_base_class_offset(lv, (S20677C3*)(S20673C2*), ABISELECT(3864,2680), "S20673C10");
    check_base_class_offset(lv, (S20677C3*)(S20673C4*), ABISELECT(3864,2680), "S20673C10");
    check_base_class_offset(lv, (S20677C3*)(S20673C5*)(S20673C4*), ABISELECT(3864,2680), "S20673C10");
    check_base_class_offset(lv, (S20673C5*)(S20673C4*), ABISELECT(3920,2720), "S20673C10");
    check_base_class_offset(lv, (S20673C4*)(S20673C2*), ABISELECT(3920,2720), "S20673C10");
    check_base_class_offset(lv, (S20673C2*), ABISELECT(3760,2608), "S20673C10");
    check_base_class_offset(lv, (S20677C3*)(S20673C11*), ABISELECT(272,184), "S20673C10");
    check_base_class_offset(lv, (S20673C11*), ABISELECT(272,184), "S20673C10");
    check_base_class_offset(lv, (S20673C9*), 0, "S20673C10");
    check_field_offset(lv, s20673c10f0, ABISELECT(432,296), "S20673C10.s20673c10f0");
    set_bf_and_test(lv, s20673c10f1, ABISELECT(704,480), 0, 3, 1, "S20673C10");
    set_bf_and_test(lv, s20673c10f1, ABISELECT(704,480), 0, 3, hide_sll(1LL<<2), "S20673C10");
    check_field_offset(lv, s20673c10f2, ABISELECT(720,484), "S20673C10.s20673c10f2");
    check_field_offset(lv, s20673c10f3, ABISELECT(3696,2572), "S20673C10.s20673c10f3");
    check_field_offset(lv, s20673c10f4, ABISELECT(3712,2576), "S20673C10.s20673c10f4");
    check_field_offset(lv, s20673c10f5, ABISELECT(3728,2588), "S20673C10.s20673c10f5");
    check_field_offset(lv, s20673c10f6, ABISELECT(3744,2596), "S20673C10.s20673c10f6");
    test_class_info(&lv, &cd_S20673C10);
    dp->~S20673C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20673C10(Test_S20673C10, "S20673C10", ABISELECT(4336,3012));

#else // __cplusplus

extern void _ZN9S20673C10C1Ev();
extern void _ZN9S20673C10D2Ev();
Name_Map name_map_S20673C10[] = {
  NSPAIR(_ZN9S20673C10C1Ev),
  NSPAIR(_ZN9S20673C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20673C5;
extern VTBL_ENTRY _ZTI8S20673C5[];
extern  VTBL_ENTRY _ZTV8S20673C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C5[];
extern Class_Descriptor cd_S20673C4;
extern VTBL_ENTRY _ZTI8S20673C4[];
extern  VTBL_ENTRY _ZTV8S20673C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C4[];
extern Class_Descriptor cd_S20673C2;
extern VTBL_ENTRY _ZTI8S20673C2[];
extern  VTBL_ENTRY _ZTV8S20673C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C2[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20673C11;
extern VTBL_ENTRY _ZTI9S20673C11[];
extern Class_Descriptor cd_S20673C9;
extern VTBL_ENTRY _ZTI8S20673C9[];
extern  VTBL_ENTRY _ZTV8S20673C9[];
static Base_Class bases_S20673C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(3864,2680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20673C5,    ABISELECT(3920,2720), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20673C4,    ABISELECT(3920,2720), //bcp->offset
    19, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20673C2,    ABISELECT(3760,2608), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(272,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20673C11,    ABISELECT(272,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20673C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S20673C10[];
extern void _ZN8S20673C93v11Ev();
extern void _ZN9S20673C10D1Ev();
extern void _ZN9S20673C10D0Ev();
extern void _ZN9S20673C103v12Ev();
extern void _ZN8S20673C22v4Ev();
extern void _ZN8S20673C22v5Ev();
extern void _ZN8S20673C22v6Ev();
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY vtc_S20673C10[] = {
  ABISELECT(3920,2720),
  ABISELECT(3864,2680),
  ABISELECT(3760,2608),
  0,
  (VTBL_ENTRY)&(_ZTI9S20673C10[0]),
  (VTBL_ENTRY)&_ZN8S20673C93v11Ev,
  (VTBL_ENTRY)&_ZN9S20673C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20673C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20673C103v12Ev,
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-3760,-2608),
  (VTBL_ENTRY)&(_ZTI9S20673C10[0]),
  (VTBL_ENTRY)&_ZN8S20673C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v6Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3920,-2720),
  (VTBL_ENTRY)&(_ZTI9S20673C10[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
extern VTBL_ENTRY _ZTV9S20673C10[];
extern void _ZN8S20673C22v4Ev();
extern void _ZN8S20673C22v5Ev();
extern void _ZN8S20673C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20673C2__9S20673C10[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C2[0]),
  (VTBL_ENTRY)&_ZN8S20673C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v6Ev,
};
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20673C4__8S20673C2__9S20673C10[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20673C2[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20673C4__9S20673C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C4[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20673C58S20673C4__9S20673C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C5[0]),
};
static  VTT_ENTRY vtt_S20673C10[] = {
  {&(_ZTV9S20673C10[5]),  5,28},
  {&(_ZTV9S20673C10[16]),  16,28},
  {&(_ZTV9S20673C10[25]),  25,28},
  {&(_tg__ZTV8S20673C2__9S20673C10[4]),  4,7},
  {&(_tg__ZTV8S20673C4__8S20673C2__9S20673C10[6]),  6,9},
  {&(_tg__ZTV8S20673C4__9S20673C10[3]),  3,6},
  {&(_tg__ZTV8S20673C58S20673C4__9S20673C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20673C10[];
extern  VTBL_ENTRY _ZTV9S20673C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20673C10[];
Class_Descriptor cd_S20673C10 = {  "S20673C10", // class name
  bases_S20673C10, 7,
  &(vtc_S20673C10[0]), // expected_vtbl_contents
  &(vtt_S20673C10[0]), // expected_vtt_contents
  ABISELECT(4336,3012), // object size
  NSPAIRA(_ZTI9S20673C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20673C10),28, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20673C10),7, //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  S20673C1  : virtual S20673C2 {
  int s20673c1f0;
  ::S20678C11 s20673c1f1;
  int s20673c1f2[3];
  ::S20677C6_nt s20673c1f3;
  ::S20673C10 s20673c1f4;
  ::S20677C6_nt s20673c1f5;
  void *s20673c1f6;
  ~S20673C1(); // tgen
  S20673C1(); // tgen
};
//SIG(1 S20673C1) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v1 v2 v3 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v4 v5 v6 FL FC6{} Fp Fc[2] FC3 Fl FC6} Fi FC7{ VBC8{ VBC3 BC9{ VBC3 FD Fi FC3 FC3} v9 v10 v11 Fs FL Fc Fi[2] FC9 Fp FL Fi FL Fi} VBC10{ VBC3 VBC8 v12 v13 v14 FL FC6 Fp Fc[2] FC3 Fl FC6} VBC11{ VBC3 VBC9 v15 v16 Fi FC9 FL Fi Fp} v7 v8 FC6 FC6 Fi FC9 FC6 FC6 FC12{ v17 FC6 FC9 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC10 Fp FC6} Fi[3] FC6 FC13{ VBC2 BC14{ BC3 FC3 Fi FD Fi FL Fl} BC15{ v19 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} vd v18 FC15 Fi:3 FC16{ BC17{ VBC3 BC18{ VBC3 FD Fi FC3 FC3} v21 v22 v23 Fs FL Fc Fi[2] FC18 Fp FL Fi FL Fi} VBC19{ VBC3 VBC18 v24 v25 Fi FC18 FL Fi Fp} BC18 VBC20{ v26 FC6 FC18 FC6 FL FC6 Fp FC6 Fp[2] FC6} VBC21{ BC18 v27 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v20 Fl FL FD FC6}[2] Fi FD FL FD} FC6 Fp}


S20673C1 ::~S20673C1(){ note_dtor("S20673C1", this);} // tgen
S20673C1 ::S20673C1(){ note_ctor("S20673C1", this);} // tgen

static void Test_S20673C1()
{
  extern Class_Descriptor cd_S20673C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(438,1218)];
    init_test(&cd_S20673C1, buf);
    S20673C1 *dp, &lv = *(dp=new (buf) S20673C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6992,4868), "sizeof(S20673C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20673C1)");
    check_base_class_offset(lv, (S20677C3*)(S20673C2*), ABISELECT(6520,4536), "S20673C1");
    check_base_class_offset(lv, (S20677C3*)(S20673C4*), ABISELECT(6520,4536), "S20673C1");
    check_base_class_offset(lv, (S20677C3*)(S20673C5*)(S20673C4*), ABISELECT(6520,4536), "S20673C1");
    check_base_class_offset(lv, (S20673C5*)(S20673C4*), ABISELECT(6576,4576), "S20673C1");
    check_base_class_offset(lv, (S20673C4*)(S20673C2*), ABISELECT(6576,4576), "S20673C1");
    check_base_class_offset(lv, (S20673C2*), ABISELECT(6416,4464), "S20673C1");
    check_field_offset(lv, s20673c1f0, ABISELECT(8,4), "S20673C1.s20673c1f0");
    check_field_offset(lv, s20673c1f1, ABISELECT(16,8), "S20673C1.s20673c1f1");
    check_field_offset(lv, s20673c1f2, ABISELECT(2048,1428), "S20673C1.s20673c1f2");
    check_field_offset(lv, s20673c1f3, ABISELECT(2060,1440), "S20673C1.s20673c1f3");
    check_field_offset(lv, s20673c1f4, ABISELECT(2064,1444), "S20673C1.s20673c1f4");
    check_field_offset(lv, s20673c1f5, ABISELECT(6400,4456), "S20673C1.s20673c1f5");
    check_field_offset(lv, s20673c1f6, ABISELECT(6408,4460), "S20673C1.s20673c1f6");
    test_class_info(&lv, &cd_S20673C1);
    dp->~S20673C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20673C1(Test_S20673C1, "S20673C1", ABISELECT(6992,4868));

#else // __cplusplus

extern void _ZN8S20673C1C1Ev();
extern void _ZN8S20673C1D1Ev();
Name_Map name_map_S20673C1[] = {
  NSPAIR(_ZN8S20673C1C1Ev),
  NSPAIR(_ZN8S20673C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20673C5;
extern VTBL_ENTRY _ZTI8S20673C5[];
extern  VTBL_ENTRY _ZTV8S20673C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C5[];
extern Class_Descriptor cd_S20673C4;
extern VTBL_ENTRY _ZTI8S20673C4[];
extern  VTBL_ENTRY _ZTV8S20673C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C4[];
extern Class_Descriptor cd_S20673C2;
extern VTBL_ENTRY _ZTI8S20673C2[];
extern  VTBL_ENTRY _ZTV8S20673C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C2[];
static Base_Class bases_S20673C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(6520,4536), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20673C5,    ABISELECT(6576,4576), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20673C4,    ABISELECT(6576,4576), //bcp->offset
    15, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20673C2,    ABISELECT(6416,4464), //bcp->offset
    5, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20673C1[];
extern void _ZN8S20673C22v4Ev();
extern void _ZN8S20673C22v5Ev();
extern void _ZN8S20673C22v6Ev();
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY vtc_S20673C1[] = {
  ABISELECT(6576,4576),
  ABISELECT(6520,4536),
  ABISELECT(6416,4464),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C1[0]),
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-6416,-4464),
  (VTBL_ENTRY)&(_ZTI8S20673C1[0]),
  (VTBL_ENTRY)&_ZN8S20673C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v6Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-6576,-4576),
  (VTBL_ENTRY)&(_ZTI8S20673C1[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20673C1[];
extern void _ZN8S20673C22v4Ev();
extern void _ZN8S20673C22v5Ev();
extern void _ZN8S20673C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20673C2__8S20673C1[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C2[0]),
  (VTBL_ENTRY)&_ZN8S20673C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20673C22v6Ev,
};
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20673C4__8S20673C2__8S20673C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20673C2[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
extern void _ZN8S20673C42v1Ev();
extern void _ZN8S20673C42v2Ev();
extern void _ZN8S20673C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20673C4__8S20673C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C4[0]),
  (VTBL_ENTRY)&_ZN8S20673C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20673C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20673C58S20673C4__8S20673C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20673C5[0]),
};
static  VTT_ENTRY vtt_S20673C1[] = {
  {&(_ZTV8S20673C1[5]),  5,24},
  {&(_ZTV8S20673C1[12]),  12,24},
  {&(_ZTV8S20673C1[21]),  21,24},
  {&(_tg__ZTV8S20673C2__8S20673C1[4]),  4,7},
  {&(_tg__ZTV8S20673C4__8S20673C2__8S20673C1[6]),  6,9},
  {&(_tg__ZTV8S20673C4__8S20673C1[3]),  3,6},
  {&(_tg__ZTV8S20673C58S20673C4__8S20673C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20673C1[];
extern  VTBL_ENTRY _ZTV8S20673C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20673C1[];
Class_Descriptor cd_S20673C1 = {  "S20673C1", // class name
  bases_S20673C1, 4,
  &(vtc_S20673C1[0]), // expected_vtbl_contents
  &(vtt_S20673C1[0]), // expected_vtt_contents
  ABISELECT(6992,4868), // object size
  NSPAIRA(_ZTI8S20673C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20673C1),24, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20673C1),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20674C5  : virtual S20677C3 {
  long double s20674c5f0;
  int s20674c5f1;
  ::S20677C3 s20674c5f2;
  ::S20677C3 s20674c5f3;
  ~S20674C5(); // tgen
  S20674C5(); // tgen
};
//SIG(-1 S20674C5) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S20674C5 ::~S20674C5(){ note_dtor("S20674C5", this);} // tgen
S20674C5 ::S20674C5(){ note_ctor("S20674C5", this);} // tgen

static void Test_S20674C5()
{
  extern Class_Descriptor cd_S20674C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S20674C5, buf);
    S20674C5 *dp, &lv = *(dp=new (buf) S20674C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S20674C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20674C5)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S20674C5");
    check_field_offset(lv, s20674c5f0, ABISELECT(16,4), "S20674C5.s20674c5f0");
    check_field_offset(lv, s20674c5f1, ABISELECT(32,16), "S20674C5.s20674c5f1");
    check_field_offset(lv, s20674c5f2, ABISELECT(40,20), "S20674C5.s20674c5f2");
    check_field_offset(lv, s20674c5f3, ABISELECT(88,60), "S20674C5.s20674c5f3");
    test_class_info(&lv, &cd_S20674C5);
    dp->~S20674C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20674C5(Test_S20674C5, "S20674C5", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S20674C5C1Ev();
extern void _ZN8S20674C5D1Ev();
Name_Map name_map_S20674C5[] = {
  NSPAIR(_ZN8S20674C5C1Ev),
  NSPAIR(_ZN8S20674C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20674C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20674C5[];
static  VTBL_ENTRY vtc_S20674C5[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C5[0]),
};
extern VTBL_ENTRY _ZTV8S20674C5[];
static  VTT_ENTRY vtt_S20674C5[] = {
  {&(_ZTV8S20674C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20674C5[];
extern  VTBL_ENTRY _ZTV8S20674C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C5[];
Class_Descriptor cd_S20674C5 = {  "S20674C5", // class name
  bases_S20674C5, 1,
  &(vtc_S20674C5[0]), // expected_vtbl_contents
  &(vtt_S20674C5[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S20674C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20674C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20674C5),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20674C4  : virtual S20677C3 , S20674C5 {
  short s20674c4f0;
  __tsi64 s20674c4f1;
  char s20674c4f2;
  int s20674c4f3[2];
  ::S20674C5 s20674c4f4;
  void *s20674c4f5;
  __tsi64 s20674c4f6;
  int s20674c4f7;
  __tsi64 s20674c4f8;
  int s20674c4f9;
  virtual void  v1(); // _ZN8S20674C42v1Ev
  virtual void  v2(); // _ZN8S20674C42v2Ev
  virtual void  v3(); // _ZN8S20674C42v3Ev
  ~S20674C4(); // tgen
  S20674C4(); // tgen
};
//SIG(-1 S20674C4) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S20674C4 ::v1(){vfunc_called(this, "_ZN8S20674C42v1Ev");}
void  S20674C4 ::v2(){vfunc_called(this, "_ZN8S20674C42v2Ev");}
void  S20674C4 ::v3(){vfunc_called(this, "_ZN8S20674C42v3Ev");}
S20674C4 ::~S20674C4(){ note_dtor("S20674C4", this);} // tgen
S20674C4 ::S20674C4(){ note_ctor("S20674C4", this);} // tgen

static void Test_S20674C4()
{
  extern Class_Descriptor cd_S20674C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S20674C4, buf);
    S20674C4 *dp, &lv = *(dp=new (buf) S20674C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S20674C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20674C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S20674C4");
    check_base_class_offset(lv, (S20677C3*)(S20674C5*), ABISELECT(408,292), "S20674C4");
    check_base_class_offset(lv, (S20674C5*), 0, "S20674C4");
    check_field_offset(lv, s20674c4f0, ABISELECT(136,100), "S20674C4.s20674c4f0");
    check_field_offset(lv, s20674c4f1, ABISELECT(144,104), "S20674C4.s20674c4f1");
    check_field_offset(lv, s20674c4f2, ABISELECT(152,112), "S20674C4.s20674c4f2");
    check_field_offset(lv, s20674c4f3, ABISELECT(156,116), "S20674C4.s20674c4f3");
    check_field_offset(lv, s20674c4f4, ABISELECT(176,124), "S20674C4.s20674c4f4");
    check_field_offset(lv, s20674c4f5, ABISELECT(368,264), "S20674C4.s20674c4f5");
    check_field_offset(lv, s20674c4f6, ABISELECT(376,268), "S20674C4.s20674c4f6");
    check_field_offset(lv, s20674c4f7, ABISELECT(384,276), "S20674C4.s20674c4f7");
    check_field_offset(lv, s20674c4f8, ABISELECT(392,280), "S20674C4.s20674c4f8");
    check_field_offset(lv, s20674c4f9, ABISELECT(400,288), "S20674C4.s20674c4f9");
    test_class_info(&lv, &cd_S20674C4);
    dp->~S20674C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20674C4(Test_S20674C4, "S20674C4", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S20674C4C1Ev();
extern void _ZN8S20674C4D1Ev();
Name_Map name_map_S20674C4[] = {
  NSPAIR(_ZN8S20674C4C1Ev),
  NSPAIR(_ZN8S20674C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20674C5;
extern VTBL_ENTRY _ZTI8S20674C5[];
extern  VTBL_ENTRY _ZTV8S20674C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C5[];
static Base_Class bases_S20674C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20674C5,    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 _ZTI8S20674C4[];
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY vtc_S20674C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C4[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20674C4[];
static  VTBL_ENTRY _tg__ZTV8S20674C5__8S20674C4[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C5[0]),
};
static  VTT_ENTRY vtt_S20674C4[] = {
  {&(_ZTV8S20674C4[3]),  3,6},
  {&(_tg__ZTV8S20674C5__8S20674C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20674C4[];
extern  VTBL_ENTRY _ZTV8S20674C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C4[];
Class_Descriptor cd_S20674C4 = {  "S20674C4", // class name
  bases_S20674C4, 2,
  &(vtc_S20674C4[0]), // expected_vtbl_contents
  &(vtt_S20674C4[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S20674C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20674C4),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20674C4),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  S20674C2  : virtual S20677C3 , virtual S20674C4 {
  __tsi64 s20674c2f0;
  ::S20677C6_nt s20674c2f1;
  void *s20674c2f2;
  char s20674c2f3[2];
  ::S20677C3 s20674c2f4;
  long s20674c2f5;
  ::S20677C6_nt s20674c2f6;
  virtual void  v4(); // _ZN8S20674C22v4Ev
  virtual void  v5(); // _ZN8S20674C22v5Ev
  virtual void  v6(); // _ZN8S20674C22v6Ev
  ~S20674C2(); // tgen
  S20674C2(); // tgen
};
//SIG(-1 S20674C2) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S20674C2 ::v4(){vfunc_called(this, "_ZN8S20674C22v4Ev");}
void  S20674C2 ::v5(){vfunc_called(this, "_ZN8S20674C22v5Ev");}
void  S20674C2 ::v6(){vfunc_called(this, "_ZN8S20674C22v6Ev");}
S20674C2 ::~S20674C2(){ note_dtor("S20674C2", this);} // tgen
S20674C2 ::S20674C2(){ note_ctor("S20674C2", this);} // tgen

static void Test_S20674C2()
{
  extern Class_Descriptor cd_S20674C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S20674C2, buf);
    S20674C2 *dp, &lv = *(dp=new (buf) S20674C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S20674C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20674C2)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S20674C2");
    check_base_class_offset(lv, (S20677C3*)(S20674C4*), ABISELECT(104,72), "S20674C2");
    check_base_class_offset(lv, (S20677C3*)(S20674C5*)(S20674C4*), ABISELECT(104,72), "S20674C2");
    check_base_class_offset(lv, (S20674C5*)(S20674C4*), ABISELECT(160,112), "S20674C2");
    check_base_class_offset(lv, (S20674C4*), ABISELECT(160,112), "S20674C2");
    check_field_offset(lv, s20674c2f0, ABISELECT(8,4), "S20674C2.s20674c2f0");
    check_field_offset(lv, s20674c2f1, ABISELECT(16,12), "S20674C2.s20674c2f1");
    check_field_offset(lv, s20674c2f2, ABISELECT(24,16), "S20674C2.s20674c2f2");
    check_field_offset(lv, s20674c2f3, ABISELECT(32,20), "S20674C2.s20674c2f3");
    check_field_offset(lv, s20674c2f4, ABISELECT(40,24), "S20674C2.s20674c2f4");
    check_field_offset(lv, s20674c2f5, ABISELECT(88,64), "S20674C2.s20674c2f5");
    check_field_offset(lv, s20674c2f6, ABISELECT(96,68), "S20674C2.s20674c2f6");
    test_class_info(&lv, &cd_S20674C2);
    dp->~S20674C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20674C2(Test_S20674C2, "S20674C2", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN8S20674C2C1Ev();
extern void _ZN8S20674C2D1Ev();
Name_Map name_map_S20674C2[] = {
  NSPAIR(_ZN8S20674C2C1Ev),
  NSPAIR(_ZN8S20674C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20674C5;
extern VTBL_ENTRY _ZTI8S20674C5[];
extern  VTBL_ENTRY _ZTV8S20674C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C5[];
extern Class_Descriptor cd_S20674C4;
extern VTBL_ENTRY _ZTI8S20674C4[];
extern  VTBL_ENTRY _ZTV8S20674C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C4[];
static Base_Class bases_S20674C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20674C5,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20674C4,    ABISELECT(160,112), //bcp->offset
    7, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20674C2[];
extern void _ZN8S20674C22v4Ev();
extern void _ZN8S20674C22v5Ev();
extern void _ZN8S20674C22v6Ev();
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY vtc_S20674C2[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C2[0]),
  (VTBL_ENTRY)&_ZN8S20674C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v6Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20674C2[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20674C2[];
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20674C4__8S20674C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C4[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20674C58S20674C4__8S20674C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C5[0]),
};
static  VTT_ENTRY vtt_S20674C2[] = {
  {&(_ZTV8S20674C2[4]),  4,16},
  {&(_ZTV8S20674C2[13]),  13,16},
  {&(_tg__ZTV8S20674C4__8S20674C2[3]),  3,6},
  {&(_tg__ZTV8S20674C58S20674C4__8S20674C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20674C2[];
extern  VTBL_ENTRY _ZTV8S20674C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C2[];
Class_Descriptor cd_S20674C2 = {  "S20674C2", // class name
  bases_S20674C2, 3,
  &(vtc_S20674C2[0]), // expected_vtbl_contents
  &(vtt_S20674C2[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI8S20674C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20674C2),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20674C2),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  S20674C11  : S20677C3 {
  ::S20677C3 s20674c11f0;
  int s20674c11f1;
  long double s20674c11f2;
  int s20674c11f3;
  __tsi64 s20674c11f4;
  long s20674c11f5;
};
//SIG(-1 S20674C11) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S20674C11()
{
  extern Class_Descriptor cd_S20674C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S20674C11, buf);
    S20674C11 &lv = *(new (buf) S20674C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S20674C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20674C11)");
    check_base_class_offset(lv, (S20677C3*), 0, "S20674C11");
    check_field_offset(lv, s20674c11f0, ABISELECT(48,40), "S20674C11.s20674c11f0");
    check_field_offset(lv, s20674c11f1, ABISELECT(96,80), "S20674C11.s20674c11f1");
    check_field_offset(lv, s20674c11f2, ABISELECT(112,84), "S20674C11.s20674c11f2");
    check_field_offset(lv, s20674c11f3, ABISELECT(128,96), "S20674C11.s20674c11f3");
    check_field_offset(lv, s20674c11f4, ABISELECT(136,100), "S20674C11.s20674c11f4");
    check_field_offset(lv, s20674c11f5, ABISELECT(144,108), "S20674C11.s20674c11f5");
    test_class_info(&lv, &cd_S20674C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20674C11(Test_S20674C11, "S20674C11", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S20674C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20674C11[];
Class_Descriptor cd_S20674C11 = {  "S20674C11", // class name
  bases_S20674C11, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI9S20674C11),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20674C9  {
  ::S20677C6_nt s20674c9f0;
  ::S20674C5 s20674c9f1;
  ::S20677C6_nt s20674c9f2;
  __tsi64 s20674c9f3;
  ::S20677C6_nt s20674c9f4;
  void *s20674c9f5;
  ::S20677C6_nt s20674c9f6;
  void *s20674c9f7[2];
  ::S20677C6_nt s20674c9f8;
  virtual void  v11(); // _ZN8S20674C93v11Ev
  ~S20674C9(); // tgen
  S20674C9(); // tgen
};
//SIG(-1 S20674C9) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S20674C9 ::v11(){vfunc_called(this, "_ZN8S20674C93v11Ev");}
S20674C9 ::~S20674C9(){ note_dtor("S20674C9", this);} // tgen
S20674C9 ::S20674C9(){ note_ctor("S20674C9", this);} // tgen

static void Test_S20674C9()
{
  extern Class_Descriptor cd_S20674C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S20674C9, buf);
    S20674C9 *dp, &lv = *(dp=new (buf) S20674C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S20674C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20674C9)");
    check_field_offset(lv, s20674c9f0, ABISELECT(8,4), "S20674C9.s20674c9f0");
    check_field_offset(lv, s20674c9f1, ABISELECT(16,8), "S20674C9.s20674c9f1");
    check_field_offset(lv, s20674c9f2, ABISELECT(208,148), "S20674C9.s20674c9f2");
    check_field_offset(lv, s20674c9f3, ABISELECT(216,152), "S20674C9.s20674c9f3");
    check_field_offset(lv, s20674c9f4, ABISELECT(224,160), "S20674C9.s20674c9f4");
    check_field_offset(lv, s20674c9f5, ABISELECT(232,164), "S20674C9.s20674c9f5");
    check_field_offset(lv, s20674c9f6, ABISELECT(240,168), "S20674C9.s20674c9f6");
    check_field_offset(lv, s20674c9f7, ABISELECT(248,172), "S20674C9.s20674c9f7");
    check_field_offset(lv, s20674c9f8, ABISELECT(264,180), "S20674C9.s20674c9f8");
    test_class_info(&lv, &cd_S20674C9);
    dp->~S20674C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20674C9(Test_S20674C9, "S20674C9", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN8S20674C9C1Ev();
extern void _ZN8S20674C9D1Ev();
Name_Map name_map_S20674C9[] = {
  NSPAIR(_ZN8S20674C9C1Ev),
  NSPAIR(_ZN8S20674C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20674C9[];
extern void _ZN8S20674C93v11Ev();
static  VTBL_ENTRY vtc_S20674C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C9[0]),
  (VTBL_ENTRY)&_ZN8S20674C93v11Ev,
};
extern VTBL_ENTRY _ZTI8S20674C9[];
extern  VTBL_ENTRY _ZTV8S20674C9[];
Class_Descriptor cd_S20674C9 = {  "S20674C9", // class name
  0,0,//no base classes
  &(vtc_S20674C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI8S20674C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20674C9),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20674C10  : virtual S20674C2 , S20674C11 , S20674C9 {
  ::S20674C9 s20674c10f0;
  __tsi64 s20674c10f1:3;
  ::S20680C5 s20674c10f2[2];
  int s20674c10f3;
  long double s20674c10f4;
  __tsi64 s20674c10f5;
  long double s20674c10f6;
  virtual  ~S20674C10(); // _ZN9S20674C10D2Ev
  virtual void  v12(); // _ZN9S20674C103v12Ev
  S20674C10(); // tgen
};
//SIG(-1 S20674C10) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v5 v6 v7 FL FC6{} Fp Fc[2] FC3 Fl FC6} BC7{ BC3 FC3 Fi FD Fi FL Fl} BC8{ v8 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} vd v1 FC8 FL:3 FC9{ BC10{ VBC3 BC11{ VBC3 FD Fi FC3 FC3} v10 v11 v12 Fs FL Fc Fi[2] FC11 Fp FL Fi FL Fi} VBC12{ VBC3 VBC11 v13 v14 Fi FC11 FL Fi Fp} BC11 VBC13{ v15 FC6 FC11 FC6 FL FC6 Fp FC6 Fp[2] FC6} VBC14{ BC11 v16 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v9 Fl FL FD FC6}[2] Fi FD FL FD}


 S20674C10 ::~S20674C10(){ note_dtor("S20674C10", this);}
void  S20674C10 ::v12(){vfunc_called(this, "_ZN9S20674C103v12Ev");}
S20674C10 ::S20674C10(){ note_ctor("S20674C10", this);} // tgen

static void Test_S20674C10()
{
  extern Class_Descriptor cd_S20674C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(272,754)];
    init_test(&cd_S20674C10, buf);
    S20674C10 *dp, &lv = *(dp=new (buf) S20674C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4336,3012), "sizeof(S20674C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20674C10)");
    check_base_class_offset(lv, (S20677C3*)(S20674C2*), ABISELECT(3864,2680), "S20674C10");
    check_base_class_offset(lv, (S20677C3*)(S20674C4*), ABISELECT(3864,2680), "S20674C10");
    check_base_class_offset(lv, (S20677C3*)(S20674C5*)(S20674C4*), ABISELECT(3864,2680), "S20674C10");
    check_base_class_offset(lv, (S20674C5*)(S20674C4*), ABISELECT(3920,2720), "S20674C10");
    check_base_class_offset(lv, (S20674C4*)(S20674C2*), ABISELECT(3920,2720), "S20674C10");
    check_base_class_offset(lv, (S20674C2*), ABISELECT(3760,2608), "S20674C10");
    check_base_class_offset(lv, (S20677C3*)(S20674C11*), ABISELECT(272,184), "S20674C10");
    check_base_class_offset(lv, (S20674C11*), ABISELECT(272,184), "S20674C10");
    check_base_class_offset(lv, (S20674C9*), 0, "S20674C10");
    check_field_offset(lv, s20674c10f0, ABISELECT(432,296), "S20674C10.s20674c10f0");
    set_bf_and_test(lv, s20674c10f1, ABISELECT(704,480), 0, 3, 1, "S20674C10");
    set_bf_and_test(lv, s20674c10f1, ABISELECT(704,480), 0, 3, hide_sll(1LL<<2), "S20674C10");
    check_field_offset(lv, s20674c10f2, ABISELECT(720,484), "S20674C10.s20674c10f2");
    check_field_offset(lv, s20674c10f3, ABISELECT(3696,2572), "S20674C10.s20674c10f3");
    check_field_offset(lv, s20674c10f4, ABISELECT(3712,2576), "S20674C10.s20674c10f4");
    check_field_offset(lv, s20674c10f5, ABISELECT(3728,2588), "S20674C10.s20674c10f5");
    check_field_offset(lv, s20674c10f6, ABISELECT(3744,2596), "S20674C10.s20674c10f6");
    test_class_info(&lv, &cd_S20674C10);
    dp->~S20674C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20674C10(Test_S20674C10, "S20674C10", ABISELECT(4336,3012));

#else // __cplusplus

extern void _ZN9S20674C10C1Ev();
extern void _ZN9S20674C10D2Ev();
Name_Map name_map_S20674C10[] = {
  NSPAIR(_ZN9S20674C10C1Ev),
  NSPAIR(_ZN9S20674C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20674C5;
extern VTBL_ENTRY _ZTI8S20674C5[];
extern  VTBL_ENTRY _ZTV8S20674C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C5[];
extern Class_Descriptor cd_S20674C4;
extern VTBL_ENTRY _ZTI8S20674C4[];
extern  VTBL_ENTRY _ZTV8S20674C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C4[];
extern Class_Descriptor cd_S20674C2;
extern VTBL_ENTRY _ZTI8S20674C2[];
extern  VTBL_ENTRY _ZTV8S20674C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C2[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20674C11;
extern VTBL_ENTRY _ZTI9S20674C11[];
extern Class_Descriptor cd_S20674C9;
extern VTBL_ENTRY _ZTI8S20674C9[];
extern  VTBL_ENTRY _ZTV8S20674C9[];
static Base_Class bases_S20674C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(3864,2680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20674C5,    ABISELECT(3920,2720), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20674C4,    ABISELECT(3920,2720), //bcp->offset
    19, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20674C2,    ABISELECT(3760,2608), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(272,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20674C11,    ABISELECT(272,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20674C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S20674C10[];
extern void _ZN8S20674C93v11Ev();
extern void _ZN9S20674C10D1Ev();
extern void _ZN9S20674C10D0Ev();
extern void _ZN9S20674C103v12Ev();
extern void _ZN8S20674C22v4Ev();
extern void _ZN8S20674C22v5Ev();
extern void _ZN8S20674C22v6Ev();
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY vtc_S20674C10[] = {
  ABISELECT(3920,2720),
  ABISELECT(3864,2680),
  ABISELECT(3760,2608),
  0,
  (VTBL_ENTRY)&(_ZTI9S20674C10[0]),
  (VTBL_ENTRY)&_ZN8S20674C93v11Ev,
  (VTBL_ENTRY)&_ZN9S20674C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20674C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20674C103v12Ev,
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-3760,-2608),
  (VTBL_ENTRY)&(_ZTI9S20674C10[0]),
  (VTBL_ENTRY)&_ZN8S20674C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v6Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3920,-2720),
  (VTBL_ENTRY)&(_ZTI9S20674C10[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
extern VTBL_ENTRY _ZTV9S20674C10[];
extern void _ZN8S20674C22v4Ev();
extern void _ZN8S20674C22v5Ev();
extern void _ZN8S20674C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20674C2__9S20674C10[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C2[0]),
  (VTBL_ENTRY)&_ZN8S20674C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v6Ev,
};
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20674C4__8S20674C2__9S20674C10[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20674C2[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20674C4__9S20674C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C4[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20674C58S20674C4__9S20674C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C5[0]),
};
static  VTT_ENTRY vtt_S20674C10[] = {
  {&(_ZTV9S20674C10[5]),  5,28},
  {&(_ZTV9S20674C10[16]),  16,28},
  {&(_ZTV9S20674C10[25]),  25,28},
  {&(_tg__ZTV8S20674C2__9S20674C10[4]),  4,7},
  {&(_tg__ZTV8S20674C4__8S20674C2__9S20674C10[6]),  6,9},
  {&(_tg__ZTV8S20674C4__9S20674C10[3]),  3,6},
  {&(_tg__ZTV8S20674C58S20674C4__9S20674C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20674C10[];
extern  VTBL_ENTRY _ZTV9S20674C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20674C10[];
Class_Descriptor cd_S20674C10 = {  "S20674C10", // class name
  bases_S20674C10, 7,
  &(vtc_S20674C10[0]), // expected_vtbl_contents
  &(vtt_S20674C10[0]), // expected_vtt_contents
  ABISELECT(4336,3012), // object size
  NSPAIRA(_ZTI9S20674C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20674C10),28, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20674C10),7, //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  S20674C1  : virtual S20674C2 {
  int s20674c1f0;
  ::S20678C11 s20674c1f1;
  int s20674c1f2[3];
  ::S20677C6_nt s20674c1f3;
  ::S20674C10 s20674c1f4;
  ::S20677C6_nt s20674c1f5;
  void *s20674c1f6;
  ~S20674C1(); // tgen
  S20674C1(); // tgen
};
//SIG(1 S20674C1) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v1 v2 v3 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v4 v5 v6 FL FC6{} Fp Fc[2] FC3 Fl FC6} Fi FC7{ VBC8{ VBC3 BC9{ VBC3 FD Fi FC3 FC3} v9 v10 v11 Fs FL Fc Fi[2] FC9 Fp FL Fi FL Fi} VBC10{ VBC3 VBC8 v12 v13 v14 FL FC6 Fp Fc[2] FC3 Fl FC6} VBC11{ VBC3 VBC9 v15 v16 Fi FC9 FL Fi Fp} v7 v8 FC6 FC6 Fi FC9 FC6 FC6 FC12{ v17 FC6 FC9 FC6 FL FC6 Fp FC6 Fp[2] FC6} FC10 Fp FC6} Fi[3] FC6 FC13{ VBC2 BC14{ BC3 FC3 Fi FD Fi FL Fl} BC15{ v19 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} vd v18 FC15 FL:3 FC16{ BC17{ VBC3 BC18{ VBC3 FD Fi FC3 FC3} v21 v22 v23 Fs FL Fc Fi[2] FC18 Fp FL Fi FL Fi} VBC19{ VBC3 VBC18 v24 v25 Fi FC18 FL Fi Fp} BC18 VBC20{ v26 FC6 FC18 FC6 FL FC6 Fp FC6 Fp[2] FC6} VBC21{ BC18 v27 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v20 Fl FL FD FC6}[2] Fi FD FL FD} FC6 Fp}


S20674C1 ::~S20674C1(){ note_dtor("S20674C1", this);} // tgen
S20674C1 ::S20674C1(){ note_ctor("S20674C1", this);} // tgen

static void Test_S20674C1()
{
  extern Class_Descriptor cd_S20674C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(438,1218)];
    init_test(&cd_S20674C1, buf);
    S20674C1 *dp, &lv = *(dp=new (buf) S20674C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6992,4868), "sizeof(S20674C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20674C1)");
    check_base_class_offset(lv, (S20677C3*)(S20674C2*), ABISELECT(6520,4536), "S20674C1");
    check_base_class_offset(lv, (S20677C3*)(S20674C4*), ABISELECT(6520,4536), "S20674C1");
    check_base_class_offset(lv, (S20677C3*)(S20674C5*)(S20674C4*), ABISELECT(6520,4536), "S20674C1");
    check_base_class_offset(lv, (S20674C5*)(S20674C4*), ABISELECT(6576,4576), "S20674C1");
    check_base_class_offset(lv, (S20674C4*)(S20674C2*), ABISELECT(6576,4576), "S20674C1");
    check_base_class_offset(lv, (S20674C2*), ABISELECT(6416,4464), "S20674C1");
    check_field_offset(lv, s20674c1f0, ABISELECT(8,4), "S20674C1.s20674c1f0");
    check_field_offset(lv, s20674c1f1, ABISELECT(16,8), "S20674C1.s20674c1f1");
    check_field_offset(lv, s20674c1f2, ABISELECT(2048,1428), "S20674C1.s20674c1f2");
    check_field_offset(lv, s20674c1f3, ABISELECT(2060,1440), "S20674C1.s20674c1f3");
    check_field_offset(lv, s20674c1f4, ABISELECT(2064,1444), "S20674C1.s20674c1f4");
    check_field_offset(lv, s20674c1f5, ABISELECT(6400,4456), "S20674C1.s20674c1f5");
    check_field_offset(lv, s20674c1f6, ABISELECT(6408,4460), "S20674C1.s20674c1f6");
    test_class_info(&lv, &cd_S20674C1);
    dp->~S20674C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20674C1(Test_S20674C1, "S20674C1", ABISELECT(6992,4868));

#else // __cplusplus

extern void _ZN8S20674C1C1Ev();
extern void _ZN8S20674C1D1Ev();
Name_Map name_map_S20674C1[] = {
  NSPAIR(_ZN8S20674C1C1Ev),
  NSPAIR(_ZN8S20674C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S20674C5;
extern VTBL_ENTRY _ZTI8S20674C5[];
extern  VTBL_ENTRY _ZTV8S20674C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C5[];
extern Class_Descriptor cd_S20674C4;
extern VTBL_ENTRY _ZTI8S20674C4[];
extern  VTBL_ENTRY _ZTV8S20674C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C4[];
extern Class_Descriptor cd_S20674C2;
extern VTBL_ENTRY _ZTI8S20674C2[];
extern  VTBL_ENTRY _ZTV8S20674C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C2[];
static Base_Class bases_S20674C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(6520,4536), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20674C5,    ABISELECT(6576,4576), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20674C4,    ABISELECT(6576,4576), //bcp->offset
    15, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20674C2,    ABISELECT(6416,4464), //bcp->offset
    5, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20674C1[];
extern void _ZN8S20674C22v4Ev();
extern void _ZN8S20674C22v5Ev();
extern void _ZN8S20674C22v6Ev();
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY vtc_S20674C1[] = {
  ABISELECT(6576,4576),
  ABISELECT(6520,4536),
  ABISELECT(6416,4464),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C1[0]),
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-6416,-4464),
  (VTBL_ENTRY)&(_ZTI8S20674C1[0]),
  (VTBL_ENTRY)&_ZN8S20674C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v6Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-6576,-4576),
  (VTBL_ENTRY)&(_ZTI8S20674C1[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
extern VTBL_ENTRY _ZTV8S20674C1[];
extern void _ZN8S20674C22v4Ev();
extern void _ZN8S20674C22v5Ev();
extern void _ZN8S20674C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20674C2__8S20674C1[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C2[0]),
  (VTBL_ENTRY)&_ZN8S20674C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20674C22v6Ev,
};
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20674C4__8S20674C2__8S20674C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S20674C2[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
extern void _ZN8S20674C42v1Ev();
extern void _ZN8S20674C42v2Ev();
extern void _ZN8S20674C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20674C4__8S20674C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C4[0]),
  (VTBL_ENTRY)&_ZN8S20674C42v1Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20674C42v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20674C58S20674C4__8S20674C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20674C5[0]),
};
static  VTT_ENTRY vtt_S20674C1[] = {
  {&(_ZTV8S20674C1[5]),  5,24},
  {&(_ZTV8S20674C1[12]),  12,24},
  {&(_ZTV8S20674C1[21]),  21,24},
  {&(_tg__ZTV8S20674C2__8S20674C1[4]),  4,7},
  {&(_tg__ZTV8S20674C4__8S20674C2__8S20674C1[6]),  6,9},
  {&(_tg__ZTV8S20674C4__8S20674C1[3]),  3,6},
  {&(_tg__ZTV8S20674C58S20674C4__8S20674C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20674C1[];
extern  VTBL_ENTRY _ZTV8S20674C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20674C1[];
Class_Descriptor cd_S20674C1 = {  "S20674C1", // class name
  bases_S20674C1, 4,
  &(vtc_S20674C1[0]), // expected_vtbl_contents
  &(vtt_S20674C1[0]), // expected_vtt_contents
  ABISELECT(6992,4868), // object size
  NSPAIRA(_ZTI8S20674C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20674C1),24, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20674C1),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3294C3  {
  int s3294c3f0;
  __tsi64 s3294c3f1;
  void *s3294c3f2[4];
  int s3294c3f3[2];
  void *s3294c3f4;
  ::S1503C5_nt s3294c3f5;
  void *s3294c3f6[2];
  virtual  ~S3294C3(); // _ZN7S3294C3D1Ev
  virtual void  v5(); // _ZN7S3294C32v5Ev
  virtual void  v6(); // _ZN7S3294C32v6Ev
  virtual void  v7(); // _ZN7S3294C32v7Ev
  virtual void  v8(); // _ZN7S3294C32v8Ev
  virtual void  v9(); // _ZN7S3294C32v9Ev
  virtual void  v10(); // _ZN7S3294C33v10Ev
  virtual void  v11(); // _ZN7S3294C33v11Ev
  virtual void  v12(); // _ZN7S3294C33v12Ev
  virtual void  v13(); // _ZN7S3294C33v13Ev
  virtual void  v14(); // _ZN7S3294C33v14Ev
  virtual void  v15(); // _ZN7S3294C33v15Ev
  virtual void  v16(); // _ZN7S3294C33v16Ev
  virtual void  v17(); // _ZN7S3294C33v17Ev
  virtual void  v18(); // _ZN7S3294C33v18Ev
  virtual void  v19(); // _ZN7S3294C33v19Ev
  virtual void  v20(); // _ZN7S3294C33v20Ev
  virtual void  v21(); // _ZN7S3294C33v21Ev
  virtual void  v22(); // _ZN7S3294C33v22Ev
  virtual void  v23(); // _ZN7S3294C33v23Ev
  virtual void  v24(); // _ZN7S3294C33v24Ev
  virtual void  v25(); // _ZN7S3294C33v25Ev
  virtual void  v26(); // _ZN7S3294C33v26Ev
  virtual void  v27(); // _ZN7S3294C33v27Ev
  virtual void  v28(); // _ZN7S3294C33v28Ev
  virtual void  v29(); // _ZN7S3294C33v29Ev
  virtual void  v30(); // _ZN7S3294C33v30Ev
  virtual void  v31(); // _ZN7S3294C33v31Ev
  virtual void  v32(); // _ZN7S3294C33v32Ev
  virtual void  v33(); // _ZN7S3294C33v33Ev
  virtual void  v34(); // _ZN7S3294C33v34Ev
  virtual void  v35(); // _ZN7S3294C33v35Ev
  virtual void  v36(); // _ZN7S3294C33v36Ev
  virtual void  v37(); // _ZN7S3294C33v37Ev
  virtual void  v38(); // _ZN7S3294C33v38Ev
  virtual void  v39(); // _ZN7S3294C33v39Ev
  virtual void  v40(); // _ZN7S3294C33v40Ev
  virtual void  v41(); // _ZN7S3294C33v41Ev
  virtual void  v42(); // _ZN7S3294C33v42Ev
  virtual void  v43(); // _ZN7S3294C33v43Ev
  virtual void  v44(); // _ZN7S3294C33v44Ev
  virtual void  v45(); // _ZN7S3294C33v45Ev
  virtual void  v46(); // _ZN7S3294C33v46Ev
  virtual void  v47(); // _ZN7S3294C33v47Ev
  virtual void  v48(); // _ZN7S3294C33v48Ev
  virtual void  v49(); // _ZN7S3294C33v49Ev
  virtual void  v50(); // _ZN7S3294C33v50Ev
  virtual void  v51(); // _ZN7S3294C33v51Ev
  virtual void  v52(); // _ZN7S3294C33v52Ev
  virtual void  v53(); // _ZN7S3294C33v53Ev
  virtual void  v54(); // _ZN7S3294C33v54Ev
  virtual void  v55(); // _ZN7S3294C33v55Ev
  virtual void  v56(); // _ZN7S3294C33v56Ev
  virtual void  v57(); // _ZN7S3294C33v57Ev
  virtual void  v58(); // _ZN7S3294C33v58Ev
  virtual void  v59(); // _ZN7S3294C33v59Ev
  virtual void  v60(); // _ZN7S3294C33v60Ev
  virtual void  v61(); // _ZN7S3294C33v61Ev
  virtual void  v62(); // _ZN7S3294C33v62Ev
  virtual void  v63(); // _ZN7S3294C33v63Ev
  virtual void  v64(); // _ZN7S3294C33v64Ev
  virtual void  v65(); // _ZN7S3294C33v65Ev
  virtual void  v66(); // _ZN7S3294C33v66Ev
  virtual void  v67(); // _ZN7S3294C33v67Ev
  virtual void  v68(); // _ZN7S3294C33v68Ev
  S3294C3(); // tgen
};
//SIG(-1 S3294C3) 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]}


 S3294C3 ::~S3294C3(){ note_dtor("S3294C3", this);}
void  S3294C3 ::v5(){vfunc_called(this, "_ZN7S3294C32v5Ev");}
void  S3294C3 ::v6(){vfunc_called(this, "_ZN7S3294C32v6Ev");}
void  S3294C3 ::v7(){vfunc_called(this, "_ZN7S3294C32v7Ev");}
void  S3294C3 ::v8(){vfunc_called(this, "_ZN7S3294C32v8Ev");}
void  S3294C3 ::v9(){vfunc_called(this, "_ZN7S3294C32v9Ev");}
void  S3294C3 ::v10(){vfunc_called(this, "_ZN7S3294C33v10Ev");}
void  S3294C3 ::v11(){vfunc_called(this, "_ZN7S3294C33v11Ev");}
void  S3294C3 ::v12(){vfunc_called(this, "_ZN7S3294C33v12Ev");}
void  S3294C3 ::v13(){vfunc_called(this, "_ZN7S3294C33v13Ev");}
void  S3294C3 ::v14(){vfunc_called(this, "_ZN7S3294C33v14Ev");}
void  S3294C3 ::v15(){vfunc_called(this, "_ZN7S3294C33v15Ev");}
void  S3294C3 ::v16(){vfunc_called(this, "_ZN7S3294C33v16Ev");}
void  S3294C3 ::v17(){vfunc_called(this, "_ZN7S3294C33v17Ev");}
void  S3294C3 ::v18(){vfunc_called(this, "_ZN7S3294C33v18Ev");}
void  S3294C3 ::v19(){vfunc_called(this, "_ZN7S3294C33v19Ev");}
void  S3294C3 ::v20(){vfunc_called(this, "_ZN7S3294C33v20Ev");}
void  S3294C3 ::v21(){vfunc_called(this, "_ZN7S3294C33v21Ev");}
void  S3294C3 ::v22(){vfunc_called(this, "_ZN7S3294C33v22Ev");}
void  S3294C3 ::v23(){vfunc_called(this, "_ZN7S3294C33v23Ev");}
void  S3294C3 ::v24(){vfunc_called(this, "_ZN7S3294C33v24Ev");}
void  S3294C3 ::v25(){vfunc_called(this, "_ZN7S3294C33v25Ev");}
void  S3294C3 ::v26(){vfunc_called(this, "_ZN7S3294C33v26Ev");}
void  S3294C3 ::v27(){vfunc_called(this, "_ZN7S3294C33v27Ev");}
void  S3294C3 ::v28(){vfunc_called(this, "_ZN7S3294C33v28Ev");}
void  S3294C3 ::v29(){vfunc_called(this, "_ZN7S3294C33v29Ev");}
void  S3294C3 ::v30(){vfunc_called(this, "_ZN7S3294C33v30Ev");}
void  S3294C3 ::v31(){vfunc_called(this, "_ZN7S3294C33v31Ev");}
void  S3294C3 ::v32(){vfunc_called(this, "_ZN7S3294C33v32Ev");}
void  S3294C3 ::v33(){vfunc_called(this, "_ZN7S3294C33v33Ev");}
void  S3294C3 ::v34(){vfunc_called(this, "_ZN7S3294C33v34Ev");}
void  S3294C3 ::v35(){vfunc_called(this, "_ZN7S3294C33v35Ev");}
void  S3294C3 ::v36(){vfunc_called(this, "_ZN7S3294C33v36Ev");}
void  S3294C3 ::v37(){vfunc_called(this, "_ZN7S3294C33v37Ev");}
void  S3294C3 ::v38(){vfunc_called(this, "_ZN7S3294C33v38Ev");}
void  S3294C3 ::v39(){vfunc_called(this, "_ZN7S3294C33v39Ev");}
void  S3294C3 ::v40(){vfunc_called(this, "_ZN7S3294C33v40Ev");}
void  S3294C3 ::v41(){vfunc_called(this, "_ZN7S3294C33v41Ev");}
void  S3294C3 ::v42(){vfunc_called(this, "_ZN7S3294C33v42Ev");}
void  S3294C3 ::v43(){vfunc_called(this, "_ZN7S3294C33v43Ev");}
void  S3294C3 ::v44(){vfunc_called(this, "_ZN7S3294C33v44Ev");}
void  S3294C3 ::v45(){vfunc_called(this, "_ZN7S3294C33v45Ev");}
void  S3294C3 ::v46(){vfunc_called(this, "_ZN7S3294C33v46Ev");}
void  S3294C3 ::v47(){vfunc_called(this, "_ZN7S3294C33v47Ev");}
void  S3294C3 ::v48(){vfunc_called(this, "_ZN7S3294C33v48Ev");}
void  S3294C3 ::v49(){vfunc_called(this, "_ZN7S3294C33v49Ev");}
void  S3294C3 ::v50(){vfunc_called(this, "_ZN7S3294C33v50Ev");}
void  S3294C3 ::v51(){vfunc_called(this, "_ZN7S3294C33v51Ev");}
void  S3294C3 ::v52(){vfunc_called(this, "_ZN7S3294C33v52Ev");}
void  S3294C3 ::v53(){vfunc_called(this, "_ZN7S3294C33v53Ev");}
void  S3294C3 ::v54(){vfunc_called(this, "_ZN7S3294C33v54Ev");}
void  S3294C3 ::v55(){vfunc_called(this, "_ZN7S3294C33v55Ev");}
void  S3294C3 ::v56(){vfunc_called(this, "_ZN7S3294C33v56Ev");}
void  S3294C3 ::v57(){vfunc_called(this, "_ZN7S3294C33v57Ev");}
void  S3294C3 ::v58(){vfunc_called(this, "_ZN7S3294C33v58Ev");}
void  S3294C3 ::v59(){vfunc_called(this, "_ZN7S3294C33v59Ev");}
void  S3294C3 ::v60(){vfunc_called(this, "_ZN7S3294C33v60Ev");}
void  S3294C3 ::v61(){vfunc_called(this, "_ZN7S3294C33v61Ev");}
void  S3294C3 ::v62(){vfunc_called(this, "_ZN7S3294C33v62Ev");}
void  S3294C3 ::v63(){vfunc_called(this, "_ZN7S3294C33v63Ev");}
void  S3294C3 ::v64(){vfunc_called(this, "_ZN7S3294C33v64Ev");}
void  S3294C3 ::v65(){vfunc_called(this, "_ZN7S3294C33v65Ev");}
void  S3294C3 ::v66(){vfunc_called(this, "_ZN7S3294C33v66Ev");}
void  S3294C3 ::v67(){vfunc_called(this, "_ZN7S3294C33v67Ev");}
void  S3294C3 ::v68(){vfunc_called(this, "_ZN7S3294C33v68Ev");}
S3294C3 ::S3294C3(){ note_ctor("S3294C3", this);} // tgen

static void Test_S3294C3()
{
  extern Class_Descriptor cd_S3294C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3294C3, buf);
    S3294C3 *dp, &lv = *(dp=new (buf) S3294C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3294C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3294C3)");
    check_field_offset(lv, s3294c3f0, ABISELECT(8,4), "S3294C3.s3294c3f0");
    check_field_offset(lv, s3294c3f1, ABISELECT(16,8), "S3294C3.s3294c3f1");
    check_field_offset(lv, s3294c3f2, ABISELECT(24,16), "S3294C3.s3294c3f2");
    check_field_offset(lv, s3294c3f3, ABISELECT(56,32), "S3294C3.s3294c3f3");
    check_field_offset(lv, s3294c3f4, ABISELECT(64,40), "S3294C3.s3294c3f4");
    check_field_offset(lv, s3294c3f5, ABISELECT(72,44), "S3294C3.s3294c3f5");
    check_field_offset(lv, s3294c3f6, ABISELECT(80,52), "S3294C3.s3294c3f6");
    test_class_info(&lv, &cd_S3294C3);
    dp->~S3294C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3294C3(Test_S3294C3, "S3294C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3294C3C1Ev();
extern void _ZN7S3294C3D1Ev();
Name_Map name_map_S3294C3[] = {
  NSPAIR(_ZN7S3294C3C1Ev),
  NSPAIR(_ZN7S3294C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3294C3[];
extern void _ZN7S3294C3D1Ev();
extern void _ZN7S3294C3D0Ev();
extern void _ZN7S3294C32v5Ev();
extern void _ZN7S3294C32v6Ev();
extern void _ZN7S3294C32v7Ev();
extern void _ZN7S3294C32v8Ev();
extern void _ZN7S3294C32v9Ev();
extern void _ZN7S3294C33v10Ev();
extern void _ZN7S3294C33v11Ev();
extern void _ZN7S3294C33v12Ev();
extern void _ZN7S3294C33v13Ev();
extern void _ZN7S3294C33v14Ev();
extern void _ZN7S3294C33v15Ev();
extern void _ZN7S3294C33v16Ev();
extern void _ZN7S3294C33v17Ev();
extern void _ZN7S3294C33v18Ev();
extern void _ZN7S3294C33v19Ev();
extern void _ZN7S3294C33v20Ev();
extern void _ZN7S3294C33v21Ev();
extern void _ZN7S3294C33v22Ev();
extern void _ZN7S3294C33v23Ev();
extern void _ZN7S3294C33v24Ev();
extern void _ZN7S3294C33v25Ev();
extern void _ZN7S3294C33v26Ev();
extern void _ZN7S3294C33v27Ev();
extern void _ZN7S3294C33v28Ev();
extern void _ZN7S3294C33v29Ev();
extern void _ZN7S3294C33v30Ev();
extern void _ZN7S3294C33v31Ev();
extern void _ZN7S3294C33v32Ev();
extern void _ZN7S3294C33v33Ev();
extern void _ZN7S3294C33v34Ev();
extern void _ZN7S3294C33v35Ev();
extern void _ZN7S3294C33v36Ev();
extern void _ZN7S3294C33v37Ev();
extern void _ZN7S3294C33v38Ev();
extern void _ZN7S3294C33v39Ev();
extern void _ZN7S3294C33v40Ev();
extern void _ZN7S3294C33v41Ev();
extern void _ZN7S3294C33v42Ev();
extern void _ZN7S3294C33v43Ev();
extern void _ZN7S3294C33v44Ev();
extern void _ZN7S3294C33v45Ev();
extern void _ZN7S3294C33v46Ev();
extern void _ZN7S3294C33v47Ev();
extern void _ZN7S3294C33v48Ev();
extern void _ZN7S3294C33v49Ev();
extern void _ZN7S3294C33v50Ev();
extern void _ZN7S3294C33v51Ev();
extern void _ZN7S3294C33v52Ev();
extern void _ZN7S3294C33v53Ev();
extern void _ZN7S3294C33v54Ev();
extern void _ZN7S3294C33v55Ev();
extern void _ZN7S3294C33v56Ev();
extern void _ZN7S3294C33v57Ev();
extern void _ZN7S3294C33v58Ev();
extern void _ZN7S3294C33v59Ev();
extern void _ZN7S3294C33v60Ev();
extern void _ZN7S3294C33v61Ev();
extern void _ZN7S3294C33v62Ev();
extern void _ZN7S3294C33v63Ev();
extern void _ZN7S3294C33v64Ev();
extern void _ZN7S3294C33v65Ev();
extern void _ZN7S3294C33v66Ev();
extern void _ZN7S3294C33v67Ev();
extern void _ZN7S3294C33v68Ev();
static  VTBL_ENTRY vtc_S3294C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3294C3[0]),
  (VTBL_ENTRY)&_ZN7S3294C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3294C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v68Ev,
};
extern VTBL_ENTRY _ZTI7S3294C3[];
extern  VTBL_ENTRY _ZTV7S3294C3[];
Class_Descriptor cd_S3294C3 = {  "S3294C3", // class name
  0,0,//no base classes
  &(vtc_S3294C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3294C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3294C3),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  S3294C2_nt  : S3294C3 {
  int s3294c2f0[2];
  unsigned int s3294c2f1:1;
  unsigned int s3294c2f2:1;
  void *s3294c2f3;
  ::S210C8_nt s3294c2f4;
  virtual  ~S3294C2_nt(); // _ZN10S3294C2_ntD1Ev
  virtual void  v69(); // _ZN10S3294C2_nt3v69Ev
  virtual void  v70(); // _ZN10S3294C2_nt3v70Ev
  virtual void  v71(); // _ZN10S3294C2_nt3v71Ev
  virtual void  v72(); // _ZN10S3294C2_nt3v72Ev
  virtual void  v73(); // _ZN10S3294C2_nt3v73Ev
  virtual void  v74(); // _ZN10S3294C2_nt3v74Ev
  virtual void  v75(); // _ZN10S3294C2_nt3v75Ev
  virtual void  v76(); // _ZN10S3294C2_nt3v76Ev
  virtual void  v77(); // _ZN10S3294C2_nt3v77Ev
  virtual void  v78(); // _ZN10S3294C2_nt3v78Ev
  virtual void  v79(); // _ZN10S3294C2_nt3v79Ev
  virtual void  v80(); // _ZN10S3294C2_nt3v80Ev
  virtual void  v81(); // _ZN10S3294C2_nt3v81Ev
  S3294C2_nt(); // tgen
};
//SIG(-1 S3294C2_nt) C1{ BC2{ vd 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 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 Fi[2] Fi:1 Fi:1 Fp FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}}}


 S3294C2_nt ::~S3294C2_nt(){ note_dtor("S3294C2_nt", this);}
void  S3294C2_nt ::v69(){vfunc_called(this, "_ZN10S3294C2_nt3v69Ev");}
void  S3294C2_nt ::v70(){vfunc_called(this, "_ZN10S3294C2_nt3v70Ev");}
void  S3294C2_nt ::v71(){vfunc_called(this, "_ZN10S3294C2_nt3v71Ev");}
void  S3294C2_nt ::v72(){vfunc_called(this, "_ZN10S3294C2_nt3v72Ev");}
void  S3294C2_nt ::v73(){vfunc_called(this, "_ZN10S3294C2_nt3v73Ev");}
void  S3294C2_nt ::v74(){vfunc_called(this, "_ZN10S3294C2_nt3v74Ev");}
void  S3294C2_nt ::v75(){vfunc_called(this, "_ZN10S3294C2_nt3v75Ev");}
void  S3294C2_nt ::v76(){vfunc_called(this, "_ZN10S3294C2_nt3v76Ev");}
void  S3294C2_nt ::v77(){vfunc_called(this, "_ZN10S3294C2_nt3v77Ev");}
void  S3294C2_nt ::v78(){vfunc_called(this, "_ZN10S3294C2_nt3v78Ev");}
void  S3294C2_nt ::v79(){vfunc_called(this, "_ZN10S3294C2_nt3v79Ev");}
void  S3294C2_nt ::v80(){vfunc_called(this, "_ZN10S3294C2_nt3v80Ev");}
void  S3294C2_nt ::v81(){vfunc_called(this, "_ZN10S3294C2_nt3v81Ev");}
S3294C2_nt ::S3294C2_nt(){ note_ctor("S3294C2_nt", this);} // tgen

//skip512 S3294C2_nt

#else // __cplusplus

extern void _ZN10S3294C2_ntC1Ev();
extern void _ZN10S3294C2_ntD1Ev();
Name_Map name_map_S3294C2_nt[] = {
  NSPAIR(_ZN10S3294C2_ntC1Ev),
  NSPAIR(_ZN10S3294C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3294C3;
extern VTBL_ENTRY _ZTI7S3294C3[];
extern  VTBL_ENTRY _ZTV7S3294C3[];
static Base_Class bases_S3294C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3294C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI10S3294C2_nt[];
extern void _ZN10S3294C2_ntD1Ev();
extern void _ZN10S3294C2_ntD0Ev();
extern void _ZN7S3294C32v5Ev();
extern void _ZN7S3294C32v6Ev();
extern void _ZN7S3294C32v7Ev();
extern void _ZN7S3294C32v8Ev();
extern void _ZN7S3294C32v9Ev();
extern void _ZN7S3294C33v10Ev();
extern void _ZN7S3294C33v11Ev();
extern void _ZN7S3294C33v12Ev();
extern void _ZN7S3294C33v13Ev();
extern void _ZN7S3294C33v14Ev();
extern void _ZN7S3294C33v15Ev();
extern void _ZN7S3294C33v16Ev();
extern void _ZN7S3294C33v17Ev();
extern void _ZN7S3294C33v18Ev();
extern void _ZN7S3294C33v19Ev();
extern void _ZN7S3294C33v20Ev();
extern void _ZN7S3294C33v21Ev();
extern void _ZN7S3294C33v22Ev();
extern void _ZN7S3294C33v23Ev();
extern void _ZN7S3294C33v24Ev();
extern void _ZN7S3294C33v25Ev();
extern void _ZN7S3294C33v26Ev();
extern void _ZN7S3294C33v27Ev();
extern void _ZN7S3294C33v28Ev();
extern void _ZN7S3294C33v29Ev();
extern void _ZN7S3294C33v30Ev();
extern void _ZN7S3294C33v31Ev();
extern void _ZN7S3294C33v32Ev();
extern void _ZN7S3294C33v33Ev();
extern void _ZN7S3294C33v34Ev();
extern void _ZN7S3294C33v35Ev();
extern void _ZN7S3294C33v36Ev();
extern void _ZN7S3294C33v37Ev();
extern void _ZN7S3294C33v38Ev();
extern void _ZN7S3294C33v39Ev();
extern void _ZN7S3294C33v40Ev();
extern void _ZN7S3294C33v41Ev();
extern void _ZN7S3294C33v42Ev();
extern void _ZN7S3294C33v43Ev();
extern void _ZN7S3294C33v44Ev();
extern void _ZN7S3294C33v45Ev();
extern void _ZN7S3294C33v46Ev();
extern void _ZN7S3294C33v47Ev();
extern void _ZN7S3294C33v48Ev();
extern void _ZN7S3294C33v49Ev();
extern void _ZN7S3294C33v50Ev();
extern void _ZN7S3294C33v51Ev();
extern void _ZN7S3294C33v52Ev();
extern void _ZN7S3294C33v53Ev();
extern void _ZN7S3294C33v54Ev();
extern void _ZN7S3294C33v55Ev();
extern void _ZN7S3294C33v56Ev();
extern void _ZN7S3294C33v57Ev();
extern void _ZN7S3294C33v58Ev();
extern void _ZN7S3294C33v59Ev();
extern void _ZN7S3294C33v60Ev();
extern void _ZN7S3294C33v61Ev();
extern void _ZN7S3294C33v62Ev();
extern void _ZN7S3294C33v63Ev();
extern void _ZN7S3294C33v64Ev();
extern void _ZN7S3294C33v65Ev();
extern void _ZN7S3294C33v66Ev();
extern void _ZN7S3294C33v67Ev();
extern void _ZN7S3294C33v68Ev();
extern void _ZN10S3294C2_nt3v69Ev();
extern void _ZN10S3294C2_nt3v70Ev();
extern void _ZN10S3294C2_nt3v71Ev();
extern void _ZN10S3294C2_nt3v72Ev();
extern void _ZN10S3294C2_nt3v73Ev();
extern void _ZN10S3294C2_nt3v74Ev();
extern void _ZN10S3294C2_nt3v75Ev();
extern void _ZN10S3294C2_nt3v76Ev();
extern void _ZN10S3294C2_nt3v77Ev();
extern void _ZN10S3294C2_nt3v78Ev();
extern void _ZN10S3294C2_nt3v79Ev();
extern void _ZN10S3294C2_nt3v80Ev();
extern void _ZN10S3294C2_nt3v81Ev();
static  VTBL_ENTRY vtc_S3294C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3294C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3294C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v68Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v81Ev,
};
extern VTBL_ENTRY _ZTI10S3294C2_nt[];
VTBL_ENTRY *P__ZTI10S3294C2_nt = _ZTI10S3294C2_nt; 
extern  VTBL_ENTRY _ZTV10S3294C2_nt[];
Class_Descriptor cd_S3294C2_nt = {  "S3294C2_nt", // class name
  bases_S3294C2_nt, 1,
  &(vtc_S3294C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI10S3294C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3294C2_nt),81, //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  S3294C1  : S3294C2_nt {
  virtual  ~S3294C1(); // _ZN7S3294C1D1Ev
  virtual void  v1(); // _ZN7S3294C12v1Ev
  virtual void  v2(); // _ZN7S3294C12v2Ev
  virtual void  v3(); // _ZN7S3294C12v3Ev
  virtual void  v4(); // _ZN7S3294C12v4Ev
  S3294C1(); // tgen
};
//SIG(1 S3294C1) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 Fi[2] Fi:1 Fi:1 Fp FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}}} vd v1 v2 v3 v4}


 S3294C1 ::~S3294C1(){ note_dtor("S3294C1", this);}
void  S3294C1 ::v1(){vfunc_called(this, "_ZN7S3294C12v1Ev");}
void  S3294C1 ::v2(){vfunc_called(this, "_ZN7S3294C12v2Ev");}
void  S3294C1 ::v3(){vfunc_called(this, "_ZN7S3294C12v3Ev");}
void  S3294C1 ::v4(){vfunc_called(this, "_ZN7S3294C12v4Ev");}
S3294C1 ::S3294C1(){ note_ctor("S3294C1", this);} // tgen

static void Test_S3294C1()
{
  extern Class_Descriptor cd_S3294C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S3294C1, buf);
    S3294C1 *dp, &lv = *(dp=new (buf) S3294C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S3294C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3294C1)");
    check_base_class_offset(lv, (S3294C3*)(S3294C2_nt*), 0, "S3294C1");
    check_base_class_offset(lv, (S3294C2_nt*), 0, "S3294C1");
    test_class_info(&lv, &cd_S3294C1);
    dp->~S3294C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3294C1(Test_S3294C1, "S3294C1", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN7S3294C1C1Ev();
extern void _ZN7S3294C1D1Ev();
Name_Map name_map_S3294C1[] = {
  NSPAIR(_ZN7S3294C1C1Ev),
  NSPAIR(_ZN7S3294C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3294C3;
extern VTBL_ENTRY _ZTI7S3294C3[];
extern  VTBL_ENTRY _ZTV7S3294C3[];
extern Class_Descriptor cd_S3294C2_nt;
extern VTBL_ENTRY _ZTI10S3294C2_nt[];
extern  VTBL_ENTRY _ZTV10S3294C2_nt[];
static Base_Class bases_S3294C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3294C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3294C2_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 _ZTI7S3294C1[];
extern void _ZN7S3294C1D1Ev();
extern void _ZN7S3294C1D0Ev();
extern void _ZN7S3294C32v5Ev();
extern void _ZN7S3294C32v6Ev();
extern void _ZN7S3294C32v7Ev();
extern void _ZN7S3294C32v8Ev();
extern void _ZN7S3294C32v9Ev();
extern void _ZN7S3294C33v10Ev();
extern void _ZN7S3294C33v11Ev();
extern void _ZN7S3294C33v12Ev();
extern void _ZN7S3294C33v13Ev();
extern void _ZN7S3294C33v14Ev();
extern void _ZN7S3294C33v15Ev();
extern void _ZN7S3294C33v16Ev();
extern void _ZN7S3294C33v17Ev();
extern void _ZN7S3294C33v18Ev();
extern void _ZN7S3294C33v19Ev();
extern void _ZN7S3294C33v20Ev();
extern void _ZN7S3294C33v21Ev();
extern void _ZN7S3294C33v22Ev();
extern void _ZN7S3294C33v23Ev();
extern void _ZN7S3294C33v24Ev();
extern void _ZN7S3294C33v25Ev();
extern void _ZN7S3294C33v26Ev();
extern void _ZN7S3294C33v27Ev();
extern void _ZN7S3294C33v28Ev();
extern void _ZN7S3294C33v29Ev();
extern void _ZN7S3294C33v30Ev();
extern void _ZN7S3294C33v31Ev();
extern void _ZN7S3294C33v32Ev();
extern void _ZN7S3294C33v33Ev();
extern void _ZN7S3294C33v34Ev();
extern void _ZN7S3294C33v35Ev();
extern void _ZN7S3294C33v36Ev();
extern void _ZN7S3294C33v37Ev();
extern void _ZN7S3294C33v38Ev();
extern void _ZN7S3294C33v39Ev();
extern void _ZN7S3294C33v40Ev();
extern void _ZN7S3294C33v41Ev();
extern void _ZN7S3294C33v42Ev();
extern void _ZN7S3294C33v43Ev();
extern void _ZN7S3294C33v44Ev();
extern void _ZN7S3294C33v45Ev();
extern void _ZN7S3294C33v46Ev();
extern void _ZN7S3294C33v47Ev();
extern void _ZN7S3294C33v48Ev();
extern void _ZN7S3294C33v49Ev();
extern void _ZN7S3294C33v50Ev();
extern void _ZN7S3294C33v51Ev();
extern void _ZN7S3294C33v52Ev();
extern void _ZN7S3294C33v53Ev();
extern void _ZN7S3294C33v54Ev();
extern void _ZN7S3294C33v55Ev();
extern void _ZN7S3294C33v56Ev();
extern void _ZN7S3294C33v57Ev();
extern void _ZN7S3294C33v58Ev();
extern void _ZN7S3294C33v59Ev();
extern void _ZN7S3294C33v60Ev();
extern void _ZN7S3294C33v61Ev();
extern void _ZN7S3294C33v62Ev();
extern void _ZN7S3294C33v63Ev();
extern void _ZN7S3294C33v64Ev();
extern void _ZN7S3294C33v65Ev();
extern void _ZN7S3294C33v66Ev();
extern void _ZN7S3294C33v67Ev();
extern void _ZN7S3294C33v68Ev();
extern void _ZN10S3294C2_nt3v69Ev();
extern void _ZN10S3294C2_nt3v70Ev();
extern void _ZN10S3294C2_nt3v71Ev();
extern void _ZN10S3294C2_nt3v72Ev();
extern void _ZN10S3294C2_nt3v73Ev();
extern void _ZN10S3294C2_nt3v74Ev();
extern void _ZN10S3294C2_nt3v75Ev();
extern void _ZN10S3294C2_nt3v76Ev();
extern void _ZN10S3294C2_nt3v77Ev();
extern void _ZN10S3294C2_nt3v78Ev();
extern void _ZN10S3294C2_nt3v79Ev();
extern void _ZN10S3294C2_nt3v80Ev();
extern void _ZN10S3294C2_nt3v81Ev();
extern void _ZN7S3294C12v1Ev();
extern void _ZN7S3294C12v2Ev();
extern void _ZN7S3294C12v3Ev();
extern void _ZN7S3294C12v4Ev();
static  VTBL_ENTRY vtc_S3294C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3294C1[0]),
  (VTBL_ENTRY)&_ZN7S3294C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3294C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3294C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3294C33v68Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3294C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN7S3294C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3294C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3294C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3294C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S3294C1[];
extern  VTBL_ENTRY _ZTV7S3294C1[];
Class_Descriptor cd_S3294C1 = {  "S3294C1", // class name
  bases_S3294C1, 2,
  &(vtc_S3294C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI7S3294C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3294C1),85, //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  S21008C6  : virtual S20677C3 {
  long double s21008c6f0;
  int s21008c6f1;
  ::S20677C3 s21008c6f2;
  ::S20677C3 s21008c6f3;
  ~S21008C6(); // tgen
  S21008C6(); // tgen
};
//SIG(-1 S21008C6) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S21008C6 ::~S21008C6(){ note_dtor("S21008C6", this);} // tgen
S21008C6 ::S21008C6(){ note_ctor("S21008C6", this);} // tgen

static void Test_S21008C6()
{
  extern Class_Descriptor cd_S21008C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S21008C6, buf);
    S21008C6 *dp, &lv = *(dp=new (buf) S21008C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S21008C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21008C6)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S21008C6");
    check_field_offset(lv, s21008c6f0, ABISELECT(16,4), "S21008C6.s21008c6f0");
    check_field_offset(lv, s21008c6f1, ABISELECT(32,16), "S21008C6.s21008c6f1");
    check_field_offset(lv, s21008c6f2, ABISELECT(40,20), "S21008C6.s21008c6f2");
    check_field_offset(lv, s21008c6f3, ABISELECT(88,60), "S21008C6.s21008c6f3");
    test_class_info(&lv, &cd_S21008C6);
    dp->~S21008C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21008C6(Test_S21008C6, "S21008C6", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S21008C6C1Ev();
extern void _ZN8S21008C6D1Ev();
Name_Map name_map_S21008C6[] = {
  NSPAIR(_ZN8S21008C6C1Ev),
  NSPAIR(_ZN8S21008C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S21008C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S21008C6[];
static  VTBL_ENTRY vtc_S21008C6[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C6[0]),
};
extern VTBL_ENTRY _ZTV8S21008C6[];
static  VTT_ENTRY vtt_S21008C6[] = {
  {&(_ZTV8S21008C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21008C6[];
extern  VTBL_ENTRY _ZTV8S21008C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C6[];
Class_Descriptor cd_S21008C6 = {  "S21008C6", // class name
  bases_S21008C6, 1,
  &(vtc_S21008C6[0]), // expected_vtbl_contents
  &(vtt_S21008C6[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S21008C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21008C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21008C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21008C5  : virtual S20677C3 , S21008C6 {
  short s21008c5f0;
  __tsi64 s21008c5f1;
  char s21008c5f2;
  int s21008c5f3[2];
  ::S21008C6 s21008c5f4;
  void *s21008c5f5;
  __tsi64 s21008c5f6;
  int s21008c5f7;
  __tsi64 s21008c5f8;
  int s21008c5f9;
  virtual void  v2(); // _ZN8S21008C52v2Ev
  virtual void  v3(); // _ZN8S21008C52v3Ev
  virtual void  v4(); // _ZN8S21008C52v4Ev
  ~S21008C5(); // tgen
  S21008C5(); // tgen
};
//SIG(-1 S21008C5) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S21008C5 ::v2(){vfunc_called(this, "_ZN8S21008C52v2Ev");}
void  S21008C5 ::v3(){vfunc_called(this, "_ZN8S21008C52v3Ev");}
void  S21008C5 ::v4(){vfunc_called(this, "_ZN8S21008C52v4Ev");}
S21008C5 ::~S21008C5(){ note_dtor("S21008C5", this);} // tgen
S21008C5 ::S21008C5(){ note_ctor("S21008C5", this);} // tgen

static void Test_S21008C5()
{
  extern Class_Descriptor cd_S21008C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S21008C5, buf);
    S21008C5 *dp, &lv = *(dp=new (buf) S21008C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S21008C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21008C5)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S21008C5");
    check_base_class_offset(lv, (S20677C3*)(S21008C6*), ABISELECT(408,292), "S21008C5");
    check_base_class_offset(lv, (S21008C6*), 0, "S21008C5");
    check_field_offset(lv, s21008c5f0, ABISELECT(136,100), "S21008C5.s21008c5f0");
    check_field_offset(lv, s21008c5f1, ABISELECT(144,104), "S21008C5.s21008c5f1");
    check_field_offset(lv, s21008c5f2, ABISELECT(152,112), "S21008C5.s21008c5f2");
    check_field_offset(lv, s21008c5f3, ABISELECT(156,116), "S21008C5.s21008c5f3");
    check_field_offset(lv, s21008c5f4, ABISELECT(176,124), "S21008C5.s21008c5f4");
    check_field_offset(lv, s21008c5f5, ABISELECT(368,264), "S21008C5.s21008c5f5");
    check_field_offset(lv, s21008c5f6, ABISELECT(376,268), "S21008C5.s21008c5f6");
    check_field_offset(lv, s21008c5f7, ABISELECT(384,276), "S21008C5.s21008c5f7");
    check_field_offset(lv, s21008c5f8, ABISELECT(392,280), "S21008C5.s21008c5f8");
    check_field_offset(lv, s21008c5f9, ABISELECT(400,288), "S21008C5.s21008c5f9");
    test_class_info(&lv, &cd_S21008C5);
    dp->~S21008C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21008C5(Test_S21008C5, "S21008C5", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S21008C5C1Ev();
extern void _ZN8S21008C5D1Ev();
Name_Map name_map_S21008C5[] = {
  NSPAIR(_ZN8S21008C5C1Ev),
  NSPAIR(_ZN8S21008C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21008C6;
extern VTBL_ENTRY _ZTI8S21008C6[];
extern  VTBL_ENTRY _ZTV8S21008C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C6[];
static Base_Class bases_S21008C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S21008C6,    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 _ZTI8S21008C5[];
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY vtc_S21008C5[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C5[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S21008C5[];
static  VTBL_ENTRY _tg__ZTV8S21008C6__8S21008C5[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C6[0]),
};
static  VTT_ENTRY vtt_S21008C5[] = {
  {&(_ZTV8S21008C5[3]),  3,6},
  {&(_tg__ZTV8S21008C6__8S21008C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21008C5[];
extern  VTBL_ENTRY _ZTV8S21008C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C5[];
Class_Descriptor cd_S21008C5 = {  "S21008C5", // class name
  bases_S21008C5, 2,
  &(vtc_S21008C5[0]), // expected_vtbl_contents
  &(vtt_S21008C5[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S21008C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21008C5),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21008C5),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  S21008C3  : virtual S20677C3 , virtual S21008C5 {
  __tsi64 s21008c3f0;
  ::S20677C6_nt s21008c3f1;
  void *s21008c3f2;
  char s21008c3f3[2];
  ::S20677C3 s21008c3f4;
  long s21008c3f5;
  ::S20677C6_nt s21008c3f6;
  virtual void  v5(); // _ZN8S21008C32v5Ev
  virtual void  v6(); // _ZN8S21008C32v6Ev
  virtual void  v7(); // _ZN8S21008C32v7Ev
  ~S21008C3(); // tgen
  S21008C3(); // tgen
};
//SIG(-1 S21008C3) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S21008C3 ::v5(){vfunc_called(this, "_ZN8S21008C32v5Ev");}
void  S21008C3 ::v6(){vfunc_called(this, "_ZN8S21008C32v6Ev");}
void  S21008C3 ::v7(){vfunc_called(this, "_ZN8S21008C32v7Ev");}
S21008C3 ::~S21008C3(){ note_dtor("S21008C3", this);} // tgen
S21008C3 ::S21008C3(){ note_ctor("S21008C3", this);} // tgen

static void Test_S21008C3()
{
  extern Class_Descriptor cd_S21008C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S21008C3, buf);
    S21008C3 *dp, &lv = *(dp=new (buf) S21008C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S21008C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21008C3)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S21008C3");
    check_base_class_offset(lv, (S20677C3*)(S21008C5*), ABISELECT(104,72), "S21008C3");
    check_base_class_offset(lv, (S20677C3*)(S21008C6*)(S21008C5*), ABISELECT(104,72), "S21008C3");
    check_base_class_offset(lv, (S21008C6*)(S21008C5*), ABISELECT(160,112), "S21008C3");
    check_base_class_offset(lv, (S21008C5*), ABISELECT(160,112), "S21008C3");
    check_field_offset(lv, s21008c3f0, ABISELECT(8,4), "S21008C3.s21008c3f0");
    check_field_offset(lv, s21008c3f1, ABISELECT(16,12), "S21008C3.s21008c3f1");
    check_field_offset(lv, s21008c3f2, ABISELECT(24,16), "S21008C3.s21008c3f2");
    check_field_offset(lv, s21008c3f3, ABISELECT(32,20), "S21008C3.s21008c3f3");
    check_field_offset(lv, s21008c3f4, ABISELECT(40,24), "S21008C3.s21008c3f4");
    check_field_offset(lv, s21008c3f5, ABISELECT(88,64), "S21008C3.s21008c3f5");
    check_field_offset(lv, s21008c3f6, ABISELECT(96,68), "S21008C3.s21008c3f6");
    test_class_info(&lv, &cd_S21008C3);
    dp->~S21008C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21008C3(Test_S21008C3, "S21008C3", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN8S21008C3C1Ev();
extern void _ZN8S21008C3D1Ev();
Name_Map name_map_S21008C3[] = {
  NSPAIR(_ZN8S21008C3C1Ev),
  NSPAIR(_ZN8S21008C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21008C6;
extern VTBL_ENTRY _ZTI8S21008C6[];
extern  VTBL_ENTRY _ZTV8S21008C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C6[];
extern Class_Descriptor cd_S21008C5;
extern VTBL_ENTRY _ZTI8S21008C5[];
extern  VTBL_ENTRY _ZTV8S21008C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C5[];
static Base_Class bases_S21008C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S21008C6,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21008C5,    ABISELECT(160,112), //bcp->offset
    7, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21008C3[];
extern void _ZN8S21008C32v5Ev();
extern void _ZN8S21008C32v6Ev();
extern void _ZN8S21008C32v7Ev();
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY vtc_S21008C3[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C3[0]),
  (VTBL_ENTRY)&_ZN8S21008C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S21008C3[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S21008C3[];
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C5__8S21008C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C5[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21008C68S21008C5__8S21008C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C6[0]),
};
static  VTT_ENTRY vtt_S21008C3[] = {
  {&(_ZTV8S21008C3[4]),  4,16},
  {&(_ZTV8S21008C3[13]),  13,16},
  {&(_tg__ZTV8S21008C5__8S21008C3[3]),  3,6},
  {&(_tg__ZTV8S21008C68S21008C5__8S21008C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21008C3[];
extern  VTBL_ENTRY _ZTV8S21008C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C3[];
Class_Descriptor cd_S21008C3 = {  "S21008C3", // class name
  bases_S21008C3, 3,
  &(vtc_S21008C3[0]), // expected_vtbl_contents
  &(vtt_S21008C3[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI8S21008C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21008C3),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21008C3),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  S21008C8  : S20677C3 {
  ::S20677C3 s21008c8f0;
  int s21008c8f1;
  long double s21008c8f2;
  int s21008c8f3;
  __tsi64 s21008c8f4;
  long s21008c8f5;
};
//SIG(-1 S21008C8) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S21008C8()
{
  extern Class_Descriptor cd_S21008C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S21008C8, buf);
    S21008C8 &lv = *(new (buf) S21008C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S21008C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21008C8)");
    check_base_class_offset(lv, (S20677C3*), 0, "S21008C8");
    check_field_offset(lv, s21008c8f0, ABISELECT(48,40), "S21008C8.s21008c8f0");
    check_field_offset(lv, s21008c8f1, ABISELECT(96,80), "S21008C8.s21008c8f1");
    check_field_offset(lv, s21008c8f2, ABISELECT(112,84), "S21008C8.s21008c8f2");
    check_field_offset(lv, s21008c8f3, ABISELECT(128,96), "S21008C8.s21008c8f3");
    check_field_offset(lv, s21008c8f4, ABISELECT(136,100), "S21008C8.s21008c8f4");
    check_field_offset(lv, s21008c8f5, ABISELECT(144,108), "S21008C8.s21008c8f5");
    test_class_info(&lv, &cd_S21008C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21008C8(Test_S21008C8, "S21008C8", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S21008C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S21008C8[];
Class_Descriptor cd_S21008C8 = {  "S21008C8", // class name
  bases_S21008C8, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S21008C8),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21008C9  {
  ::S20677C6_nt s21008c9f0;
  ::S21008C6 s21008c9f1;
  ::S20677C6_nt s21008c9f2;
  __tsi64 s21008c9f3;
  ::S20677C6_nt s21008c9f4;
  void *s21008c9f5;
  ::S20677C6_nt s21008c9f6;
  void *s21008c9f7[2];
  ::S20677C6_nt s21008c9f8;
  virtual void  v8(); // _ZN8S21008C92v8Ev
  ~S21008C9(); // tgen
  S21008C9(); // tgen
};
//SIG(-1 S21008C9) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S21008C9 ::v8(){vfunc_called(this, "_ZN8S21008C92v8Ev");}
S21008C9 ::~S21008C9(){ note_dtor("S21008C9", this);} // tgen
S21008C9 ::S21008C9(){ note_ctor("S21008C9", this);} // tgen

static void Test_S21008C9()
{
  extern Class_Descriptor cd_S21008C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S21008C9, buf);
    S21008C9 *dp, &lv = *(dp=new (buf) S21008C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S21008C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21008C9)");
    check_field_offset(lv, s21008c9f0, ABISELECT(8,4), "S21008C9.s21008c9f0");
    check_field_offset(lv, s21008c9f1, ABISELECT(16,8), "S21008C9.s21008c9f1");
    check_field_offset(lv, s21008c9f2, ABISELECT(208,148), "S21008C9.s21008c9f2");
    check_field_offset(lv, s21008c9f3, ABISELECT(216,152), "S21008C9.s21008c9f3");
    check_field_offset(lv, s21008c9f4, ABISELECT(224,160), "S21008C9.s21008c9f4");
    check_field_offset(lv, s21008c9f5, ABISELECT(232,164), "S21008C9.s21008c9f5");
    check_field_offset(lv, s21008c9f6, ABISELECT(240,168), "S21008C9.s21008c9f6");
    check_field_offset(lv, s21008c9f7, ABISELECT(248,172), "S21008C9.s21008c9f7");
    check_field_offset(lv, s21008c9f8, ABISELECT(264,180), "S21008C9.s21008c9f8");
    test_class_info(&lv, &cd_S21008C9);
    dp->~S21008C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21008C9(Test_S21008C9, "S21008C9", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN8S21008C9C1Ev();
extern void _ZN8S21008C9D1Ev();
Name_Map name_map_S21008C9[] = {
  NSPAIR(_ZN8S21008C9C1Ev),
  NSPAIR(_ZN8S21008C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21008C9[];
extern void _ZN8S21008C92v8Ev();
static  VTBL_ENTRY vtc_S21008C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C9[0]),
  (VTBL_ENTRY)&_ZN8S21008C92v8Ev,
};
extern VTBL_ENTRY _ZTI8S21008C9[];
extern  VTBL_ENTRY _ZTV8S21008C9[];
Class_Descriptor cd_S21008C9 = {  "S21008C9", // class name
  0,0,//no base classes
  &(vtc_S21008C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI8S21008C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21008C9),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21008C2  : virtual S21008C3 , S21008C8 , S21008C9 {
  ::S21008C9 s21008c2f0;
  __tsi64 s21008c2f1:3;
  ::S20680C5 s21008c2f2[2];
  int s21008c2f3;
  long double s21008c2f4;
  __tsi64 s21008c2f5;
  long double s21008c2f6;
  virtual  ~S21008C2(); // _ZN8S21008C2D2Ev
  virtual void  v9(); // _ZN8S21008C22v9Ev
  S21008C2(); // tgen
};
//SIG(-1 S21008C2) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v5 v6 v7 FL FC6{} Fp Fc[2] FC3 Fl FC6} BC7{ BC3 FC3 Fi FD Fi FL Fl} BC8{ v8 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} vd v1 FC8 FL:3 FC9{ BC10{ VBC3 BC11{ VBC3 FD Fi FC3 FC3} v10 v11 v12 Fs FL Fc Fi[2] FC11 Fp FL Fi FL Fi} VBC12{ VBC3 VBC11 v13 v14 Fi FC11 FL Fi Fp} BC11 VBC13{ v15 FC6 FC11 FC6 FL FC6 Fp FC6 Fp[2] FC6} VBC14{ BC11 v16 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v9 Fl FL FD FC6}[2] Fi FD FL FD}


 S21008C2 ::~S21008C2(){ note_dtor("S21008C2", this);}
void  S21008C2 ::v9(){vfunc_called(this, "_ZN8S21008C22v9Ev");}
S21008C2 ::S21008C2(){ note_ctor("S21008C2", this);} // tgen

static void Test_S21008C2()
{
  extern Class_Descriptor cd_S21008C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(272,754)];
    init_test(&cd_S21008C2, buf);
    S21008C2 *dp, &lv = *(dp=new (buf) S21008C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4336,3012), "sizeof(S21008C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21008C2)");
    check_base_class_offset(lv, (S20677C3*)(S21008C3*), ABISELECT(3864,2680), "S21008C2");
    check_base_class_offset(lv, (S20677C3*)(S21008C5*), ABISELECT(3864,2680), "S21008C2");
    check_base_class_offset(lv, (S20677C3*)(S21008C6*)(S21008C5*), ABISELECT(3864,2680), "S21008C2");
    check_base_class_offset(lv, (S21008C6*)(S21008C5*), ABISELECT(3920,2720), "S21008C2");
    check_base_class_offset(lv, (S21008C5*)(S21008C3*), ABISELECT(3920,2720), "S21008C2");
    check_base_class_offset(lv, (S21008C3*), ABISELECT(3760,2608), "S21008C2");
    check_base_class_offset(lv, (S20677C3*)(S21008C8*), ABISELECT(272,184), "S21008C2");
    check_base_class_offset(lv, (S21008C8*), ABISELECT(272,184), "S21008C2");
    check_base_class_offset(lv, (S21008C9*), 0, "S21008C2");
    check_field_offset(lv, s21008c2f0, ABISELECT(432,296), "S21008C2.s21008c2f0");
    set_bf_and_test(lv, s21008c2f1, ABISELECT(704,480), 0, 3, 1, "S21008C2");
    set_bf_and_test(lv, s21008c2f1, ABISELECT(704,480), 0, 3, hide_sll(1LL<<2), "S21008C2");
    check_field_offset(lv, s21008c2f2, ABISELECT(720,484), "S21008C2.s21008c2f2");
    check_field_offset(lv, s21008c2f3, ABISELECT(3696,2572), "S21008C2.s21008c2f3");
    check_field_offset(lv, s21008c2f4, ABISELECT(3712,2576), "S21008C2.s21008c2f4");
    check_field_offset(lv, s21008c2f5, ABISELECT(3728,2588), "S21008C2.s21008c2f5");
    check_field_offset(lv, s21008c2f6, ABISELECT(3744,2596), "S21008C2.s21008c2f6");
    test_class_info(&lv, &cd_S21008C2);
    dp->~S21008C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21008C2(Test_S21008C2, "S21008C2", ABISELECT(4336,3012));

#else // __cplusplus

extern void _ZN8S21008C2C1Ev();
extern void _ZN8S21008C2D2Ev();
Name_Map name_map_S21008C2[] = {
  NSPAIR(_ZN8S21008C2C1Ev),
  NSPAIR(_ZN8S21008C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21008C6;
extern VTBL_ENTRY _ZTI8S21008C6[];
extern  VTBL_ENTRY _ZTV8S21008C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C6[];
extern Class_Descriptor cd_S21008C5;
extern VTBL_ENTRY _ZTI8S21008C5[];
extern  VTBL_ENTRY _ZTV8S21008C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C5[];
extern Class_Descriptor cd_S21008C3;
extern VTBL_ENTRY _ZTI8S21008C3[];
extern  VTBL_ENTRY _ZTV8S21008C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C3[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21008C8;
extern VTBL_ENTRY _ZTI8S21008C8[];
extern Class_Descriptor cd_S21008C9;
extern VTBL_ENTRY _ZTI8S21008C9[];
extern  VTBL_ENTRY _ZTV8S21008C9[];
static Base_Class bases_S21008C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(3864,2680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S21008C6,    ABISELECT(3920,2720), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21008C5,    ABISELECT(3920,2720), //bcp->offset
    19, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21008C3,    ABISELECT(3760,2608), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(272,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21008C8,    ABISELECT(272,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S21008C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S21008C2[];
extern void _ZN8S21008C92v8Ev();
extern void _ZN8S21008C2D1Ev();
extern void _ZN8S21008C2D0Ev();
extern void _ZN8S21008C22v9Ev();
extern void _ZN8S21008C32v5Ev();
extern void _ZN8S21008C32v6Ev();
extern void _ZN8S21008C32v7Ev();
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY vtc_S21008C2[] = {
  ABISELECT(3920,2720),
  ABISELECT(3864,2680),
  ABISELECT(3760,2608),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C2[0]),
  (VTBL_ENTRY)&_ZN8S21008C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21008C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21008C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21008C22v9Ev,
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-3760,-2608),
  (VTBL_ENTRY)&(_ZTI8S21008C2[0]),
  (VTBL_ENTRY)&_ZN8S21008C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3920,-2720),
  (VTBL_ENTRY)&(_ZTI8S21008C2[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S21008C2[];
extern void _ZN8S21008C32v5Ev();
extern void _ZN8S21008C32v6Ev();
extern void _ZN8S21008C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C3__8S21008C2[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C3[0]),
  (VTBL_ENTRY)&_ZN8S21008C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v7Ev,
};
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C5__8S21008C3__8S21008C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S21008C3[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C5__8S21008C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C5[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21008C68S21008C5__8S21008C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C6[0]),
};
static  VTT_ENTRY vtt_S21008C2[] = {
  {&(_ZTV8S21008C2[5]),  5,28},
  {&(_ZTV8S21008C2[16]),  16,28},
  {&(_ZTV8S21008C2[25]),  25,28},
  {&(_tg__ZTV8S21008C3__8S21008C2[4]),  4,7},
  {&(_tg__ZTV8S21008C5__8S21008C3__8S21008C2[6]),  6,9},
  {&(_tg__ZTV8S21008C5__8S21008C2[3]),  3,6},
  {&(_tg__ZTV8S21008C68S21008C5__8S21008C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21008C2[];
extern  VTBL_ENTRY _ZTV8S21008C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C2[];
Class_Descriptor cd_S21008C2 = {  "S21008C2", // class name
  bases_S21008C2, 7,
  &(vtc_S21008C2[0]), // expected_vtbl_contents
  &(vtt_S21008C2[0]), // expected_vtt_contents
  ABISELECT(4336,3012), // object size
  NSPAIRA(_ZTI8S21008C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21008C2),28, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21008C2),7, //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  S21008C1  : virtual S21008C2 {
  long s21008c1f0[5];
  ::S21008C5 s21008c1f1;
  int s21008c1f2;
  ::S20677C17 s21008c1f3;
  virtual  ~S21008C1(); // _ZN8S21008C1D2Ev
  virtual void  v1(); // _ZN8S21008C12v1Ev
  S21008C1(); // tgen
};
//SIG(1 S21008C1) C1{ VBC2{ VBC3{ VBC4{ m Fp FL[4] Fs} VBC5{ VBC4 BC6{ VBC4 FD Fi FC4 FC4} v2 v3 v4 Fs FL Fc Fi[2] FC6 Fp FL Fi FL Fi} v5 v6 v7 FL FC7{} Fp Fc[2] FC4 Fl FC7} BC8{ BC4 FC4 Fi FD Fi FL Fl} BC9{ v8 FC7 FC6 FC7 FL FC7 Fp FC7 Fp[2] FC7} vd v9 FC9 FL:3 FC10{ BC11{ VBC4 BC12{ VBC4 FD Fi FC4 FC4} v20 v21 v22 Fs FL Fc Fi[2] FC12 Fp FL Fi FL Fi} VBC13{ VBC4 VBC12 v23 v24 Fi FC12 FL Fi Fp} BC12 VBC14{ v25 FC7 FC12 FC7 FL FC7 Fp FC7 Fp[2] FC7} VBC15{ BC12 v26 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v19 Fl FL FD FC7}[2] Fi FD FL FD} vd v1 Fl[5] FC5 Fi FC16{ VBC17{ v11 FC7 FC18{ VBC4 FD Fi FC4 FC4} FC7 FL FC7 Fp FC7 Fp[2] FC7} v10 FC19{ BC20{ VBC4 BC18 v13 v14 v15 Fs FL Fc Fi[2] FC18 Fp FL Fi FL Fi} VBC21{ VBC4 VBC18 v16 v17 Fi FC18 FL Fi Fp} BC18 VBC17 VBC22{ BC18 v18 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v12 Fl FL FD FC7} FC7 Fl Fi[2]}}


 S21008C1 ::~S21008C1(){ note_dtor("S21008C1", this);}
void  S21008C1 ::v1(){vfunc_called(this, "_ZN8S21008C12v1Ev");}
S21008C1 ::S21008C1(){ note_ctor("S21008C1", this);} // tgen

static void Test_S21008C1()
{
  extern Class_Descriptor cd_S21008C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(418,1156)];
    init_test(&cd_S21008C1, buf);
    S21008C1 *dp, &lv = *(dp=new (buf) S21008C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6672,4620), "sizeof(S21008C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21008C1)");
    check_base_class_offset(lv, (S20677C3*)(S21008C3*), ABISELECT(6200,4288), "S21008C1");
    check_base_class_offset(lv, (S20677C3*)(S21008C5*), ABISELECT(6200,4288), "S21008C1");
    check_base_class_offset(lv, (S20677C3*)(S21008C6*)(S21008C5*), ABISELECT(6200,4288), "S21008C1");
    check_base_class_offset(lv, (S21008C6*)(S21008C5*), ABISELECT(6256,4328), "S21008C1");
    check_base_class_offset(lv, (S21008C5*)(S21008C3*), ABISELECT(6256,4328), "S21008C1");
    check_base_class_offset(lv, (S21008C3*)(S21008C2*), ABISELECT(6096,4216), "S21008C1");
    check_base_class_offset(lv, (S20677C3*)(S21008C8*)(S21008C2*), ABISELECT(2608,1792), "S21008C1");
    check_base_class_offset(lv, (S21008C8*)(S21008C2*), ABISELECT(2608,1792), "S21008C1");
    check_base_class_offset(lv, (S21008C9*)(S21008C2*), ABISELECT(2336,1608), "S21008C1");
    check_base_class_offset(lv, (S21008C2*), ABISELECT(2336,1608), "S21008C1");
    check_field_offset(lv, s21008c1f0, ABISELECT(8,4), "S21008C1.s21008c1f0");
    check_field_offset(lv, s21008c1f1, ABISELECT(48,24), "S21008C1.s21008c1f1");
    check_field_offset(lv, s21008c1f2, ABISELECT(512,356), "S21008C1.s21008c1f2");
    check_field_offset(lv, s21008c1f3, ABISELECT(528,360), "S21008C1.s21008c1f3");
    test_class_info(&lv, &cd_S21008C1);
    dp->~S21008C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21008C1(Test_S21008C1, "S21008C1", ABISELECT(6672,4620));

#else // __cplusplus

extern void _ZN8S21008C1C1Ev();
extern void _ZN8S21008C1D2Ev();
Name_Map name_map_S21008C1[] = {
  NSPAIR(_ZN8S21008C1C1Ev),
  NSPAIR(_ZN8S21008C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21008C6;
extern VTBL_ENTRY _ZTI8S21008C6[];
extern  VTBL_ENTRY _ZTV8S21008C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C6[];
extern Class_Descriptor cd_S21008C5;
extern VTBL_ENTRY _ZTI8S21008C5[];
extern  VTBL_ENTRY _ZTV8S21008C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C5[];
extern Class_Descriptor cd_S21008C3;
extern VTBL_ENTRY _ZTI8S21008C3[];
extern  VTBL_ENTRY _ZTV8S21008C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C3[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21008C8;
extern VTBL_ENTRY _ZTI8S21008C8[];
extern Class_Descriptor cd_S21008C9;
extern VTBL_ENTRY _ZTI8S21008C9[];
extern  VTBL_ENTRY _ZTV8S21008C9[];
extern Class_Descriptor cd_S21008C2;
extern VTBL_ENTRY _ZTI8S21008C2[];
extern  VTBL_ENTRY _ZTV8S21008C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C2[];
static Base_Class bases_S21008C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(6200,4288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S21008C6,    ABISELECT(6256,4328), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21008C5,    ABISELECT(6256,4328), //bcp->offset
    31, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21008C3,    ABISELECT(6096,4216), //bcp->offset
    21, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20677C3,    ABISELECT(2608,1792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21008C8,    ABISELECT(2608,1792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21008C9,    ABISELECT(2336,1608), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21008C2,    ABISELECT(2336,1608), //bcp->offset
    9, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21008C1[];
extern void _ZN8S21008C1D1Ev();
extern void _ZN8S21008C1D0Ev();
extern void _ZN8S21008C12v1Ev();
extern void _ZN8S21008C92v8Ev();
extern void ABISELECT(_ZTv0_n56_N8S21008C1D1Ev,_ZTv0_n28_N8S21008C1D1Ev)();
extern void ABISELECT(_ZThn2336_N8S21008C1D1Ev,_ZThn1608_N8S21008C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21008C1D0Ev,_ZTv0_n28_N8S21008C1D0Ev)();
extern void ABISELECT(_ZThn2336_N8S21008C1D0Ev,_ZThn1608_N8S21008C1D0Ev)() __attribute__((weak));
extern void _ZN8S21008C22v9Ev();
extern void _ZN8S21008C32v5Ev();
extern void _ZN8S21008C32v6Ev();
extern void _ZN8S21008C32v7Ev();
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY vtc_S21008C1[] = {
  ABISELECT(6256,4328),
  ABISELECT(6200,4288),
  ABISELECT(6096,4216),
  ABISELECT(2336,1608),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C1[0]),
  (VTBL_ENTRY)&_ZN8S21008C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21008C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21008C12v1Ev,
  0,
  ABISELECT(-2336,-1608),
  0,
  ABISELECT(3920,2720),
  ABISELECT(3864,2680),
  ABISELECT(3760,2608),
  ABISELECT(-2336,-1608),
  (VTBL_ENTRY)&(_ZTI8S21008C1[0]),
  (VTBL_ENTRY)&_ZN8S21008C92v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21008C1D1Ev,_ZTv0_n28_N8S21008C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21008C1D0Ev,_ZTv0_n28_N8S21008C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21008C22v9Ev,
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-6096,-4216),
  (VTBL_ENTRY)&(_ZTI8S21008C1[0]),
  (VTBL_ENTRY)&_ZN8S21008C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-6256,-4328),
  (VTBL_ENTRY)&(_ZTI8S21008C1[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S21008C1[];
extern void _ZN8S21008C92v8Ev();
extern void _ZN8S21008C2D1Ev();
extern void _ZN8S21008C2D0Ev();
extern void _ZN8S21008C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C2__8S21008C1[] = {
  ABISELECT(3920,2720),
  ABISELECT(3864,2680),
  ABISELECT(3760,2608),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C2[0]),
  (VTBL_ENTRY)&_ZN8S21008C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21008C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21008C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21008C22v9Ev,
};
extern void _ZN8S21008C32v5Ev();
extern void _ZN8S21008C32v6Ev();
extern void _ZN8S21008C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C3__8S21008C2__8S21008C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-3760,-2608),
  (VTBL_ENTRY)&(_ZTI8S21008C2[0]),
  (VTBL_ENTRY)&_ZN8S21008C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v7Ev,
};
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C5__8S21008C2__8S21008C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3920,-2720),
  (VTBL_ENTRY)&(_ZTI8S21008C2[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
extern void _ZN8S21008C32v5Ev();
extern void _ZN8S21008C32v6Ev();
extern void _ZN8S21008C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C3__8S21008C1[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C3[0]),
  (VTBL_ENTRY)&_ZN8S21008C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21008C32v7Ev,
};
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C5__8S21008C3__8S21008C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S21008C3[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
extern void _ZN8S21008C52v2Ev();
extern void _ZN8S21008C52v3Ev();
extern void _ZN8S21008C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21008C5__8S21008C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C5[0]),
  (VTBL_ENTRY)&_ZN8S21008C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21008C52v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21008C68S21008C5__8S21008C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21008C6[0]),
};
static  VTT_ENTRY vtt_S21008C1[] = {
  {&(_ZTV8S21008C1[6]),  6,40},
  {&(_ZTV8S21008C1[17]),  17,40},
  {&(_ZTV8S21008C1[28]),  28,40},
  {&(_ZTV8S21008C1[37]),  37,40},
  {&(_tg__ZTV8S21008C2__8S21008C1[5]),  5,9},
  {&(_tg__ZTV8S21008C3__8S21008C2__8S21008C1[7]),  7,10},
  {&(_tg__ZTV8S21008C5__8S21008C2__8S21008C1[6]),  6,9},
  {&(_tg__ZTV8S21008C3__8S21008C1[4]),  4,7},
  {&(_tg__ZTV8S21008C5__8S21008C3__8S21008C1[6]),  6,9},
  {&(_tg__ZTV8S21008C5__8S21008C1[3]),  3,6},
  {&(_tg__ZTV8S21008C68S21008C5__8S21008C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21008C1[];
extern  VTBL_ENTRY _ZTV8S21008C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21008C1[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21008C1D0Ev,_ZTv0_n28_N8S21008C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2336_N8S21008C1D0Ev,_ZThn1608_N8S21008C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21008C1D1Ev,_ZTv0_n28_N8S21008C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2336_N8S21008C1D1Ev,_ZThn1608_N8S21008C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21008C1 = {  "S21008C1", // class name
  bases_S21008C1, 8,
  &(vtc_S21008C1[0]), // expected_vtbl_contents
  &(vtt_S21008C1[0]), // expected_vtt_contents
  ABISELECT(6672,4620), // object size
  NSPAIRA(_ZTI8S21008C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21008C1),40, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21008C1),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21007C6  : virtual S20677C3 {
  long double s21007c6f0;
  int s21007c6f1;
  ::S20677C3 s21007c6f2;
  ::S20677C3 s21007c6f3;
  ~S21007C6(); // tgen
  S21007C6(); // tgen
};
//SIG(-1 S21007C6) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S21007C6 ::~S21007C6(){ note_dtor("S21007C6", this);} // tgen
S21007C6 ::S21007C6(){ note_ctor("S21007C6", this);} // tgen

static void Test_S21007C6()
{
  extern Class_Descriptor cd_S21007C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S21007C6, buf);
    S21007C6 *dp, &lv = *(dp=new (buf) S21007C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S21007C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21007C6)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S21007C6");
    check_field_offset(lv, s21007c6f0, ABISELECT(16,4), "S21007C6.s21007c6f0");
    check_field_offset(lv, s21007c6f1, ABISELECT(32,16), "S21007C6.s21007c6f1");
    check_field_offset(lv, s21007c6f2, ABISELECT(40,20), "S21007C6.s21007c6f2");
    check_field_offset(lv, s21007c6f3, ABISELECT(88,60), "S21007C6.s21007c6f3");
    test_class_info(&lv, &cd_S21007C6);
    dp->~S21007C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21007C6(Test_S21007C6, "S21007C6", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN8S21007C6C1Ev();
extern void _ZN8S21007C6D1Ev();
Name_Map name_map_S21007C6[] = {
  NSPAIR(_ZN8S21007C6C1Ev),
  NSPAIR(_ZN8S21007C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S21007C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S21007C6[];
static  VTBL_ENTRY vtc_S21007C6[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C6[0]),
};
extern VTBL_ENTRY _ZTV8S21007C6[];
static  VTT_ENTRY vtt_S21007C6[] = {
  {&(_ZTV8S21007C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21007C6[];
extern  VTBL_ENTRY _ZTV8S21007C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C6[];
Class_Descriptor cd_S21007C6 = {  "S21007C6", // class name
  bases_S21007C6, 1,
  &(vtc_S21007C6[0]), // expected_vtbl_contents
  &(vtt_S21007C6[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI8S21007C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21007C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21007C6),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21007C5  : virtual S20677C3 , S21007C6 {
  short s21007c5f0;
  __tsi64 s21007c5f1;
  char s21007c5f2;
  int s21007c5f3[2];
  ::S21007C6 s21007c5f4;
  void *s21007c5f5;
  __tsi64 s21007c5f6;
  int s21007c5f7;
  __tsi64 s21007c5f8;
  int s21007c5f9;
  virtual void  v2(); // _ZN8S21007C52v2Ev
  virtual void  v3(); // _ZN8S21007C52v3Ev
  virtual void  v4(); // _ZN8S21007C52v4Ev
  ~S21007C5(); // tgen
  S21007C5(); // tgen
};
//SIG(-1 S21007C5) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S21007C5 ::v2(){vfunc_called(this, "_ZN8S21007C52v2Ev");}
void  S21007C5 ::v3(){vfunc_called(this, "_ZN8S21007C52v3Ev");}
void  S21007C5 ::v4(){vfunc_called(this, "_ZN8S21007C52v4Ev");}
S21007C5 ::~S21007C5(){ note_dtor("S21007C5", this);} // tgen
S21007C5 ::S21007C5(){ note_ctor("S21007C5", this);} // tgen

static void Test_S21007C5()
{
  extern Class_Descriptor cd_S21007C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S21007C5, buf);
    S21007C5 *dp, &lv = *(dp=new (buf) S21007C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S21007C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21007C5)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S21007C5");
    check_base_class_offset(lv, (S20677C3*)(S21007C6*), ABISELECT(408,292), "S21007C5");
    check_base_class_offset(lv, (S21007C6*), 0, "S21007C5");
    check_field_offset(lv, s21007c5f0, ABISELECT(136,100), "S21007C5.s21007c5f0");
    check_field_offset(lv, s21007c5f1, ABISELECT(144,104), "S21007C5.s21007c5f1");
    check_field_offset(lv, s21007c5f2, ABISELECT(152,112), "S21007C5.s21007c5f2");
    check_field_offset(lv, s21007c5f3, ABISELECT(156,116), "S21007C5.s21007c5f3");
    check_field_offset(lv, s21007c5f4, ABISELECT(176,124), "S21007C5.s21007c5f4");
    check_field_offset(lv, s21007c5f5, ABISELECT(368,264), "S21007C5.s21007c5f5");
    check_field_offset(lv, s21007c5f6, ABISELECT(376,268), "S21007C5.s21007c5f6");
    check_field_offset(lv, s21007c5f7, ABISELECT(384,276), "S21007C5.s21007c5f7");
    check_field_offset(lv, s21007c5f8, ABISELECT(392,280), "S21007C5.s21007c5f8");
    check_field_offset(lv, s21007c5f9, ABISELECT(400,288), "S21007C5.s21007c5f9");
    test_class_info(&lv, &cd_S21007C5);
    dp->~S21007C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21007C5(Test_S21007C5, "S21007C5", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN8S21007C5C1Ev();
extern void _ZN8S21007C5D1Ev();
Name_Map name_map_S21007C5[] = {
  NSPAIR(_ZN8S21007C5C1Ev),
  NSPAIR(_ZN8S21007C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21007C6;
extern VTBL_ENTRY _ZTI8S21007C6[];
extern  VTBL_ENTRY _ZTV8S21007C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C6[];
static Base_Class bases_S21007C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S21007C6,    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 _ZTI8S21007C5[];
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY vtc_S21007C5[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C5[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S21007C5[];
static  VTBL_ENTRY _tg__ZTV8S21007C6__8S21007C5[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C6[0]),
};
static  VTT_ENTRY vtt_S21007C5[] = {
  {&(_ZTV8S21007C5[3]),  3,6},
  {&(_tg__ZTV8S21007C6__8S21007C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21007C5[];
extern  VTBL_ENTRY _ZTV8S21007C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C5[];
Class_Descriptor cd_S21007C5 = {  "S21007C5", // class name
  bases_S21007C5, 2,
  &(vtc_S21007C5[0]), // expected_vtbl_contents
  &(vtt_S21007C5[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI8S21007C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21007C5),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21007C5),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  S21007C3  : virtual S20677C3 , virtual S21007C5 {
  __tsi64 s21007c3f0;
  ::S20677C6_nt s21007c3f1;
  void *s21007c3f2;
  char s21007c3f3[2];
  ::S20677C3 s21007c3f4;
  long s21007c3f5;
  ::S20677C6_nt s21007c3f6;
  virtual void  v5(); // _ZN8S21007C32v5Ev
  virtual void  v6(); // _ZN8S21007C32v6Ev
  virtual void  v7(); // _ZN8S21007C32v7Ev
  ~S21007C3(); // tgen
  S21007C3(); // tgen
};
//SIG(-1 S21007C3) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S21007C3 ::v5(){vfunc_called(this, "_ZN8S21007C32v5Ev");}
void  S21007C3 ::v6(){vfunc_called(this, "_ZN8S21007C32v6Ev");}
void  S21007C3 ::v7(){vfunc_called(this, "_ZN8S21007C32v7Ev");}
S21007C3 ::~S21007C3(){ note_dtor("S21007C3", this);} // tgen
S21007C3 ::S21007C3(){ note_ctor("S21007C3", this);} // tgen

static void Test_S21007C3()
{
  extern Class_Descriptor cd_S21007C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S21007C3, buf);
    S21007C3 *dp, &lv = *(dp=new (buf) S21007C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S21007C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21007C3)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S21007C3");
    check_base_class_offset(lv, (S20677C3*)(S21007C5*), ABISELECT(104,72), "S21007C3");
    check_base_class_offset(lv, (S20677C3*)(S21007C6*)(S21007C5*), ABISELECT(104,72), "S21007C3");
    check_base_class_offset(lv, (S21007C6*)(S21007C5*), ABISELECT(160,112), "S21007C3");
    check_base_class_offset(lv, (S21007C5*), ABISELECT(160,112), "S21007C3");
    check_field_offset(lv, s21007c3f0, ABISELECT(8,4), "S21007C3.s21007c3f0");
    check_field_offset(lv, s21007c3f1, ABISELECT(16,12), "S21007C3.s21007c3f1");
    check_field_offset(lv, s21007c3f2, ABISELECT(24,16), "S21007C3.s21007c3f2");
    check_field_offset(lv, s21007c3f3, ABISELECT(32,20), "S21007C3.s21007c3f3");
    check_field_offset(lv, s21007c3f4, ABISELECT(40,24), "S21007C3.s21007c3f4");
    check_field_offset(lv, s21007c3f5, ABISELECT(88,64), "S21007C3.s21007c3f5");
    check_field_offset(lv, s21007c3f6, ABISELECT(96,68), "S21007C3.s21007c3f6");
    test_class_info(&lv, &cd_S21007C3);
    dp->~S21007C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21007C3(Test_S21007C3, "S21007C3", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN8S21007C3C1Ev();
extern void _ZN8S21007C3D1Ev();
Name_Map name_map_S21007C3[] = {
  NSPAIR(_ZN8S21007C3C1Ev),
  NSPAIR(_ZN8S21007C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21007C6;
extern VTBL_ENTRY _ZTI8S21007C6[];
extern  VTBL_ENTRY _ZTV8S21007C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C6[];
extern Class_Descriptor cd_S21007C5;
extern VTBL_ENTRY _ZTI8S21007C5[];
extern  VTBL_ENTRY _ZTV8S21007C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C5[];
static Base_Class bases_S21007C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S21007C6,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21007C5,    ABISELECT(160,112), //bcp->offset
    7, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21007C3[];
extern void _ZN8S21007C32v5Ev();
extern void _ZN8S21007C32v6Ev();
extern void _ZN8S21007C32v7Ev();
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY vtc_S21007C3[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C3[0]),
  (VTBL_ENTRY)&_ZN8S21007C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S21007C3[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S21007C3[];
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C5__8S21007C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C5[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21007C68S21007C5__8S21007C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C6[0]),
};
static  VTT_ENTRY vtt_S21007C3[] = {
  {&(_ZTV8S21007C3[4]),  4,16},
  {&(_ZTV8S21007C3[13]),  13,16},
  {&(_tg__ZTV8S21007C5__8S21007C3[3]),  3,6},
  {&(_tg__ZTV8S21007C68S21007C5__8S21007C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21007C3[];
extern  VTBL_ENTRY _ZTV8S21007C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C3[];
Class_Descriptor cd_S21007C3 = {  "S21007C3", // class name
  bases_S21007C3, 3,
  &(vtc_S21007C3[0]), // expected_vtbl_contents
  &(vtt_S21007C3[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI8S21007C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21007C3),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21007C3),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  S21007C8  : S20677C3 {
  ::S20677C3 s21007c8f0;
  int s21007c8f1;
  long double s21007c8f2;
  int s21007c8f3;
  __tsi64 s21007c8f4;
  long s21007c8f5;
};
//SIG(-1 S21007C8) C1{ BC2{ m Fp FL[4] Fs} FC2 Fi FD Fi FL Fl}



static void Test_S21007C8()
{
  extern Class_Descriptor cd_S21007C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,29)];
    init_test(&cd_S21007C8, buf);
    S21007C8 &lv = *(new (buf) S21007C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S21007C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21007C8)");
    check_base_class_offset(lv, (S20677C3*), 0, "S21007C8");
    check_field_offset(lv, s21007c8f0, ABISELECT(48,40), "S21007C8.s21007c8f0");
    check_field_offset(lv, s21007c8f1, ABISELECT(96,80), "S21007C8.s21007c8f1");
    check_field_offset(lv, s21007c8f2, ABISELECT(112,84), "S21007C8.s21007c8f2");
    check_field_offset(lv, s21007c8f3, ABISELECT(128,96), "S21007C8.s21007c8f3");
    check_field_offset(lv, s21007c8f4, ABISELECT(136,100), "S21007C8.s21007c8f4");
    check_field_offset(lv, s21007c8f5, ABISELECT(144,108), "S21007C8.s21007c8f5");
    test_class_info(&lv, &cd_S21007C8);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21007C8(Test_S21007C8, "S21007C8", ABISELECT(160,112));

#else // __cplusplus

extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S21007C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S21007C8[];
Class_Descriptor cd_S21007C8 = {  "S21007C8", // class name
  bases_S21007C8, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI8S21007C8),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21007C9  {
  ::S20677C6_nt s21007c9f0;
  ::S21007C6 s21007c9f1;
  ::S20677C6_nt s21007c9f2;
  __tsi64 s21007c9f3;
  ::S20677C6_nt s21007c9f4;
  void *s21007c9f5;
  ::S20677C6_nt s21007c9f6;
  void *s21007c9f7[2];
  ::S20677C6_nt s21007c9f8;
  virtual void  v8(); // _ZN8S21007C92v8Ev
  ~S21007C9(); // tgen
  S21007C9(); // tgen
};
//SIG(-1 S21007C9) C1{ v1 FC2{} FC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} FC2 FL FC2 Fp FC2 Fp[2] FC2}


void  S21007C9 ::v8(){vfunc_called(this, "_ZN8S21007C92v8Ev");}
S21007C9 ::~S21007C9(){ note_dtor("S21007C9", this);} // tgen
S21007C9 ::S21007C9(){ note_ctor("S21007C9", this);} // tgen

static void Test_S21007C9()
{
  extern Class_Descriptor cd_S21007C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,47)];
    init_test(&cd_S21007C9, buf);
    S21007C9 *dp, &lv = *(dp=new (buf) S21007C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,184), "sizeof(S21007C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21007C9)");
    check_field_offset(lv, s21007c9f0, ABISELECT(8,4), "S21007C9.s21007c9f0");
    check_field_offset(lv, s21007c9f1, ABISELECT(16,8), "S21007C9.s21007c9f1");
    check_field_offset(lv, s21007c9f2, ABISELECT(208,148), "S21007C9.s21007c9f2");
    check_field_offset(lv, s21007c9f3, ABISELECT(216,152), "S21007C9.s21007c9f3");
    check_field_offset(lv, s21007c9f4, ABISELECT(224,160), "S21007C9.s21007c9f4");
    check_field_offset(lv, s21007c9f5, ABISELECT(232,164), "S21007C9.s21007c9f5");
    check_field_offset(lv, s21007c9f6, ABISELECT(240,168), "S21007C9.s21007c9f6");
    check_field_offset(lv, s21007c9f7, ABISELECT(248,172), "S21007C9.s21007c9f7");
    check_field_offset(lv, s21007c9f8, ABISELECT(264,180), "S21007C9.s21007c9f8");
    test_class_info(&lv, &cd_S21007C9);
    dp->~S21007C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21007C9(Test_S21007C9, "S21007C9", ABISELECT(272,184));

#else // __cplusplus

extern void _ZN8S21007C9C1Ev();
extern void _ZN8S21007C9D1Ev();
Name_Map name_map_S21007C9[] = {
  NSPAIR(_ZN8S21007C9C1Ev),
  NSPAIR(_ZN8S21007C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21007C9[];
extern void _ZN8S21007C92v8Ev();
static  VTBL_ENTRY vtc_S21007C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C9[0]),
  (VTBL_ENTRY)&_ZN8S21007C92v8Ev,
};
extern VTBL_ENTRY _ZTI8S21007C9[];
extern  VTBL_ENTRY _ZTV8S21007C9[];
Class_Descriptor cd_S21007C9 = {  "S21007C9", // class name
  0,0,//no base classes
  &(vtc_S21007C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,184), // object size
  NSPAIRA(_ZTI8S21007C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21007C9),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21007C2  : virtual S21007C3 , S21007C8 , S21007C9 {
  ::S21007C9 s21007c2f0;
  int s21007c2f1:3;
  ::S20680C5 s21007c2f2[2];
  int s21007c2f3;
  long double s21007c2f4;
  __tsi64 s21007c2f5;
  long double s21007c2f6;
  virtual  ~S21007C2(); // _ZN8S21007C2D2Ev
  virtual void  v9(); // _ZN8S21007C22v9Ev
  S21007C2(); // tgen
};
//SIG(-1 S21007C2) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} VBC4{ VBC3 BC5{ VBC3 FD Fi FC3 FC3} v2 v3 v4 Fs FL Fc Fi[2] FC5 Fp FL Fi FL Fi} v5 v6 v7 FL FC6{} Fp Fc[2] FC3 Fl FC6} BC7{ BC3 FC3 Fi FD Fi FL Fl} BC8{ v8 FC6 FC5 FC6 FL FC6 Fp FC6 Fp[2] FC6} vd v1 FC8 Fi:3 FC9{ BC10{ VBC3 BC11{ VBC3 FD Fi FC3 FC3} v10 v11 v12 Fs FL Fc Fi[2] FC11 Fp FL Fi FL Fi} VBC12{ VBC3 VBC11 v13 v14 Fi FC11 FL Fi Fp} BC11 VBC13{ v15 FC6 FC11 FC6 FL FC6 Fp FC6 Fp[2] FC6} VBC14{ BC11 v16 FL Fc[7] Fp Fi FC6 FC6 Fc[10]} v9 Fl FL FD FC6}[2] Fi FD FL FD}


 S21007C2 ::~S21007C2(){ note_dtor("S21007C2", this);}
void  S21007C2 ::v9(){vfunc_called(this, "_ZN8S21007C22v9Ev");}
S21007C2 ::S21007C2(){ note_ctor("S21007C2", this);} // tgen

static void Test_S21007C2()
{
  extern Class_Descriptor cd_S21007C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(272,754)];
    init_test(&cd_S21007C2, buf);
    S21007C2 *dp, &lv = *(dp=new (buf) S21007C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4336,3012), "sizeof(S21007C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21007C2)");
    check_base_class_offset(lv, (S20677C3*)(S21007C3*), ABISELECT(3864,2680), "S21007C2");
    check_base_class_offset(lv, (S20677C3*)(S21007C5*), ABISELECT(3864,2680), "S21007C2");
    check_base_class_offset(lv, (S20677C3*)(S21007C6*)(S21007C5*), ABISELECT(3864,2680), "S21007C2");
    check_base_class_offset(lv, (S21007C6*)(S21007C5*), ABISELECT(3920,2720), "S21007C2");
    check_base_class_offset(lv, (S21007C5*)(S21007C3*), ABISELECT(3920,2720), "S21007C2");
    check_base_class_offset(lv, (S21007C3*), ABISELECT(3760,2608), "S21007C2");
    check_base_class_offset(lv, (S20677C3*)(S21007C8*), ABISELECT(272,184), "S21007C2");
    check_base_class_offset(lv, (S21007C8*), ABISELECT(272,184), "S21007C2");
    check_base_class_offset(lv, (S21007C9*), 0, "S21007C2");
    check_field_offset(lv, s21007c2f0, ABISELECT(432,296), "S21007C2.s21007c2f0");
    set_bf_and_test(lv, s21007c2f1, ABISELECT(704,480), 0, 3, 1, "S21007C2");
    set_bf_and_test(lv, s21007c2f1, ABISELECT(704,480), 0, 3, hide_sll(1LL<<2), "S21007C2");
    check_field_offset(lv, s21007c2f2, ABISELECT(720,484), "S21007C2.s21007c2f2");
    check_field_offset(lv, s21007c2f3, ABISELECT(3696,2572), "S21007C2.s21007c2f3");
    check_field_offset(lv, s21007c2f4, ABISELECT(3712,2576), "S21007C2.s21007c2f4");
    check_field_offset(lv, s21007c2f5, ABISELECT(3728,2588), "S21007C2.s21007c2f5");
    check_field_offset(lv, s21007c2f6, ABISELECT(3744,2596), "S21007C2.s21007c2f6");
    test_class_info(&lv, &cd_S21007C2);
    dp->~S21007C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21007C2(Test_S21007C2, "S21007C2", ABISELECT(4336,3012));

#else // __cplusplus

extern void _ZN8S21007C2C1Ev();
extern void _ZN8S21007C2D2Ev();
Name_Map name_map_S21007C2[] = {
  NSPAIR(_ZN8S21007C2C1Ev),
  NSPAIR(_ZN8S21007C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21007C6;
extern VTBL_ENTRY _ZTI8S21007C6[];
extern  VTBL_ENTRY _ZTV8S21007C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C6[];
extern Class_Descriptor cd_S21007C5;
extern VTBL_ENTRY _ZTI8S21007C5[];
extern  VTBL_ENTRY _ZTV8S21007C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C5[];
extern Class_Descriptor cd_S21007C3;
extern VTBL_ENTRY _ZTI8S21007C3[];
extern  VTBL_ENTRY _ZTV8S21007C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C3[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21007C8;
extern VTBL_ENTRY _ZTI8S21007C8[];
extern Class_Descriptor cd_S21007C9;
extern VTBL_ENTRY _ZTI8S21007C9[];
extern  VTBL_ENTRY _ZTV8S21007C9[];
static Base_Class bases_S21007C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(3864,2680), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S21007C6,    ABISELECT(3920,2720), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21007C5,    ABISELECT(3920,2720), //bcp->offset
    19, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21007C3,    ABISELECT(3760,2608), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20677C3,    ABISELECT(272,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21007C8,    ABISELECT(272,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S21007C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S21007C2[];
extern void _ZN8S21007C92v8Ev();
extern void _ZN8S21007C2D1Ev();
extern void _ZN8S21007C2D0Ev();
extern void _ZN8S21007C22v9Ev();
extern void _ZN8S21007C32v5Ev();
extern void _ZN8S21007C32v6Ev();
extern void _ZN8S21007C32v7Ev();
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY vtc_S21007C2[] = {
  ABISELECT(3920,2720),
  ABISELECT(3864,2680),
  ABISELECT(3760,2608),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C2[0]),
  (VTBL_ENTRY)&_ZN8S21007C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21007C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21007C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21007C22v9Ev,
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-3760,-2608),
  (VTBL_ENTRY)&(_ZTI8S21007C2[0]),
  (VTBL_ENTRY)&_ZN8S21007C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3920,-2720),
  (VTBL_ENTRY)&(_ZTI8S21007C2[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S21007C2[];
extern void _ZN8S21007C32v5Ev();
extern void _ZN8S21007C32v6Ev();
extern void _ZN8S21007C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C3__8S21007C2[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C3[0]),
  (VTBL_ENTRY)&_ZN8S21007C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v7Ev,
};
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C5__8S21007C3__8S21007C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S21007C3[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C5__8S21007C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C5[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21007C68S21007C5__8S21007C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C6[0]),
};
static  VTT_ENTRY vtt_S21007C2[] = {
  {&(_ZTV8S21007C2[5]),  5,28},
  {&(_ZTV8S21007C2[16]),  16,28},
  {&(_ZTV8S21007C2[25]),  25,28},
  {&(_tg__ZTV8S21007C3__8S21007C2[4]),  4,7},
  {&(_tg__ZTV8S21007C5__8S21007C3__8S21007C2[6]),  6,9},
  {&(_tg__ZTV8S21007C5__8S21007C2[3]),  3,6},
  {&(_tg__ZTV8S21007C68S21007C5__8S21007C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21007C2[];
extern  VTBL_ENTRY _ZTV8S21007C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C2[];
Class_Descriptor cd_S21007C2 = {  "S21007C2", // class name
  bases_S21007C2, 7,
  &(vtc_S21007C2[0]), // expected_vtbl_contents
  &(vtt_S21007C2[0]), // expected_vtt_contents
  ABISELECT(4336,3012), // object size
  NSPAIRA(_ZTI8S21007C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21007C2),28, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21007C2),7, //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  S21007C1  : virtual S21007C2 {
  __tsi64 s21007c1f0[5];
  ::S21007C5 s21007c1f1;
  int s21007c1f2;
  ::S20678C17 s21007c1f3;
  virtual  ~S21007C1(); // _ZN8S21007C1D2Ev
  virtual void  v1(); // _ZN8S21007C12v1Ev
  S21007C1(); // tgen
};
//SIG(1 S21007C1) C1{ VBC2{ VBC3{ VBC4{ m Fp FL[4] Fs} VBC5{ VBC4 BC6{ VBC4 FD Fi FC4 FC4} v2 v3 v4 Fs FL Fc Fi[2] FC6 Fp FL Fi FL Fi} v5 v6 v7 FL FC7{} Fp Fc[2] FC4 Fl FC7} BC8{ BC4 FC4 Fi FD Fi FL Fl} BC9{ v8 FC7 FC6 FC7 FL FC7 Fp FC7 Fp[2] FC7} vd v9 FC9 Fi:3 FC10{ BC11{ VBC4 BC12{ VBC4 FD Fi FC4 FC4} v20 v21 v22 Fs FL Fc Fi[2] FC12 Fp FL Fi FL Fi} VBC13{ VBC4 VBC12 v23 v24 Fi FC12 FL Fi Fp} BC12 VBC14{ v25 FC7 FC12 FC7 FL FC7 Fp FC7 Fp[2] FC7} VBC15{ BC12 v26 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v19 Fl FL FD FC7}[2] Fi FD FL FD} vd v1 FL[5] FC5 Fi FC16{ VBC17{ v11 FC7 FC18{ VBC4 FD Fi FC4 FC4} FC7 FL FC7 Fp FC7 Fp[2] FC7} v10 FC19{ BC20{ VBC4 BC18 v13 v14 v15 Fs FL Fc Fi[2] FC18 Fp FL Fi FL Fi} VBC21{ VBC4 VBC18 v16 v17 Fi FC18 FL Fi Fp} BC18 VBC17 VBC22{ BC18 v18 FL Fc[7] Fp Fi FC7 FC7 Fc[10]} v12 Fl FL FD FC7} FC7 FL Fi[2]}}


 S21007C1 ::~S21007C1(){ note_dtor("S21007C1", this);}
void  S21007C1 ::v1(){vfunc_called(this, "_ZN8S21007C12v1Ev");}
S21007C1 ::S21007C1(){ note_ctor("S21007C1", this);} // tgen

static void Test_S21007C1()
{
  extern Class_Descriptor cd_S21007C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(418,1162)];
    init_test(&cd_S21007C1, buf);
    S21007C1 *dp, &lv = *(dp=new (buf) S21007C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6672,4644), "sizeof(S21007C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21007C1)");
    check_base_class_offset(lv, (S20677C3*)(S21007C3*), ABISELECT(6200,4312), "S21007C1");
    check_base_class_offset(lv, (S20677C3*)(S21007C5*), ABISELECT(6200,4312), "S21007C1");
    check_base_class_offset(lv, (S20677C3*)(S21007C6*)(S21007C5*), ABISELECT(6200,4312), "S21007C1");
    check_base_class_offset(lv, (S21007C6*)(S21007C5*), ABISELECT(6256,4352), "S21007C1");
    check_base_class_offset(lv, (S21007C5*)(S21007C3*), ABISELECT(6256,4352), "S21007C1");
    check_base_class_offset(lv, (S21007C3*)(S21007C2*), ABISELECT(6096,4240), "S21007C1");
    check_base_class_offset(lv, (S20677C3*)(S21007C8*)(S21007C2*), ABISELECT(2608,1816), "S21007C1");
    check_base_class_offset(lv, (S21007C8*)(S21007C2*), ABISELECT(2608,1816), "S21007C1");
    check_base_class_offset(lv, (S21007C9*)(S21007C2*), ABISELECT(2336,1632), "S21007C1");
    check_base_class_offset(lv, (S21007C2*), ABISELECT(2336,1632), "S21007C1");
    check_field_offset(lv, s21007c1f0, ABISELECT(8,4), "S21007C1.s21007c1f0");
    check_field_offset(lv, s21007c1f1, ABISELECT(48,44), "S21007C1.s21007c1f1");
    check_field_offset(lv, s21007c1f2, ABISELECT(512,376), "S21007C1.s21007c1f2");
    check_field_offset(lv, s21007c1f3, ABISELECT(528,380), "S21007C1.s21007c1f3");
    test_class_info(&lv, &cd_S21007C1);
    dp->~S21007C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21007C1(Test_S21007C1, "S21007C1", ABISELECT(6672,4644));

#else // __cplusplus

extern void _ZN8S21007C1C1Ev();
extern void _ZN8S21007C1D2Ev();
Name_Map name_map_S21007C1[] = {
  NSPAIR(_ZN8S21007C1C1Ev),
  NSPAIR(_ZN8S21007C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21007C6;
extern VTBL_ENTRY _ZTI8S21007C6[];
extern  VTBL_ENTRY _ZTV8S21007C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C6[];
extern Class_Descriptor cd_S21007C5;
extern VTBL_ENTRY _ZTI8S21007C5[];
extern  VTBL_ENTRY _ZTV8S21007C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C5[];
extern Class_Descriptor cd_S21007C3;
extern VTBL_ENTRY _ZTI8S21007C3[];
extern  VTBL_ENTRY _ZTV8S21007C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C3[];
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S21007C8;
extern VTBL_ENTRY _ZTI8S21007C8[];
extern Class_Descriptor cd_S21007C9;
extern VTBL_ENTRY _ZTI8S21007C9[];
extern  VTBL_ENTRY _ZTV8S21007C9[];
extern Class_Descriptor cd_S21007C2;
extern VTBL_ENTRY _ZTI8S21007C2[];
extern  VTBL_ENTRY _ZTV8S21007C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C2[];
static Base_Class bases_S21007C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(6200,4312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S21007C6,    ABISELECT(6256,4352), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21007C5,    ABISELECT(6256,4352), //bcp->offset
    31, //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
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21007C3,    ABISELECT(6096,4240), //bcp->offset
    21, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20677C3,    ABISELECT(2608,1816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21007C8,    ABISELECT(2608,1816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21007C9,    ABISELECT(2336,1632), //bcp->offset
    -1, //bcp->virtual_function_table_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_S21007C2,    ABISELECT(2336,1632), //bcp->offset
    9, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21007C1[];
extern void _ZN8S21007C1D1Ev();
extern void _ZN8S21007C1D0Ev();
extern void _ZN8S21007C12v1Ev();
extern void _ZN8S21007C92v8Ev();
extern void ABISELECT(_ZTv0_n56_N8S21007C1D1Ev,_ZTv0_n28_N8S21007C1D1Ev)();
extern void ABISELECT(_ZThn2336_N8S21007C1D1Ev,_ZThn1632_N8S21007C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S21007C1D0Ev,_ZTv0_n28_N8S21007C1D0Ev)();
extern void ABISELECT(_ZThn2336_N8S21007C1D0Ev,_ZThn1632_N8S21007C1D0Ev)() __attribute__((weak));
extern void _ZN8S21007C22v9Ev();
extern void _ZN8S21007C32v5Ev();
extern void _ZN8S21007C32v6Ev();
extern void _ZN8S21007C32v7Ev();
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY vtc_S21007C1[] = {
  ABISELECT(6256,4352),
  ABISELECT(6200,4312),
  ABISELECT(6096,4240),
  ABISELECT(2336,1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C1[0]),
  (VTBL_ENTRY)&_ZN8S21007C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21007C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21007C12v1Ev,
  0,
  ABISELECT(-2336,-1632),
  0,
  ABISELECT(3920,2720),
  ABISELECT(3864,2680),
  ABISELECT(3760,2608),
  ABISELECT(-2336,-1632),
  (VTBL_ENTRY)&(_ZTI8S21007C1[0]),
  (VTBL_ENTRY)&_ZN8S21007C92v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21007C1D1Ev,_ZTv0_n28_N8S21007C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S21007C1D0Ev,_ZTv0_n28_N8S21007C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21007C22v9Ev,
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-6096,-4240),
  (VTBL_ENTRY)&(_ZTI8S21007C1[0]),
  (VTBL_ENTRY)&_ZN8S21007C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v7Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-6256,-4352),
  (VTBL_ENTRY)&(_ZTI8S21007C1[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S21007C1[];
extern void _ZN8S21007C92v8Ev();
extern void _ZN8S21007C2D1Ev();
extern void _ZN8S21007C2D0Ev();
extern void _ZN8S21007C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C2__8S21007C1[] = {
  ABISELECT(3920,2720),
  ABISELECT(3864,2680),
  ABISELECT(3760,2608),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C2[0]),
  (VTBL_ENTRY)&_ZN8S21007C92v8Ev,
  (VTBL_ENTRY)&_ZN8S21007C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21007C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21007C22v9Ev,
};
extern void _ZN8S21007C32v5Ev();
extern void _ZN8S21007C32v6Ev();
extern void _ZN8S21007C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C3__8S21007C2__8S21007C1[] = {
  0,
  0,
  0,
  ABISELECT(160,112),
  ABISELECT(104,72),
  ABISELECT(-3760,-2608),
  (VTBL_ENTRY)&(_ZTI8S21007C2[0]),
  (VTBL_ENTRY)&_ZN8S21007C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v7Ev,
};
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C5__8S21007C2__8S21007C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3920,-2720),
  (VTBL_ENTRY)&(_ZTI8S21007C2[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
extern void _ZN8S21007C32v5Ev();
extern void _ZN8S21007C32v6Ev();
extern void _ZN8S21007C32v7Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C3__8S21007C1[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C3[0]),
  (VTBL_ENTRY)&_ZN8S21007C32v5Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v6Ev,
  (VTBL_ENTRY)&_ZN8S21007C32v7Ev,
};
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C5__8S21007C3__8S21007C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI8S21007C3[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
extern void _ZN8S21007C52v2Ev();
extern void _ZN8S21007C52v3Ev();
extern void _ZN8S21007C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S21007C5__8S21007C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C5[0]),
  (VTBL_ENTRY)&_ZN8S21007C52v2Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v3Ev,
  (VTBL_ENTRY)&_ZN8S21007C52v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S21007C68S21007C5__8S21007C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21007C6[0]),
};
static  VTT_ENTRY vtt_S21007C1[] = {
  {&(_ZTV8S21007C1[6]),  6,40},
  {&(_ZTV8S21007C1[17]),  17,40},
  {&(_ZTV8S21007C1[28]),  28,40},
  {&(_ZTV8S21007C1[37]),  37,40},
  {&(_tg__ZTV8S21007C2__8S21007C1[5]),  5,9},
  {&(_tg__ZTV8S21007C3__8S21007C2__8S21007C1[7]),  7,10},
  {&(_tg__ZTV8S21007C5__8S21007C2__8S21007C1[6]),  6,9},
  {&(_tg__ZTV8S21007C3__8S21007C1[4]),  4,7},
  {&(_tg__ZTV8S21007C5__8S21007C3__8S21007C1[6]),  6,9},
  {&(_tg__ZTV8S21007C5__8S21007C1[3]),  3,6},
  {&(_tg__ZTV8S21007C68S21007C5__8S21007C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S21007C1[];
extern  VTBL_ENTRY _ZTV8S21007C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21007C1[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21007C1D0Ev,_ZTv0_n28_N8S21007C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2336_N8S21007C1D0Ev,_ZThn1632_N8S21007C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S21007C1D1Ev,_ZTv0_n28_N8S21007C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2336_N8S21007C1D1Ev,_ZThn1632_N8S21007C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21007C1 = {  "S21007C1", // class name
  bases_S21007C1, 8,
  &(vtc_S21007C1[0]), // expected_vtbl_contents
  &(vtt_S21007C1[0]), // expected_vtt_contents
  ABISELECT(6672,4644), // object size
  NSPAIRA(_ZTI8S21007C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21007C1),40, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21007C1),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1400C5_nt  {
  virtual void  v8(); // _ZN10S1400C5_nt2v8Ev
  ~S1400C5_nt(); // tgen
  S1400C5_nt(); // tgen
};
//SIG(-1 S1400C5_nt) C1{ v1}


void  S1400C5_nt ::v8(){vfunc_called(this, "_ZN10S1400C5_nt2v8Ev");}
S1400C5_nt ::~S1400C5_nt(){ note_dtor("S1400C5_nt", this);} // tgen
S1400C5_nt ::S1400C5_nt(){ note_ctor("S1400C5_nt", this);} // tgen

//skip512 S1400C5_nt

#else // __cplusplus

extern void _ZN10S1400C5_ntC1Ev();
extern void _ZN10S1400C5_ntD1Ev();
Name_Map name_map_S1400C5_nt[] = {
  NSPAIR(_ZN10S1400C5_ntC1Ev),
  NSPAIR(_ZN10S1400C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY vtc_S1400C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1400C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
VTBL_ENTRY *P__ZTI10S1400C5_nt = _ZTI10S1400C5_nt; 
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
Class_Descriptor cd_S1400C5_nt = {  "S1400C5_nt", // class name
  0,0,//no base classes
  &(vtc_S1400C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1400C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1400C5_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

union  S1400C6  {
  __tsi64 s1400c6f0[4];
  __tsi64 s1400c6f1;
  void  mf1400c6(); // _ZN7S1400C68mf1400c6Ev
};
//SIG(1 S1400C6) U1{ m FL[4] FL}

#endif // __cplusplus
#ifdef __cplusplus

struct  S1400C4  {
  ::S1400C5_nt s1400c4f0;
  int s1400c4f1;
  ::S1400C6 s1400c4f2[6];
  virtual void  v4(); // _ZN7S1400C42v4Ev
  virtual void  v5(); // _ZN7S1400C42v5Ev
  virtual void  v6(); // _ZN7S1400C42v6Ev
  virtual void  v7(); // _ZN7S1400C42v7Ev
  ~S1400C4(); // tgen
  S1400C4(); // tgen
};
//SIG(-1 S1400C4) C1{ v1 v2 v3 v4 FC2{ v5} Fi FU3{ m FL[4] FL}[6]}


void  S1400C4 ::v4(){vfunc_called(this, "_ZN7S1400C42v4Ev");}
void  S1400C4 ::v5(){vfunc_called(this, "_ZN7S1400C42v5Ev");}
void  S1400C4 ::v6(){vfunc_called(this, "_ZN7S1400C42v6Ev");}
void  S1400C4 ::v7(){vfunc_called(this, "_ZN7S1400C42v7Ev");}
S1400C4 ::~S1400C4(){ note_dtor("S1400C4", this);} // tgen
S1400C4 ::S1400C4(){ note_ctor("S1400C4", this);} // tgen

static void Test_S1400C4()
{
  extern Class_Descriptor cd_S1400C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,52)];
    init_test(&cd_S1400C4, buf);
    S1400C4 *dp, &lv = *(dp=new (buf) S1400C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,204), "sizeof(S1400C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C4)");
    check_field_offset(lv, s1400c4f0, ABISELECT(8,4), "S1400C4.s1400c4f0");
    check_field_offset(lv, s1400c4f1, ABISELECT(16,8), "S1400C4.s1400c4f1");
    check_field_offset(lv, s1400c4f2, ABISELECT(24,12), "S1400C4.s1400c4f2");
    test_class_info(&lv, &cd_S1400C4);
    dp->~S1400C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C4(Test_S1400C4, "S1400C4", ABISELECT(216,204));

#else // __cplusplus

extern void _ZN7S1400C4C1Ev();
extern void _ZN7S1400C4D1Ev();
Name_Map name_map_S1400C4[] = {
  NSPAIR(_ZN7S1400C4C1Ev),
  NSPAIR(_ZN7S1400C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1400C4[];
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
static  VTBL_ENTRY vtc_S1400C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C4[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
Class_Descriptor cd_S1400C4 = {  "S1400C4", // class name
  0,0,//no base classes
  &(vtc_S1400C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,204), // object size
  NSPAIRA(_ZTI7S1400C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1400C4),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1400C7_nt  {
  int s1400c7f0;
  virtual void  v17(); // _ZN10S1400C7_nt3v17Ev
  ~S1400C7_nt(); // tgen
  S1400C7_nt(); // tgen
};
//SIG(-1 S1400C7_nt) C1{ v1 Fi}


void  S1400C7_nt ::v17(){vfunc_called(this, "_ZN10S1400C7_nt3v17Ev");}
S1400C7_nt ::~S1400C7_nt(){ note_dtor("S1400C7_nt", this);} // tgen
S1400C7_nt ::S1400C7_nt(){ note_ctor("S1400C7_nt", this);} // tgen

//skip512 S1400C7_nt

#else // __cplusplus

extern void _ZN10S1400C7_ntC1Ev();
extern void _ZN10S1400C7_ntD1Ev();
Name_Map name_map_S1400C7_nt[] = {
  NSPAIR(_ZN10S1400C7_ntC1Ev),
  NSPAIR(_ZN10S1400C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY vtc_S1400C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1400C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
VTBL_ENTRY *P__ZTI10S1400C7_nt = _ZTI10S1400C7_nt; 
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
Class_Descriptor cd_S1400C7_nt = {  "S1400C7_nt", // class name
  0,0,//no base classes
  &(vtc_S1400C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S1400C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1400C7_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  S1400C10  {
  void *s1400c10f0[4];
  virtual void  v9(); // _ZN8S1400C102v9Ev
  virtual void  v10(); // _ZN8S1400C103v10Ev
  virtual void  v11(); // _ZN8S1400C103v11Ev
  virtual void  v12(); // _ZN8S1400C103v12Ev
  virtual void  v13(); // _ZN8S1400C103v13Ev
  virtual void  v14(); // _ZN8S1400C103v14Ev
  ~S1400C10(); // tgen
  S1400C10(); // tgen
};
//SIG(-1 S1400C10) C1{ v1 v2 v3 v4 v5 v6 Fp[4]}


void  S1400C10 ::v9(){vfunc_called(this, "_ZN8S1400C102v9Ev");}
void  S1400C10 ::v10(){vfunc_called(this, "_ZN8S1400C103v10Ev");}
void  S1400C10 ::v11(){vfunc_called(this, "_ZN8S1400C103v11Ev");}
void  S1400C10 ::v12(){vfunc_called(this, "_ZN8S1400C103v12Ev");}
void  S1400C10 ::v13(){vfunc_called(this, "_ZN8S1400C103v13Ev");}
void  S1400C10 ::v14(){vfunc_called(this, "_ZN8S1400C103v14Ev");}
S1400C10 ::~S1400C10(){ note_dtor("S1400C10", this);} // tgen
S1400C10 ::S1400C10(){ note_ctor("S1400C10", this);} // tgen

static void Test_S1400C10()
{
  extern Class_Descriptor cd_S1400C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S1400C10, buf);
    S1400C10 *dp, &lv = *(dp=new (buf) S1400C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S1400C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C10)");
    check_field_offset(lv, s1400c10f0, ABISELECT(8,4), "S1400C10.s1400c10f0");
    test_class_info(&lv, &cd_S1400C10);
    dp->~S1400C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C10(Test_S1400C10, "S1400C10", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S1400C10C1Ev();
extern void _ZN8S1400C10D1Ev();
Name_Map name_map_S1400C10[] = {
  NSPAIR(_ZN8S1400C10C1Ev),
  NSPAIR(_ZN8S1400C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1400C10[];
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY vtc_S1400C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C10[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
Class_Descriptor cd_S1400C10 = {  "S1400C10", // class name
  0,0,//no base classes
  &(vtc_S1400C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S1400C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1400C10),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  S1400C9  : S1400C10 {
  __tsi64 s1400c9f0;
  virtual  ~S1400C9(); // _ZN7S1400C9D1Ev
  virtual void  v15(); // _ZN7S1400C93v15Ev
  virtual void  v16(); // _ZN7S1400C93v16Ev
  S1400C9(); // tgen
};
//SIG(-1 S1400C9) C1{ BC2{ v3 v4 v5 v6 v7 v8 Fp[4]} vd v1 v2 FL}


 S1400C9 ::~S1400C9(){ note_dtor("S1400C9", this);}
void  S1400C9 ::v15(){vfunc_called(this, "_ZN7S1400C93v15Ev");}
void  S1400C9 ::v16(){vfunc_called(this, "_ZN7S1400C93v16Ev");}
S1400C9 ::S1400C9(){ note_ctor("S1400C9", this);} // tgen

static void Test_S1400C9()
{
  extern Class_Descriptor cd_S1400C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1400C9, buf);
    S1400C9 *dp, &lv = *(dp=new (buf) S1400C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1400C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C9)");
    check_base_class_offset(lv, (S1400C10*), 0, "S1400C9");
    check_field_offset(lv, s1400c9f0, ABISELECT(40,20), "S1400C9.s1400c9f0");
    test_class_info(&lv, &cd_S1400C9);
    dp->~S1400C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C9(Test_S1400C9, "S1400C9", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1400C9C1Ev();
extern void _ZN7S1400C9D1Ev();
Name_Map name_map_S1400C9[] = {
  NSPAIR(_ZN7S1400C9C1Ev),
  NSPAIR(_ZN7S1400C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
static Base_Class bases_S1400C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1400C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S1400C9[];
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN7S1400C9D1Ev();
extern void _ZN7S1400C9D0Ev();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY vtc_S1400C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C9[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&_ZN7S1400C9D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C9D0Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
Class_Descriptor cd_S1400C9 = {  "S1400C9", // class name
  bases_S1400C9, 1,
  &(vtc_S1400C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1400C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1400C9),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  S1400C8  : S1400C5_nt , S1400C9 , virtual S1400C7_nt {
  int s1400c8f0;
  ::S20677C6_nt s1400c8f1;
  virtual void  v18(); // _ZN7S1400C83v18Ev
  virtual void  v19(); // _ZN7S1400C83v19Ev
  ~S1400C8(); // tgen
  S1400C8(); // tgen
};
//SIG(-1 S1400C8) C1{ BC2{ v3} BC3{ BC4{ v4 v5 v6 v7 v8 v9 Fp[4]} vd v10 v11 FL} VBC5{ v12 Fi} v1 v2 Fi FC6{}}


void  S1400C8 ::v18(){vfunc_called(this, "_ZN7S1400C83v18Ev");}
void  S1400C8 ::v19(){vfunc_called(this, "_ZN7S1400C83v19Ev");}
S1400C8 ::~S1400C8(){ note_dtor("S1400C8", this);} // tgen
S1400C8 ::S1400C8(){ note_ctor("S1400C8", this);} // tgen

static void Test_S1400C8()
{
  extern Class_Descriptor cd_S1400C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S1400C8, buf);
    S1400C8 *dp, &lv = *(dp=new (buf) S1400C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S1400C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C8)");
    check_base_class_offset(lv, (S1400C5_nt*), 0, "S1400C8");
    check_base_class_offset(lv, (S1400C10*)(S1400C9*), ABISELECT(8,4), "S1400C8");
    check_base_class_offset(lv, (S1400C9*), ABISELECT(8,4), "S1400C8");
    check_base_class_offset(lv, (S1400C7_nt*), ABISELECT(64,40), "S1400C8");
    check_field_offset(lv, s1400c8f0, ABISELECT(56,32), "S1400C8.s1400c8f0");
    check_field_offset(lv, s1400c8f1, ABISELECT(60,36), "S1400C8.s1400c8f1");
    test_class_info(&lv, &cd_S1400C8);
    dp->~S1400C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C8(Test_S1400C8, "S1400C8", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S1400C8C1Ev();
extern void _ZN7S1400C8D1Ev();
Name_Map name_map_S1400C8[] = {
  NSPAIR(_ZN7S1400C8C1Ev),
  NSPAIR(_ZN7S1400C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
static Base_Class bases_S1400C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1400C5_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},
  {&cd_S1400C10,    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
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_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_S1400C7_nt,    ABISELECT(64,40), //bcp->offset
    20, //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 _ZTI7S1400C8[];
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZThn8_N7S1400C8D1Ev,_ZThn4_N7S1400C8D1Ev)();
extern void ABISELECT(_ZThn8_N7S1400C8D0Ev,_ZThn4_N7S1400C8D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY vtc_S1400C8[] = {
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1400C8D1Ev,_ZThn4_N7S1400C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1400C8D0Ev,_ZThn4_N7S1400C8D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern VTBL_ENTRY _ZTV7S1400C8[];
static  VTT_ENTRY vtt_S1400C8[] = {
  {&(_ZTV7S1400C8[3]),  3,24},
  {&(_ZTV7S1400C8[23]),  23,24},
};
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
Class_Descriptor cd_S1400C8 = {  "S1400C8", // class name
  bases_S1400C8, 4,
  &(vtc_S1400C8[0]), // expected_vtbl_contents
  &(vtt_S1400C8[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S1400C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1400C8),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1400C8),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

struct  S1400C13  {
  short s1400c13f0:16;
  __tsi64 s1400c13f1;
  void *s1400c13f2[8];
  virtual void  v20(); // _ZN8S1400C133v20Ev
  virtual void  v21(); // _ZN8S1400C133v21Ev
  ~S1400C13(); // tgen
  S1400C13(); // tgen
};
//SIG(-1 S1400C13) C1{ v1 v2 Fs:16 FL Fp[8]}


void  S1400C13 ::v20(){vfunc_called(this, "_ZN8S1400C133v20Ev");}
void  S1400C13 ::v21(){vfunc_called(this, "_ZN8S1400C133v21Ev");}
S1400C13 ::~S1400C13(){ note_dtor("S1400C13", this);} // tgen
S1400C13 ::S1400C13(){ note_ctor("S1400C13", this);} // tgen

static void Test_S1400C13()
{
  extern Class_Descriptor cd_S1400C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S1400C13, buf);
    S1400C13 *dp, &lv = *(dp=new (buf) S1400C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S1400C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C13)");
    set_bf_and_test(lv, s1400c13f0, ABISELECT(8,4), 0, 16, 1, "S1400C13");
    set_bf_and_test(lv, s1400c13f0, ABISELECT(8,4), 0, 16, hide_sll(1LL<<15), "S1400C13");
    check_field_offset(lv, s1400c13f1, ABISELECT(16,8), "S1400C13.s1400c13f1");
    check_field_offset(lv, s1400c13f2, ABISELECT(24,16), "S1400C13.s1400c13f2");
    test_class_info(&lv, &cd_S1400C13);
    dp->~S1400C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C13(Test_S1400C13, "S1400C13", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S1400C13C1Ev();
extern void _ZN8S1400C13D1Ev();
Name_Map name_map_S1400C13[] = {
  NSPAIR(_ZN8S1400C13C1Ev),
  NSPAIR(_ZN8S1400C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S1400C13[];
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY vtc_S1400C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C13[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern VTBL_ENTRY _ZTI8S1400C13[];
extern  VTBL_ENTRY _ZTV8S1400C13[];
Class_Descriptor cd_S1400C13 = {  "S1400C13", // class name
  0,0,//no base classes
  &(vtc_S1400C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S1400C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S1400C13),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  S1400C12  : S1400C7_nt , S1400C13 , S1400C5_nt , virtual S1400C9 , S1400C10 {
  int s1400c12f0;
  virtual  ~S1400C12(); // _ZN8S1400C12D2Ev
  virtual void  v22(); // _ZN8S1400C123v22Ev
  virtual void  v23(); // _ZN8S1400C123v23Ev
  virtual void  v24(); // _ZN8S1400C123v24Ev
  S1400C12(); // tgen
};
//SIG(-1 S1400C12) C1{ BC2{ v4 Fi} BC3{ v5 v6 Fs:16 FL Fp[8]} BC4{ v7} VBC5{ BC6{ v8 v9 v10 v11 v12 v13 Fp[4]} vd v14 v15 FL} BC6 vd v1 v2 v3 Fi}


 S1400C12 ::~S1400C12(){ note_dtor("S1400C12", this);}
void  S1400C12 ::v22(){vfunc_called(this, "_ZN8S1400C123v22Ev");}
void  S1400C12 ::v23(){vfunc_called(this, "_ZN8S1400C123v23Ev");}
void  S1400C12 ::v24(){vfunc_called(this, "_ZN8S1400C123v24Ev");}
S1400C12 ::S1400C12(){ note_ctor("S1400C12", this);} // tgen

static void Test_S1400C12()
{
  extern Class_Descriptor cd_S1400C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,29)];
    init_test(&cd_S1400C12, buf);
    S1400C12 *dp, &lv = *(dp=new (buf) S1400C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,112), "sizeof(S1400C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C12)");
    check_base_class_offset(lv, (S1400C7_nt*), 0, "S1400C12");
    check_base_class_offset(lv, (S1400C13*), ABISELECT(16,8), "S1400C12");
    check_base_class_offset(lv, (S1400C5_nt*), ABISELECT(104,56), "S1400C12");
    check_base_class_offset(lv, (S1400C10*)(S1400C9*), ABISELECT(160,84), "S1400C12");
    check_base_class_offset(lv, (S1400C9*), ABISELECT(160,84), "S1400C12");
    /*is_ambiguous_... S1400C12::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*), ABISELECT(112,60), "S1400C12");
    check_field_offset(lv, s1400c12f0, ABISELECT(152,80), "S1400C12.s1400c12f0");
    test_class_info(&lv, &cd_S1400C12);
    dp->~S1400C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C12(Test_S1400C12, "S1400C12", ABISELECT(208,112));

#else // __cplusplus

extern void _ZN8S1400C12C1Ev();
extern void _ZN8S1400C12D2Ev();
Name_Map name_map_S1400C12[] = {
  NSPAIR(_ZN8S1400C12C1Ev),
  NSPAIR(_ZN8S1400C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C13;
extern VTBL_ENTRY _ZTI8S1400C13[];
extern  VTBL_ENTRY _ZTV8S1400C13[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
static Base_Class bases_S1400C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1400C7_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},
  {&cd_S1400C13,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_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_S1400C5_nt,    ABISELECT(104,56), //bcp->offset
    13, //bcp->virtual_function_table_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_S1400C10,    ABISELECT(160,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1400C9,    ABISELECT(160,84), //bcp->offset
    24, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1400C10,    ABISELECT(112,60), //bcp->offset
    16, //bcp->virtual_function_table_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 _ZTI8S1400C12[];
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN8S1400C12D1Ev();
extern void _ZN8S1400C12D0Ev();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY vtc_S1400C12[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern VTBL_ENTRY _ZTV8S1400C12[];
static  VTT_ENTRY vtt_S1400C12[] = {
  {&(_ZTV8S1400C12[3]),  3,45},
  {&(_ZTV8S1400C12[35]),  35,45},
};
extern VTBL_ENTRY _ZTI8S1400C12[];
extern  VTBL_ENTRY _ZTV8S1400C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C12[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1400C12 = {  "S1400C12", // class name
  bases_S1400C12, 6,
  &(vtc_S1400C12[0]), // expected_vtbl_contents
  &(vtt_S1400C12[0]), // expected_vtt_contents
  ABISELECT(208,112), // object size
  NSPAIRA(_ZTI8S1400C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S1400C12),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1400C12),2, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1400C3  : S1400C4 , virtual S1400C7_nt , S1400C8 , virtual S1400C12 , virtual S1400C10 {
  int s1400c3f0[2];
  virtual void  v25(); // _ZN7S1400C33v25Ev
  virtual void  v26(); // _ZN7S1400C33v26Ev
  virtual void  v27(); // _ZN7S1400C33v27Ev
  ~S1400C3(); // tgen
  S1400C3(); // tgen
};
//SIG(-1 S1400C3) C1{ BC2{ v4 v5 v6 v7 FC3{ v9} Fi FU4{ m FL[4] FL}[6]} VBC5{ v8 Fi} BC6{ BC3 BC7{ BC8{ v10 v11 v12 v13 v14 v15 Fp[4]} vd v16 v17 FL} VBC5 v18 v19 Fi FC9{}} VBC10{ BC5 BC11{ v20 v21 Fs:16 FL Fp[8]} BC3 VBC7 BC8 vd v22 v23 v24 Fi} VBC8 v1 v2 v3 Fi[2]}


void  S1400C3 ::v25(){vfunc_called(this, "_ZN7S1400C33v25Ev");}
void  S1400C3 ::v26(){vfunc_called(this, "_ZN7S1400C33v26Ev");}
void  S1400C3 ::v27(){vfunc_called(this, "_ZN7S1400C33v27Ev");}
S1400C3 ::~S1400C3(){ note_dtor("S1400C3", this);} // tgen
S1400C3 ::S1400C3(){ note_ctor("S1400C3", this);} // tgen

static void Test_S1400C3()
{
  extern Class_Descriptor cd_S1400C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(70,99)];
    init_test(&cd_S1400C3, buf);
    S1400C3 *dp, &lv = *(dp=new (buf) S1400C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(552,392), "sizeof(S1400C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C3)");
    check_base_class_offset(lv, (S1400C4*), 0, "S1400C3");
    /*is_ambiguous_... S1400C3::S1400C7_nt */ AMB_check_base_class_offset(lv, (S1400C7_nt*), ABISELECT(288,252), "S1400C3");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*), ABISELECT(288,252), "S1400C3");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*), ABISELECT(216,204), "S1400C3");
    check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*), ABISELECT(224,208), "S1400C3");
    check_base_class_offset(lv, (S1400C9*)(S1400C8*), ABISELECT(224,208), "S1400C3");
    check_base_class_offset(lv, (S1400C8*), ABISELECT(216,204), "S1400C3");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C12*), ABISELECT(304,260), "S1400C3");
    check_base_class_offset(lv, (S1400C13*)(S1400C12*), ABISELECT(320,268), "S1400C3");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C12*), ABISELECT(408,316), "S1400C3");
    /*is_ambiguous_... S1400C3::S1400C9 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*), ABISELECT(464,344), "S1400C3");
    check_base_class_offset(lv, (S1400C9*)(S1400C12*), ABISELECT(464,344), "S1400C3");
    /*is_ambiguous_... S1400C12::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C12*), ABISELECT(416,320), "S1400C3");
    check_base_class_offset(lv, (S1400C12*), ABISELECT(304,260), "S1400C3");
    /*is_ambiguous_... S1400C3::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*), ABISELECT(512,372), "S1400C3");
    check_field_offset(lv, s1400c3f0, ABISELECT(280,244), "S1400C3.s1400c3f0");
    test_class_info(&lv, &cd_S1400C3);
    dp->~S1400C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C3(Test_S1400C3, "S1400C3", ABISELECT(552,392));

#else // __cplusplus

extern void _ZN7S1400C3C1Ev();
extern void _ZN7S1400C3D1Ev();
Name_Map name_map_S1400C3[] = {
  NSPAIR(_ZN7S1400C3C1Ev),
  NSPAIR(_ZN7S1400C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1400C4;
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C13;
extern VTBL_ENTRY _ZTI8S1400C13[];
extern  VTBL_ENTRY _ZTV8S1400C13[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C12;
extern VTBL_ENTRY _ZTI8S1400C12[];
extern  VTBL_ENTRY _ZTV8S1400C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C12[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
static Base_Class bases_S1400C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1400C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S1400C7_nt,    ABISELECT(288,252), //bcp->offset
    35, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1400C5_nt,    ABISELECT(216,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
    11, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(224,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
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(224,208), //bcp->offset
    23, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(216,204), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1400C7_nt,    ABISELECT(304,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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C13,    ABISELECT(320,268), //bcp->offset
    62, //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
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(408,316), //bcp->offset
    66, //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
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(464,344), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(464,344), //bcp->offset
    77, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S1400C10,    ABISELECT(416,320), //bcp->offset
    69, //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
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C12,    ABISELECT(304,260), //bcp->offset
    39, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1400C10,    ABISELECT(512,372), //bcp->offset
    98, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1400C3[];
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C3D1Ev();
extern void _ZN7S1400C3D0Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZThn224_N7S1400C3D1Ev,_ZThn208_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn224_N7S1400C3D0Ev,_ZThn208_N7S1400C3D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn304_N7S1400C3D1Ev,_ZThn260_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn304_N7S1400C3D0Ev,_ZThn260_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn464_N7S1400C3D1Ev,_ZThn344_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn464_N7S1400C3D0Ev,_ZThn344_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY vtc_S1400C3[] = {
  ABISELECT(512,372),
  ABISELECT(464,344),
  ABISELECT(304,260),
  ABISELECT(288,252),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D0Ev,
  ABISELECT(72,48),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev),
  ABISELECT(-224,-208),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S1400C3D1Ev,_ZThn208_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S1400C3D0Ev,_ZThn208_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  ABISELECT(-288,-252),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-304,-260),
  0,
  ABISELECT(160,84),
  ABISELECT(-304,-260),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
  ABISELECT(-320,-268),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
  ABISELECT(-408,-316),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  ABISELECT(-416,-320),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  0,
  0,
  ABISELECT(-464,-344),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-464,-344),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-512,-372),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern VTBL_ENTRY _ZTV7S1400C3[];
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C8__7S1400C3[] = {
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C8__7S1400C3[] = {
  0,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN8S1400C12D1Ev();
extern void _ZN8S1400C12D0Ev();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C3[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__8S1400C12__7S1400C3[] = {
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
static  VTT_ENTRY vtt_S1400C3[] = {
  {&(_ZTV7S1400C3[6]),  6,112},
  {&(_tg__ZTV7S1400C8__7S1400C3[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C8__7S1400C3[3]),  3,4},
  {&(_ZTV7S1400C3[38]),  38,112},
  {&(_ZTV7S1400C3[18]),  18,112},
  {&(_ZTV7S1400C3[56]),  56,112},
  {&(_ZTV7S1400C3[64]),  64,112},
  {&(_ZTV7S1400C3[68]),  68,112},
  {&(_ZTV7S1400C3[88]),  88,112},
  {&(_ZTV7S1400C3[71]),  71,112},
  {&(_ZTV7S1400C3[106]),  106,112},
  {&(_tg__ZTV8S1400C12__7S1400C3[3]),  3,9},
  {&(_tg__ZTV7S1400C9__8S1400C12__7S1400C3[11]),  11,21},
};
extern VTBL_ENTRY _ZTI7S1400C3[];
extern  VTBL_ENTRY _ZTV7S1400C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C3[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S1400C3D0Ev,_ZThn344_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S1400C3D1Ev,_ZThn344_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1400C3D0Ev,_ZThn260_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1400C3D1Ev,_ZThn260_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1400C3 = {  "S1400C3", // class name
  bases_S1400C3, 14,
  &(vtc_S1400C3[0]), // expected_vtbl_contents
  &(vtt_S1400C3[0]), // expected_vtt_contents
  ABISELECT(552,392), // object size
  NSPAIRA(_ZTI7S1400C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1400C3),112, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1400C3),13, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1400C2  : S1400C3 , S1400C10 , S1400C8 {
  virtual  ~S1400C2(); // _ZN7S1400C2D2Ev
  virtual void  v28(); // _ZN7S1400C23v28Ev
  S1400C2(); // tgen
};
//SIG(-1 S1400C2) C1{ BC2{ BC3{ v2 v3 v4 v5 FC4{ v7} Fi FU5{ m FL[4] FL}[6]} VBC6{ v6 Fi} BC7{ BC4 BC8{ BC9{ v8 v9 v10 v11 v12 v13 Fp[4]} vd v14 v15 FL} VBC6 v16 v17 Fi FC10{}} VBC11{ BC6 BC12{ v18 v19 Fs:16 FL Fp[8]} BC4 VBC8 BC9 vd v20 v21 v22 Fi} VBC9 v23 v24 v25 Fi[2]} BC9 BC7 vd v1}


 S1400C2 ::~S1400C2(){ note_dtor("S1400C2", this);}
void  S1400C2 ::v28(){vfunc_called(this, "_ZN7S1400C23v28Ev");}
S1400C2 ::S1400C2(){ note_ctor("S1400C2", this);} // tgen

static void Test_S1400C2()
{
  extern Class_Descriptor cd_S1400C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(83,114)];
    init_test(&cd_S1400C2, buf);
    S1400C2 *dp, &lv = *(dp=new (buf) S1400C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(656,452), "sizeof(S1400C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C2)");
    check_base_class_offset(lv, (S1400C4*)(S1400C3*), 0, "S1400C2");
    /*is_ambiguous_... S1400C3::S1400C7_nt */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C3*), ABISELECT(392,312), "S1400C2");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C3*), ABISELECT(392,312), "S1400C2");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*), ABISELECT(392,312), "S1400C2");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C3*), ABISELECT(216,204), "S1400C2");
    check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C3*), ABISELECT(224,208), "S1400C2");
    check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C3*), ABISELECT(224,208), "S1400C2");
    check_base_class_offset(lv, (S1400C8*)(S1400C3*), ABISELECT(216,204), "S1400C2");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C12*), ABISELECT(408,320), "S1400C2");
    check_base_class_offset(lv, (S1400C13*)(S1400C12*), ABISELECT(424,328), "S1400C2");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C12*), ABISELECT(512,376), "S1400C2");
    /*is_ambiguous_... S1400C2::S1400C9 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*), ABISELECT(568,404), "S1400C2");
    check_base_class_offset(lv, (S1400C9*)(S1400C12*), ABISELECT(568,404), "S1400C2");
    /*is_ambiguous_... S1400C12::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C12*), ABISELECT(520,380), "S1400C2");
    check_base_class_offset(lv, (S1400C12*)(S1400C3*), ABISELECT(408,320), "S1400C2");
    /*is_ambiguous_... S1400C3::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C3*), ABISELECT(616,432), "S1400C2");
    check_base_class_offset(lv, (S1400C3*), 0, "S1400C2");
    /*is_ambiguous_... S1400C2::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*), ABISELECT(288,252), "S1400C2");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*), ABISELECT(328,272), "S1400C2");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*), ABISELECT(336,276), "S1400C2");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C9*)(S1400C8*), ABISELECT(336,276), "S1400C2");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C8*), ABISELECT(328,272), "S1400C2");
    test_class_info(&lv, &cd_S1400C2);
    dp->~S1400C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C2(Test_S1400C2, "S1400C2", ABISELECT(656,452));

#else // __cplusplus

extern void _ZN7S1400C2C1Ev();
extern void _ZN7S1400C2D2Ev();
Name_Map name_map_S1400C2[] = {
  NSPAIR(_ZN7S1400C2C1Ev),
  NSPAIR(_ZN7S1400C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1400C4;
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C13;
extern VTBL_ENTRY _ZTI8S1400C13[];
extern  VTBL_ENTRY _ZTV8S1400C13[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C12;
extern VTBL_ENTRY _ZTI8S1400C12[];
extern  VTBL_ENTRY _ZTV8S1400C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C12[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C3;
extern VTBL_ENTRY _ZTI7S1400C3[];
extern  VTBL_ENTRY _ZTV7S1400C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C3[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
static Base_Class bases_S1400C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1400C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1400C7_nt,    ABISELECT(392,312), //bcp->offset
    64, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S1400C5_nt,    ABISELECT(216,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
    11, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(224,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
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(224,208), //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
    13, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(216,204), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1400C7_nt,    ABISELECT(408,320), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S1400C13,    ABISELECT(424,328), //bcp->offset
    91, //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
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(512,376), //bcp->offset
    95, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(568,404), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(568,404), //bcp->offset
    106, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S1400C10,    ABISELECT(520,380), //bcp->offset
    98, //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
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C12,    ABISELECT(408,320), //bcp->offset
    68, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1400C10,    ABISELECT(616,432), //bcp->offset
    127, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1400C3,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1400C10,    ABISELECT(288,252), //bcp->offset
    36, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S1400C5_nt,    ABISELECT(328,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
    17, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(336,276), //bcp->offset
    -1, //bcp->virtual_function_table_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
    18, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(336,276), //bcp->offset
    52, //bcp->virtual_function_table_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
    19, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(328,272), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1400C2[];
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C2D1Ev();
extern void _ZN7S1400C2D0Ev();
extern void _ZN7S1400C23v28Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C2D1Ev,_ZThn204_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C2D0Ev,_ZThn204_N7S1400C2D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZThn224_N7S1400C2D1Ev,_ZThn208_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn224_N7S1400C2D0Ev,_ZThn208_N7S1400C2D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn328_N7S1400C2D1Ev,_ZThn272_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn328_N7S1400C2D0Ev,_ZThn272_N7S1400C2D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZThn336_N7S1400C2D1Ev,_ZThn276_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn336_N7S1400C2D0Ev,_ZThn276_N7S1400C2D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn408_N7S1400C2D1Ev,_ZThn320_N7S1400C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev)();
extern void ABISELECT(_ZThn408_N7S1400C2D0Ev,_ZThn320_N7S1400C2D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn568_N7S1400C2D1Ev,_ZThn404_N7S1400C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev)();
extern void ABISELECT(_ZThn568_N7S1400C2D0Ev,_ZThn404_N7S1400C2D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY vtc_S1400C2[] = {
  ABISELECT(616,432),
  ABISELECT(568,404),
  ABISELECT(408,320),
  ABISELECT(392,312),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1400C23v28Ev,
  ABISELECT(176,108),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C2D1Ev,_ZThn204_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C2D0Ev,_ZThn204_N7S1400C2D0Ev),
  ABISELECT(-224,-208),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S1400C2D1Ev,_ZThn208_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S1400C2D0Ev,_ZThn208_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  ABISELECT(-288,-252),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  ABISELECT(64,40),
  ABISELECT(-328,-272),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C2D1Ev,_ZThn272_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C2D0Ev,_ZThn272_N7S1400C2D0Ev),
  ABISELECT(-336,-276),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N7S1400C2D1Ev,_ZThn276_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N7S1400C2D0Ev,_ZThn276_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  ABISELECT(-392,-312),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-408,-320),
  0,
  ABISELECT(160,84),
  ABISELECT(-408,-320),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
  ABISELECT(-424,-328),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
  ABISELECT(-512,-376),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  ABISELECT(-520,-380),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  0,
  0,
  ABISELECT(-568,-404),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-568,-404),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-616,-432),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern VTBL_ENTRY _ZTV7S1400C2[];
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C3D1Ev();
extern void _ZN7S1400C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C3__7S1400C2[] = {
  ABISELECT(616,432),
  ABISELECT(568,404),
  ABISELECT(408,320),
  ABISELECT(392,312),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D0Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__7S1400C2[] = {
  ABISELECT(176,108),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C3__7S1400C2[] = {
  0,
  ABISELECT(-176,-108),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C3__7S1400C2[] = {
  0,
  ABISELECT(-392,-312),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__7S1400C3__7S1400C2[] = {
  ABISELECT(176,108),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn408_N7S1400C3D1Ev,_ZThn320_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn408_N7S1400C3D0Ev,_ZThn320_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C3__7S1400C2[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-408,-320),
  0,
  ABISELECT(160,84),
  ABISELECT(-408,-320),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C3__7S1400C2[] = {
  ABISELECT(-424,-328),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C3__7S1400C2[] = {
  ABISELECT(-512,-376),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn568_N7S1400C3D1Ev,_ZThn404_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn568_N7S1400C3D0Ev,_ZThn404_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C3__7S1400C2[] = {
  0,
  0,
  ABISELECT(-568,-404),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-568,-404),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C3__7S1400C2[] = {
  ABISELECT(-520,-380),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C3__7S1400C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-616,-432),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C8__A1__7S1400C2[] = {
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C8__A1__7S1400C2[] = {
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN8S1400C12D1Ev();
extern void _ZN8S1400C12D0Ev();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C2[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__8S1400C12__7S1400C2[] = {
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
static  VTT_ENTRY vtt_S1400C2[] = {
  {&(_ZTV7S1400C2[6]),  6,141},
  {&(_tg__ZTV7S1400C3__7S1400C2[6]),  6,15},
  {&(_tg__ZTV7S1400C87S1400C3__7S1400C2[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C3__7S1400C2[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C3__7S1400C2[3]),  3,4},
  {&(_tg__ZTV7S1400C8__7S1400C3__7S1400C2[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C3__7S1400C2[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C3__7S1400C2[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C3__7S1400C2[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C3__7S1400C2[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C3__7S1400C2[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C3__7S1400C2[8]),  8,14},
  {&(_tg__ZTV7S1400C8__A1__7S1400C2[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C8__A1__7S1400C2[3]),  3,4},
  {&(_ZTV7S1400C2[67]),  67,141},
  {&(_ZTV7S1400C2[19]),  19,141},
  {&(_ZTV7S1400C2[85]),  85,141},
  {&(_ZTV7S1400C2[93]),  93,141},
  {&(_ZTV7S1400C2[97]),  97,141},
  {&(_ZTV7S1400C2[117]),  117,141},
  {&(_ZTV7S1400C2[100]),  100,141},
  {&(_ZTV7S1400C2[135]),  135,141},
  {&(_ZTV7S1400C2[47]),  47,141},
  {&(_tg__ZTV8S1400C12__7S1400C2[3]),  3,9},
  {&(_tg__ZTV7S1400C9__8S1400C12__7S1400C2[11]),  11,21},
};
extern VTBL_ENTRY _ZTI7S1400C2[];
extern  VTBL_ENTRY _ZTV7S1400C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C2[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn568_N7S1400C3D0Ev,_ZThn404_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn568_N7S1400C3D1Ev,_ZThn404_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S1400C3D0Ev,_ZThn320_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S1400C3D1Ev,_ZThn320_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn568_N7S1400C2D0Ev,_ZThn404_N7S1400C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn568_N7S1400C2D1Ev,_ZThn404_N7S1400C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S1400C2D0Ev,_ZThn320_N7S1400C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S1400C2D1Ev,_ZThn320_N7S1400C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1400C2 = {  "S1400C2", // class name
  bases_S1400C2, 20,
  &(vtc_S1400C2[0]), // expected_vtbl_contents
  &(vtt_S1400C2[0]), // expected_vtt_contents
  ABISELECT(656,452), // object size
  NSPAIRA(_ZTI7S1400C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1400C2),141, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1400C2),25, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1400C14_nt  {
  virtual void  v29(); // _ZN11S1400C14_nt3v29Ev
  virtual void  v30(); // _ZN11S1400C14_nt3v30Ev
  virtual void  v31(); // _ZN11S1400C14_nt3v31Ev
  ~S1400C14_nt(); // tgen
  S1400C14_nt(); // tgen
};
//SIG(-1 S1400C14_nt) C1{ v1 v2 v3}


void  S1400C14_nt ::v29(){vfunc_called(this, "_ZN11S1400C14_nt3v29Ev");}
void  S1400C14_nt ::v30(){vfunc_called(this, "_ZN11S1400C14_nt3v30Ev");}
void  S1400C14_nt ::v31(){vfunc_called(this, "_ZN11S1400C14_nt3v31Ev");}
S1400C14_nt ::~S1400C14_nt(){ note_dtor("S1400C14_nt", this);} // tgen
S1400C14_nt ::S1400C14_nt(){ note_ctor("S1400C14_nt", this);} // tgen

//skip512 S1400C14_nt

#else // __cplusplus

extern void _ZN11S1400C14_ntC1Ev();
extern void _ZN11S1400C14_ntD1Ev();
Name_Map name_map_S1400C14_nt[] = {
  NSPAIR(_ZN11S1400C14_ntC1Ev),
  NSPAIR(_ZN11S1400C14_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S1400C14_nt[];
extern void _ZN11S1400C14_nt3v29Ev();
extern void _ZN11S1400C14_nt3v30Ev();
extern void _ZN11S1400C14_nt3v31Ev();
static  VTBL_ENTRY vtc_S1400C14_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S1400C14_nt[0]),
  (VTBL_ENTRY)&_ZN11S1400C14_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S1400C14_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S1400C14_nt3v31Ev,
};
extern VTBL_ENTRY _ZTI11S1400C14_nt[];
VTBL_ENTRY *P__ZTI11S1400C14_nt = _ZTI11S1400C14_nt; 
extern  VTBL_ENTRY _ZTV11S1400C14_nt[];
Class_Descriptor cd_S1400C14_nt = {  "S1400C14_nt", // class name
  0,0,//no base classes
  &(vtc_S1400C14_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S1400C14_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S1400C14_nt),5, //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  S1400C17_nt  {
  virtual void  v32(); // _ZN11S1400C17_nt3v32Ev
  virtual void  v33(); // _ZN11S1400C17_nt3v33Ev
  ~S1400C17_nt(); // tgen
  S1400C17_nt(); // tgen
};
//SIG(-1 S1400C17_nt) C1{ v1 v2}


void  S1400C17_nt ::v32(){vfunc_called(this, "_ZN11S1400C17_nt3v32Ev");}
void  S1400C17_nt ::v33(){vfunc_called(this, "_ZN11S1400C17_nt3v33Ev");}
S1400C17_nt ::~S1400C17_nt(){ note_dtor("S1400C17_nt", this);} // tgen
S1400C17_nt ::S1400C17_nt(){ note_ctor("S1400C17_nt", this);} // tgen

//skip512 S1400C17_nt

#else // __cplusplus

extern void _ZN11S1400C17_ntC1Ev();
extern void _ZN11S1400C17_ntD1Ev();
Name_Map name_map_S1400C17_nt[] = {
  NSPAIR(_ZN11S1400C17_ntC1Ev),
  NSPAIR(_ZN11S1400C17_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S1400C17_nt[];
extern void _ZN11S1400C17_nt3v32Ev();
extern void _ZN11S1400C17_nt3v33Ev();
static  VTBL_ENTRY vtc_S1400C17_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S1400C17_nt[0]),
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v33Ev,
};
extern VTBL_ENTRY _ZTI11S1400C17_nt[];
VTBL_ENTRY *P__ZTI11S1400C17_nt = _ZTI11S1400C17_nt; 
extern  VTBL_ENTRY _ZTV11S1400C17_nt[];
Class_Descriptor cd_S1400C17_nt = {  "S1400C17_nt", // class name
  0,0,//no base classes
  &(vtc_S1400C17_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S1400C17_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S1400C17_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  S1400C16  : virtual S1400C10 , S1400C17_nt , virtual S1400C3 {
  virtual  ~S1400C16(); // _ZN8S1400C16D2Ev
  virtual void  v34(); // _ZN8S1400C163v34Ev
  virtual void  v35(); // _ZN8S1400C163v35Ev
  virtual void  v36(); // _ZN8S1400C163v36Ev
  virtual void  v37(); // _ZN8S1400C163v37Ev
  virtual void  v38(); // _ZN8S1400C163v38Ev
  S1400C16(); // tgen
};
//SIG(-1 S1400C16) C1{ VBC2{ v6 v7 v8 v9 v10 v11 Fp[4]} BC3{ v12 v13} VBC4{ BC5{ v14 v15 v16 v17 FC6{ v19} Fi FU7{ m FL[4] FL}[6]} VBC8{ v18 Fi} BC9{ BC6 BC10{ BC2 vd v20 v21 FL} VBC8 v22 v23 Fi FC11{}} VBC12{ BC8 BC13{ v24 v25 Fs:16 FL Fp[8]} BC6 VBC10 BC2 vd v26 v27 v28 Fi} VBC2 v29 v30 v31 Fi[2]} vd v1 v2 v3 v4 v5}


 S1400C16 ::~S1400C16(){ note_dtor("S1400C16", this);}
void  S1400C16 ::v34(){vfunc_called(this, "_ZN8S1400C163v34Ev");}
void  S1400C16 ::v35(){vfunc_called(this, "_ZN8S1400C163v35Ev");}
void  S1400C16 ::v36(){vfunc_called(this, "_ZN8S1400C163v36Ev");}
void  S1400C16 ::v37(){vfunc_called(this, "_ZN8S1400C163v37Ev");}
void  S1400C16 ::v38(){vfunc_called(this, "_ZN8S1400C163v38Ev");}
S1400C16 ::S1400C16(){ note_ctor("S1400C16", this);} // tgen

static void Test_S1400C16()
{
  extern Class_Descriptor cd_S1400C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(71,100)];
    init_test(&cd_S1400C16, buf);
    S1400C16 *dp, &lv = *(dp=new (buf) S1400C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,396), "sizeof(S1400C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C16)");
    /*is_ambiguous_... S1400C16::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*), ABISELECT(8,4), "S1400C16");
    /*is_ambiguous_... S1400C3::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C3*), ABISELECT(8,4), "S1400C16");
    check_base_class_offset(lv, (S1400C17_nt*), 0, "S1400C16");
    check_base_class_offset(lv, (S1400C4*)(S1400C3*), ABISELECT(48,24), "S1400C16");
    /*is_ambiguous_... S1400C3::S1400C7_nt */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C3*), ABISELECT(336,276), "S1400C16");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C3*), ABISELECT(336,276), "S1400C16");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C3*), ABISELECT(264,228), "S1400C16");
    check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C3*), ABISELECT(272,232), "S1400C16");
    check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C3*), ABISELECT(272,232), "S1400C16");
    check_base_class_offset(lv, (S1400C8*)(S1400C3*), ABISELECT(264,228), "S1400C16");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C12*), ABISELECT(352,284), "S1400C16");
    check_base_class_offset(lv, (S1400C13*)(S1400C12*), ABISELECT(368,292), "S1400C16");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C12*), ABISELECT(456,340), "S1400C16");
    /*is_ambiguous_... S1400C16::S1400C9 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*), ABISELECT(512,368), "S1400C16");
    check_base_class_offset(lv, (S1400C9*)(S1400C12*), ABISELECT(512,368), "S1400C16");
    /*is_ambiguous_... S1400C12::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C12*), ABISELECT(464,344), "S1400C16");
    check_base_class_offset(lv, (S1400C12*)(S1400C3*), ABISELECT(352,284), "S1400C16");
    check_base_class_offset(lv, (S1400C3*), ABISELECT(48,24), "S1400C16");
    test_class_info(&lv, &cd_S1400C16);
    dp->~S1400C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C16(Test_S1400C16, "S1400C16", ABISELECT(560,396));

#else // __cplusplus

extern void _ZN8S1400C16C1Ev();
extern void _ZN8S1400C16D2Ev();
Name_Map name_map_S1400C16[] = {
  NSPAIR(_ZN8S1400C16C1Ev),
  NSPAIR(_ZN8S1400C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C17_nt;
extern VTBL_ENTRY _ZTI11S1400C17_nt[];
extern  VTBL_ENTRY _ZTV11S1400C17_nt[];
extern Class_Descriptor cd_S1400C4;
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C13;
extern VTBL_ENTRY _ZTI8S1400C13[];
extern  VTBL_ENTRY _ZTV8S1400C13[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C12;
extern VTBL_ENTRY _ZTI8S1400C12[];
extern  VTBL_ENTRY _ZTV8S1400C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C12[];
extern Class_Descriptor cd_S1400C3;
extern VTBL_ENTRY _ZTI7S1400C3[];
extern  VTBL_ENTRY _ZTV7S1400C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C3[];
static Base_Class bases_S1400C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1400C10,    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
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1400C17_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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1400C4,    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
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1400C7_nt,    ABISELECT(336,276), //bcp->offset
    84, //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
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S1400C5_nt,    ABISELECT(264,228), //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(272,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
    12, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(272,232), //bcp->offset
    72, //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
    13, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(264,228), //bcp->offset
    64, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S1400C7_nt,    ABISELECT(352,284), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S1400C13,    ABISELECT(368,292), //bcp->offset
    111, //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
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(456,340), //bcp->offset
    115, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(512,368), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(512,368), //bcp->offset
    126, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1400C10,    ABISELECT(464,344), //bcp->offset
    118, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1400C12,    ABISELECT(352,284), //bcp->offset
    88, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S1400C3,    ABISELECT(48,24), //bcp->offset
    30, //bcp->virtual_function_table_offset
    25, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1400C16[];
extern void _ZN11S1400C17_nt3v32Ev();
extern void _ZN11S1400C17_nt3v33Ev();
extern void _ZN8S1400C16D1Ev();
extern void _ZN8S1400C16D0Ev();
extern void _ZN8S1400C163v34Ev();
extern void _ZN8S1400C163v35Ev();
extern void _ZN8S1400C163v36Ev();
extern void _ZN8S1400C163v37Ev();
extern void _ZN8S1400C163v38Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZThn48_N8S1400C16D1Ev,_ZThn24_N8S1400C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev)();
extern void ABISELECT(_ZThn48_N8S1400C16D0Ev,_ZThn24_N8S1400C16D0Ev)() __attribute__((weak));
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N8S1400C16D1Ev,_ZTvn204_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N8S1400C16D0Ev,_ZTvn204_n56_N8S1400C16D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N8S1400C16D1Ev,_ZTvn208_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N8S1400C16D0Ev,_ZTvn208_n56_N8S1400C16D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N8S1400C16D1Ev,_ZTv0_n20_N8S1400C16D1Ev)();
extern void ABISELECT(_ZThn352_N8S1400C16D1Ev,_ZThn284_N8S1400C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S1400C16D0Ev,_ZTv0_n20_N8S1400C16D0Ev)();
extern void ABISELECT(_ZThn352_N8S1400C16D0Ev,_ZThn284_N8S1400C16D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C16D1Ev,_ZTv0_n36_N8S1400C16D1Ev)();
extern void ABISELECT(_ZThn512_N8S1400C16D1Ev,_ZThn368_N8S1400C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C16D0Ev,_ZTv0_n36_N8S1400C16D0Ev)();
extern void ABISELECT(_ZThn512_N8S1400C16D0Ev,_ZThn368_N8S1400C16D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY vtc_S1400C16[] = {
  ABISELECT(512,368),
  ABISELECT(352,284),
  ABISELECT(336,276),
  ABISELECT(48,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S1400C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v34Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v35Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v36Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v37Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v38Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-48,-24),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(464,344),
  ABISELECT(304,260),
  ABISELECT(288,252),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev),
  ABISELECT(72,48),
  ABISELECT(-264,-228),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C16D1Ev,_ZTvn204_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C16D0Ev,_ZTvn204_n56_N8S1400C16D0Ev),
  ABISELECT(-272,-232),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C16D1Ev,_ZTvn208_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C16D0Ev,_ZTvn208_n56_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  ABISELECT(-336,-276),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-352,-284),
  0,
  ABISELECT(160,84),
  ABISELECT(-352,-284),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C16D1Ev,_ZTv0_n20_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C16D0Ev,_ZTv0_n20_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
  ABISELECT(-368,-292),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
  ABISELECT(-456,-340),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  ABISELECT(-464,-344),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  0,
  0,
  ABISELECT(-512,-368),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-512,-368),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C16D1Ev,_ZTv0_n36_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C16D0Ev,_ZTv0_n36_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern VTBL_ENTRY _ZTV8S1400C16[];
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C3D1Ev();
extern void _ZN7S1400C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C3__8S1400C16[] = {
  ABISELECT(-40,-20),
  ABISELECT(464,344),
  ABISELECT(304,260),
  ABISELECT(288,252),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D0Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__8S1400C16[] = {
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C3__8S1400C16[] = {
  0,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C3__8S1400C16[] = {
  0,
  ABISELECT(-288,-252),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__7S1400C3__8S1400C16[] = {
  ABISELECT(72,48),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn304_N7S1400C3D1Ev,_ZThn260_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn304_N7S1400C3D0Ev,_ZThn260_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C3__8S1400C16[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-304,-260),
  0,
  ABISELECT(160,84),
  ABISELECT(-304,-260),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C3__8S1400C16[] = {
  ABISELECT(-320,-268),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C3__8S1400C16[] = {
  ABISELECT(-408,-316),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn464_N7S1400C3D1Ev,_ZThn344_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn464_N7S1400C3D0Ev,_ZThn344_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C3__8S1400C16[] = {
  0,
  0,
  ABISELECT(-464,-344),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-464,-344),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C3__8S1400C16[] = {
  ABISELECT(-416,-320),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C3__8S1400C16[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN8S1400C12D1Ev();
extern void _ZN8S1400C12D0Ev();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__8S1400C16[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__8S1400C12__8S1400C16[] = {
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
static  VTT_ENTRY vtt_S1400C16[] = {
  {&(_ZTV8S1400C16[7]),  7,147},
  {&(_ZTV8S1400C16[24]),  24,147},
  {&(_ZTV8S1400C16[55]),  55,147},
  {&(_ZTV8S1400C16[87]),  87,147},
  {&(_ZTV8S1400C16[67]),  67,147},
  {&(_ZTV8S1400C16[74]),  74,147},
  {&(_ZTV8S1400C16[105]),  105,147},
  {&(_ZTV8S1400C16[113]),  113,147},
  {&(_ZTV8S1400C16[117]),  117,147},
  {&(_ZTV8S1400C16[137]),  137,147},
  {&(_ZTV8S1400C16[120]),  120,147},
  {&(_tg__ZTV7S1400C3__8S1400C16[6]),  6,15},
  {&(_tg__ZTV7S1400C87S1400C3__8S1400C16[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C3__8S1400C16[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C3__8S1400C16[3]),  3,4},
  {&(_tg__ZTV7S1400C8__7S1400C3__8S1400C16[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C3__8S1400C16[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C3__8S1400C16[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C3__8S1400C16[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C3__8S1400C16[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C3__8S1400C16[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C3__8S1400C16[8]),  8,14},
  {&(_tg__ZTV8S1400C12__8S1400C16[3]),  3,9},
  {&(_tg__ZTV7S1400C9__8S1400C12__8S1400C16[11]),  11,21},
};
extern VTBL_ENTRY _ZTI8S1400C16[];
extern  VTBL_ENTRY _ZTV8S1400C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C16[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S1400C3D0Ev,_ZThn344_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S1400C3D1Ev,_ZThn344_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1400C3D0Ev,_ZThn260_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1400C3D1Ev,_ZThn260_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C16D0Ev,_ZTv0_n36_N8S1400C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S1400C16D0Ev,_ZThn368_N8S1400C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C16D1Ev,_ZTv0_n36_N8S1400C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S1400C16D1Ev,_ZThn368_N8S1400C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S1400C16D0Ev,_ZTv0_n20_N8S1400C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S1400C16D0Ev,_ZThn284_N8S1400C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S1400C16D1Ev,_ZTv0_n20_N8S1400C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S1400C16D1Ev,_ZThn284_N8S1400C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S1400C16D0Ev,_ZThn24_N8S1400C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S1400C16D1Ev,_ZThn24_N8S1400C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1400C16 = {  "S1400C16", // class name
  bases_S1400C16, 16,
  &(vtc_S1400C16[0]), // expected_vtbl_contents
  &(vtt_S1400C16[0]), // expected_vtt_contents
  ABISELECT(560,396), // object size
  NSPAIRA(_ZTI8S1400C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S1400C16),147, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1400C16),24, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1400C15  : virtual S1400C3 , virtual S1400C16 , virtual S1400C2 {
  void *s1400c15f0;
  short  :0;
  virtual void  v39(); // _ZN8S1400C153v39Ev
  virtual void  v40(); // _ZN8S1400C153v40Ev
  virtual void  v41(); // _ZN8S1400C153v41Ev
  virtual void  v42(); // _ZN8S1400C153v42Ev
  ~S1400C15(); // tgen
  S1400C15(); // tgen
};
//SIG(-1 S1400C15) C1{ VBC2{ BC3{ v5 v6 v7 v8 FC4{ v10} Fi FU5{ m FL[4] FL}[6]} VBC6{ v9 Fi} BC7{ BC4 BC8{ BC9{ v11 v12 v13 v14 v15 v16 Fp[4]} vd v17 v18 FL} VBC6 v19 v20 Fi FC10{}} VBC11{ BC6 BC12{ v21 v22 Fs:16 FL Fp[8]} BC4 VBC8 BC9 vd v23 v24 v25 Fi} VBC9 v26 v27 v28 Fi[2]} VBC13{ VBC9 BC14{ v29 v30} VBC2 vd v31 v32 v33 v34 v35} VBC15{ BC2 BC9 BC7 vd v36} v1 v2 v3 v4 Fp Fs:0}


void  S1400C15 ::v39(){vfunc_called(this, "_ZN8S1400C153v39Ev");}
void  S1400C15 ::v40(){vfunc_called(this, "_ZN8S1400C153v40Ev");}
void  S1400C15 ::v41(){vfunc_called(this, "_ZN8S1400C153v41Ev");}
void  S1400C15 ::v42(){vfunc_called(this, "_ZN8S1400C153v42Ev");}
S1400C15 ::~S1400C15(){ note_dtor("S1400C15", this);} // tgen
S1400C15 ::S1400C15(){ note_ctor("S1400C15", this);} // tgen

static void Test_S1400C15()
{
  extern Class_Descriptor cd_S1400C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(121,179)];
    init_test(&cd_S1400C15, buf);
    S1400C15 *dp, &lv = *(dp=new (buf) S1400C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(960,712), "sizeof(S1400C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C15)");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C4*)(S1400C3*), ABISELECT(16,8), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C3*), ABISELECT(304,260), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C3*), ABISELECT(304,260), "S1400C15");
    /*is_ambiguous_... S1400C3::S1400C7_nt */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C3*)(S1400C2*), ABISELECT(304,260), "S1400C15");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(304,260), "S1400C15");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C2*), ABISELECT(304,260), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C3*), ABISELECT(232,212), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C3*), ABISELECT(240,216), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C3*), ABISELECT(240,216), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C8*)(S1400C3*), ABISELECT(232,212), "S1400C15");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C12*), ABISELECT(320,268), "S1400C15");
    check_base_class_offset(lv, (S1400C13*)(S1400C12*), ABISELECT(336,276), "S1400C15");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C12*), ABISELECT(424,324), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C9 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*), ABISELECT(480,352), "S1400C15");
    check_base_class_offset(lv, (S1400C9*)(S1400C12*), ABISELECT(480,352), "S1400C15");
    /*is_ambiguous_... S1400C12::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C12*), ABISELECT(432,328), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C12*)(S1400C3*), ABISELECT(320,268), "S1400C15");
    check_base_class_offset(lv, (S1400C12*)(S1400C3*)(S1400C2*), ABISELECT(320,268), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C3*), ABISELECT(528,380), "S1400C15");
    /*is_ambiguous_... S1400C16::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C16*), ABISELECT(528,380), "S1400C15");
    /*is_ambiguous_... S1400C3::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C3*)(S1400C2*), ABISELECT(528,380), "S1400C15");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C3*), ABISELECT(16,8), "S1400C15");
    check_base_class_offset(lv, (S1400C3*)(S1400C16*), ABISELECT(16,8), "S1400C15");
    check_base_class_offset(lv, (S1400C17_nt*)(S1400C16*), 0, "S1400C15");
    check_base_class_offset(lv, (S1400C16*), 0, "S1400C15");
    check_base_class_offset(lv, (S1400C4*)(S1400C3*)(S1400C2*), ABISELECT(568,400), "S1400C15");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(784,604), "S1400C15");
    check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(792,608), "S1400C15");
    check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(792,608), "S1400C15");
    check_base_class_offset(lv, (S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(784,604), "S1400C15");
    check_base_class_offset(lv, (S1400C3*)(S1400C2*), ABISELECT(568,400), "S1400C15");
    /*is_ambiguous_... S1400C2::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C2*), ABISELECT(856,652), "S1400C15");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C2*), ABISELECT(896,672), "S1400C15");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C2*), ABISELECT(904,676), "S1400C15");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C2*), ABISELECT(904,676), "S1400C15");
    /*is_ambiguous_... S1400C2::S1400C8 */ AMB_check_base_class_offset(lv, (S1400C8*)(S1400C2*), ABISELECT(896,672), "S1400C15");
    check_base_class_offset(lv, (S1400C2*), ABISELECT(568,400), "S1400C15");
    check_field_offset(lv, s1400c15f0, ABISELECT(8,4), "S1400C15.s1400c15f0");
    test_class_info(&lv, &cd_S1400C15);
    dp->~S1400C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C15(Test_S1400C15, "S1400C15", ABISELECT(960,712));

#else // __cplusplus

extern void _ZN8S1400C15C1Ev();
extern void _ZN8S1400C15D1Ev();
Name_Map name_map_S1400C15[] = {
  NSPAIR(_ZN8S1400C15C1Ev),
  NSPAIR(_ZN8S1400C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1400C4;
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C13;
extern VTBL_ENTRY _ZTI8S1400C13[];
extern  VTBL_ENTRY _ZTV8S1400C13[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C12;
extern VTBL_ENTRY _ZTI8S1400C12[];
extern  VTBL_ENTRY _ZTV8S1400C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C12[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C3;
extern VTBL_ENTRY _ZTI7S1400C3[];
extern  VTBL_ENTRY _ZTV7S1400C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C3[];
extern Class_Descriptor cd_S1400C17_nt;
extern VTBL_ENTRY _ZTI11S1400C17_nt[];
extern  VTBL_ENTRY _ZTV11S1400C17_nt[];
extern Class_Descriptor cd_S1400C16;
extern VTBL_ENTRY _ZTI8S1400C16[];
extern  VTBL_ENTRY _ZTV8S1400C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C16[];
extern Class_Descriptor cd_S1400C4;
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C3;
extern VTBL_ENTRY _ZTI7S1400C3[];
extern  VTBL_ENTRY _ZTV7S1400C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C3[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C2;
extern VTBL_ENTRY _ZTI7S1400C2[];
extern  VTBL_ENTRY _ZTV7S1400C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C2[];
static Base_Class bases_S1400C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1400C4,    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
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1400C7_nt,    ABISELECT(304,260), //bcp->offset
    84, //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
    5, //immediately_derived
  0, 1},
  {&cd_S1400C5_nt,    ABISELECT(232,212), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(240,216), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(240,216), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(232,212), //bcp->offset
    64, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1400C7_nt,    ABISELECT(320,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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C13,    ABISELECT(336,276), //bcp->offset
    111, //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
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(424,324), //bcp->offset
    115, //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
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(480,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
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(480,352), //bcp->offset
    126, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S1400C10,    ABISELECT(432,328), //bcp->offset
    118, //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
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C12,    ABISELECT(320,268), //bcp->offset
    88, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1400C10,    ABISELECT(528,380), //bcp->offset
    147, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1400C3,    ABISELECT(16,8), //bcp->offset
    30, //bcp->virtual_function_table_offset
    25, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1400C17_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
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S1400C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1400C4,    ABISELECT(568,400), //bcp->offset
    -1, //bcp->virtual_function_table_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
    22, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(784,604), //bcp->offset
    -1, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(792,608), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(792,608), //bcp->offset
    205, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(784,604), //bcp->offset
    197, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S1400C3,    ABISELECT(568,400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(856,652), //bcp->offset
    217, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(896,672), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(904,676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(904,676), //bcp->offset
    233, //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
    27, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(896,672), //bcp->offset
    225, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S1400C2,    ABISELECT(568,400), //bcp->offset
    161, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S1400C15[];
extern void _ZN11S1400C17_nt3v32Ev();
extern void _ZN11S1400C17_nt3v33Ev();
extern void _ZN8S1400C15D1Ev();
extern void _ZN8S1400C15D0Ev();
extern void _ZN8S1400C163v34Ev();
extern void _ZN8S1400C163v35Ev();
extern void _ZN8S1400C163v36Ev();
extern void _ZN8S1400C163v37Ev();
extern void _ZN8S1400C163v38Ev();
extern void _ZN8S1400C153v39Ev();
extern void _ZN8S1400C153v40Ev();
extern void _ZN8S1400C153v41Ev();
extern void _ZN8S1400C153v42Ev();
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZThn16_N8S1400C15D1Ev,_ZThn8_N8S1400C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev)();
extern void ABISELECT(_ZThn16_N8S1400C15D0Ev,_ZThn8_N8S1400C15D0Ev)() __attribute__((weak));
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N8S1400C15D1Ev,_ZTvn204_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N8S1400C15D0Ev,_ZTvn204_n56_N8S1400C15D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N8S1400C15D1Ev,_ZTvn208_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N8S1400C15D0Ev,_ZTvn208_n56_N8S1400C15D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N8S1400C15D1Ev,_ZTv0_n20_N8S1400C15D1Ev)();
extern void ABISELECT(_ZThn320_N8S1400C15D1Ev,_ZThn268_N8S1400C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S1400C15D0Ev,_ZTv0_n20_N8S1400C15D0Ev)();
extern void ABISELECT(_ZThn320_N8S1400C15D0Ev,_ZThn268_N8S1400C15D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C15D1Ev,_ZTv0_n36_N8S1400C15D1Ev)();
extern void ABISELECT(_ZThn480_N8S1400C15D1Ev,_ZThn352_N8S1400C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C15D0Ev,_ZTv0_n36_N8S1400C15D0Ev)();
extern void ABISELECT(_ZThn480_N8S1400C15D0Ev,_ZThn352_N8S1400C15D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZThn568_N8S1400C15D1Ev,_ZThn400_N8S1400C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev)();
extern void ABISELECT(_ZThn568_N8S1400C15D0Ev,_ZThn400_N8S1400C15D0Ev)() __attribute__((weak));
extern void _ZN7S1400C23v28Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N8S1400C15D1Ev,_ZTvn204_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N8S1400C15D0Ev,_ZTvn204_n56_N8S1400C15D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N8S1400C15D1Ev,_ZTvn208_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N8S1400C15D0Ev,_ZTvn208_n56_N8S1400C15D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn328_n112_N8S1400C15D1Ev,_ZTvn272_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn328_n112_N8S1400C15D0Ev,_ZTvn272_n56_N8S1400C15D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn336_n112_N8S1400C15D1Ev,_ZTvn276_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn336_n112_N8S1400C15D0Ev,_ZTvn276_n56_N8S1400C15D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY vtc_S1400C15[] = {
  ABISELECT(568,400),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(480,352),
  ABISELECT(320,268),
  ABISELECT(304,260),
  ABISELECT(16,8),
  ABISELECT(528,380),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S1400C15D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C15D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v34Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v35Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v36Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v37Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v38Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v39Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v40Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v41Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v42Ev,
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(512,372),
  ABISELECT(464,344),
  ABISELECT(304,260),
  ABISELECT(288,252),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev),
  ABISELECT(72,48),
  ABISELECT(-232,-212),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C15D1Ev,_ZTvn204_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C15D0Ev,_ZTvn204_n56_N8S1400C15D0Ev),
  ABISELECT(-240,-216),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C15D1Ev,_ZTvn208_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C15D0Ev,_ZTvn208_n56_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  ABISELECT(-304,-260),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-320,-268),
  0,
  ABISELECT(160,84),
  ABISELECT(-320,-268),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C15D1Ev,_ZTv0_n20_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C15D0Ev,_ZTv0_n20_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
  ABISELECT(-336,-276),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
  ABISELECT(-424,-324),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  ABISELECT(-432,-328),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  0,
  0,
  ABISELECT(-480,-352),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-352),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C15D1Ev,_ZTv0_n36_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C15D0Ev,_ZTv0_n36_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-528,-380),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  0,
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-568,-400),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(-88,-48),
  ABISELECT(-248,-132),
  ABISELECT(-264,-140),
  ABISELECT(-568,-400),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C23v28Ev,
  ABISELECT(-480,-344),
  ABISELECT(-784,-604),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C15D1Ev,_ZTvn204_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C15D0Ev,_ZTvn204_n56_N8S1400C15D0Ev),
  ABISELECT(-792,-608),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C15D1Ev,_ZTvn208_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C15D0Ev,_ZTvn208_n56_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  ABISELECT(-856,-652),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  ABISELECT(-592,-412),
  ABISELECT(-896,-672),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn328_n112_N8S1400C15D1Ev,_ZTvn272_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn328_n112_N8S1400C15D0Ev,_ZTvn272_n56_N8S1400C15D0Ev),
  ABISELECT(-904,-676),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn336_n112_N8S1400C15D1Ev,_ZTvn276_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn336_n112_N8S1400C15D0Ev,_ZTvn276_n56_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern VTBL_ENTRY _ZTV8S1400C15[];
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C3D1Ev();
extern void _ZN7S1400C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C3__8S1400C15[] = {
  ABISELECT(512,372),
  ABISELECT(464,344),
  ABISELECT(304,260),
  ABISELECT(288,252),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D0Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__8S1400C15[] = {
  ABISELECT(72,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C3__8S1400C15[] = {
  0,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C3__8S1400C15[] = {
  0,
  ABISELECT(-288,-252),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__7S1400C3__8S1400C15[] = {
  ABISELECT(72,48),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn304_N7S1400C3D1Ev,_ZThn260_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn304_N7S1400C3D0Ev,_ZThn260_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C3__8S1400C15[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-304,-260),
  0,
  ABISELECT(160,84),
  ABISELECT(-304,-260),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C3__8S1400C15[] = {
  ABISELECT(-320,-268),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C3__8S1400C15[] = {
  ABISELECT(-408,-316),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn464_N7S1400C3D1Ev,_ZThn344_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn464_N7S1400C3D0Ev,_ZThn344_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C3__8S1400C15[] = {
  0,
  0,
  ABISELECT(-464,-344),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-464,-344),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C3__8S1400C15[] = {
  ABISELECT(-416,-320),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C3__8S1400C15[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-512,-372),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN8S1400C12D1Ev();
extern void _ZN8S1400C12D0Ev();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__8S1400C15[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__8S1400C12__8S1400C15[] = {
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN11S1400C17_nt3v32Ev();
extern void _ZN11S1400C17_nt3v33Ev();
extern void _ZN8S1400C16D1Ev();
extern void _ZN8S1400C16D0Ev();
extern void _ZN8S1400C163v34Ev();
extern void _ZN8S1400C163v35Ev();
extern void _ZN8S1400C163v36Ev();
extern void _ZN8S1400C163v37Ev();
extern void _ZN8S1400C163v38Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C16__8S1400C15[] = {
  ABISELECT(480,352),
  ABISELECT(320,268),
  ABISELECT(304,260),
  ABISELECT(16,8),
  ABISELECT(528,380),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S1400C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v34Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v35Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v36Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v37Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v38Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__8S1400C16__8S1400C15[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-528,-380),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S1400C16D1Ev,_ZThn8_N8S1400C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev)();
extern void ABISELECT(_ZThn16_N8S1400C16D0Ev,_ZThn8_N8S1400C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S1400C3__8S1400C16__8S1400C15[] = {
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(512,372),
  ABISELECT(464,344),
  ABISELECT(304,260),
  ABISELECT(288,252),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__8S1400C16__8S1400C15[] = {
  0,
  ABISELECT(-304,-260),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N8S1400C16D1Ev,_ZTvn204_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N8S1400C16D0Ev,_ZTvn204_n56_N8S1400C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__8S1400C16__8S1400C15[] = {
  ABISELECT(72,48),
  ABISELECT(-232,-212),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C16D1Ev,_ZTvn204_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C16D0Ev,_ZTvn204_n56_N8S1400C16D0Ev),
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N8S1400C16D1Ev,_ZTvn208_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N8S1400C16D0Ev,_ZTvn208_n56_N8S1400C16D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C97S1400C87S1400C3__8S1400C16__8S1400C15[] = {
  ABISELECT(-240,-216),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C16D1Ev,_ZTvn208_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C16D0Ev,_ZTvn208_n56_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N8S1400C16D1Ev,_ZTv0_n20_N8S1400C16D1Ev)();
extern void ABISELECT(_ZThn320_N8S1400C16D1Ev,_ZThn268_N8S1400C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S1400C16D0Ev,_ZTv0_n20_N8S1400C16D0Ev)();
extern void ABISELECT(_ZThn320_N8S1400C16D0Ev,_ZThn268_N8S1400C16D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__8S1400C16__8S1400C15[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-320,-268),
  0,
  ABISELECT(160,84),
  ABISELECT(-320,-268),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C16D1Ev,_ZTv0_n20_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C16D0Ev,_ZTv0_n20_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__8S1400C16__8S1400C15[] = {
  ABISELECT(-336,-276),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__8S1400C16__8S1400C15[] = {
  ABISELECT(-424,-324),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C16D1Ev,_ZTv0_n36_N8S1400C16D1Ev)();
extern void ABISELECT(_ZThn480_N8S1400C16D1Ev,_ZThn352_N8S1400C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C16D0Ev,_ZTv0_n36_N8S1400C16D0Ev)();
extern void ABISELECT(_ZThn480_N8S1400C16D0Ev,_ZThn352_N8S1400C16D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__8S1400C16__8S1400C15[] = {
  0,
  0,
  ABISELECT(-480,-352),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-480,-352),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C16D1Ev,_ZTv0_n36_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C16D0Ev,_ZTv0_n36_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A3__8S1400C16__8S1400C15[] = {
  ABISELECT(-432,-328),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C2D1Ev();
extern void _ZN7S1400C2D0Ev();
extern void _ZN7S1400C23v28Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C2__8S1400C15[] = {
  ABISELECT(-40,-20),
  ABISELECT(-88,-48),
  ABISELECT(-248,-132),
  ABISELECT(-264,-140),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1400C23v28Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C3D1Ev();
extern void _ZN7S1400C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C37S1400C2__A1__8S1400C15[] = {
  ABISELECT(-40,-20),
  ABISELECT(-88,-48),
  ABISELECT(-248,-132),
  ABISELECT(-264,-140),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D0Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C37S1400C2__A1__8S1400C15[] = {
  ABISELECT(-480,-344),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C37S1400C2__A1__8S1400C15[] = {
  0,
  ABISELECT(480,344),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C37S1400C2__A1__8S1400C15[] = {
  0,
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__7S1400C37S1400C2__A1__8S1400C15[] = {
  ABISELECT(-480,-344),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev)();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C37S1400C2__A1__8S1400C15[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(248,132),
  0,
  ABISELECT(160,84),
  ABISELECT(248,132),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C37S1400C2__A1__8S1400C15[] = {
  ABISELECT(232,124),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C37S1400C2__A1__8S1400C15[] = {
  ABISELECT(144,76),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C37S1400C2__A1__8S1400C15[] = {
  0,
  0,
  ABISELECT(88,48),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C37S1400C2__A1__8S1400C15[] = {
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C37S1400C2__A1__8S1400C15[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C2__A2__8S1400C15[] = {
  ABISELECT(-592,-412),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C2__A2__8S1400C15[] = {
  0,
  ABISELECT(592,412),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C2__8S1400C15[] = {
  0,
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C2D1Ev,_ZThn204_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C2D0Ev,_ZThn204_N7S1400C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__7S1400C2__8S1400C15[] = {
  ABISELECT(-480,-344),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C2D1Ev,_ZThn204_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C2D0Ev,_ZThn204_N7S1400C2D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev)();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C2__8S1400C15[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(248,132),
  0,
  ABISELECT(160,84),
  ABISELECT(248,132),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C2__8S1400C15[] = {
  ABISELECT(232,124),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C2__8S1400C15[] = {
  ABISELECT(144,76),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C2__8S1400C15[] = {
  0,
  0,
  ABISELECT(88,48),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C2__8S1400C15[] = {
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C2__8S1400C15[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn328_N7S1400C2D1Ev,_ZThn272_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn328_N7S1400C2D0Ev,_ZThn272_N7S1400C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__A1__7S1400C2__8S1400C15[] = {
  ABISELECT(-592,-412),
  ABISELECT(-328,-272),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C2D1Ev,_ZThn272_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C2D0Ev,_ZThn272_N7S1400C2D0Ev),
};
static  VTT_ENTRY vtt_S1400C15[] = {
  {&(_ZTV8S1400C15[17]),  17,245},
  {&(_ZTV8S1400C15[55]),  55,245},
  {&(_ZTV8S1400C15[87]),  87,245},
  {&(_ZTV8S1400C15[67]),  67,245},
  {&(_ZTV8S1400C15[74]),  74,245},
  {&(_ZTV8S1400C15[105]),  105,245},
  {&(_ZTV8S1400C15[113]),  113,245},
  {&(_ZTV8S1400C15[117]),  117,245},
  {&(_ZTV8S1400C15[137]),  137,245},
  {&(_ZTV8S1400C15[120]),  120,245},
  {&(_ZTV8S1400C15[155]),  155,245},
  {&(_ZTV8S1400C15[17]),  17,245},
  {&(_ZTV8S1400C15[187]),  187,245},
  {&(_ZTV8S1400C15[200]),  200,245},
  {&(_ZTV8S1400C15[207]),  207,245},
  {&(_ZTV8S1400C15[219]),  219,245},
  {&(_ZTV8S1400C15[228]),  228,245},
  {&(_ZTV8S1400C15[235]),  235,245},
  {&(_tg__ZTV7S1400C3__8S1400C15[6]),  6,15},
  {&(_tg__ZTV7S1400C87S1400C3__8S1400C15[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C3__8S1400C15[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C3__8S1400C15[3]),  3,4},
  {&(_tg__ZTV7S1400C8__7S1400C3__8S1400C15[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C3__8S1400C15[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C3__8S1400C15[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C3__8S1400C15[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C3__8S1400C15[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C3__8S1400C15[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C3__8S1400C15[8]),  8,14},
  {&(_tg__ZTV8S1400C12__8S1400C15[3]),  3,9},
  {&(_tg__ZTV7S1400C9__8S1400C12__8S1400C15[11]),  11,21},
  {&(_tg__ZTV8S1400C16__8S1400C15[7]),  7,16},
  {&(_tg__ZTV8S1400C10__8S1400C16__8S1400C15[8]),  8,14},
  {&(_tg__ZTV7S1400C3__8S1400C16__8S1400C15[25]),  25,34},
  {&(_tg__ZTV10S1400C7_nt__8S1400C16__8S1400C15[3]),  3,4},
  {&(_tg__ZTV7S1400C87S1400C3__8S1400C16__8S1400C15[3]),  3,8},
  {&(_tg__ZTV7S1400C97S1400C87S1400C3__8S1400C16__8S1400C15[2]),  2,12},
  {&(_tg__ZTV8S1400C12__8S1400C16__8S1400C15[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__8S1400C16__8S1400C15[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__8S1400C16__8S1400C15[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__8S1400C16__8S1400C15[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A3__8S1400C16__8S1400C15[2]),  2,8},
  {&(_tg__ZTV7S1400C2__8S1400C15[6]),  6,16},
  {&(_tg__ZTV7S1400C37S1400C2__A1__8S1400C15[6]),  6,15},
  {&(_tg__ZTV7S1400C87S1400C37S1400C2__A1__8S1400C15[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C37S1400C2__A1__8S1400C15[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C37S1400C2__A1__8S1400C15[3]),  3,4},
  {&(_tg__ZTV7S1400C8__7S1400C37S1400C2__A1__8S1400C15[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C37S1400C2__A1__8S1400C15[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C37S1400C2__A1__8S1400C15[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C37S1400C2__A1__8S1400C15[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C37S1400C2__A1__8S1400C15[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C37S1400C2__A1__8S1400C15[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C37S1400C2__A1__8S1400C15[8]),  8,14},
  {&(_tg__ZTV7S1400C87S1400C2__A2__8S1400C15[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C2__A2__8S1400C15[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C2__8S1400C15[3]),  3,4},
  {&(_tg__ZTV7S1400C87S1400C3__7S1400C2__8S1400C15[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C2__8S1400C15[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C2__8S1400C15[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C2__8S1400C15[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C2__8S1400C15[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C2__8S1400C15[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C2__8S1400C15[8]),  8,14},
  {&(_tg__ZTV7S1400C8__A1__7S1400C2__8S1400C15[3]),  3,8},
};
extern VTBL_ENTRY _ZTI8S1400C15[];
extern  VTBL_ENTRY _ZTV8S1400C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C15[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C16D0Ev,_ZTv0_n36_N8S1400C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S1400C16D0Ev,_ZThn352_N8S1400C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C16D1Ev,_ZTv0_n36_N8S1400C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S1400C16D1Ev,_ZThn352_N8S1400C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S1400C16D0Ev,_ZTv0_n20_N8S1400C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S1400C16D0Ev,_ZThn268_N8S1400C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S1400C16D1Ev,_ZTv0_n20_N8S1400C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S1400C16D1Ev,_ZThn268_N8S1400C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1400C16D0Ev,_ZThn8_N8S1400C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1400C16D1Ev,_ZThn8_N8S1400C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S1400C3D0Ev,_ZThn344_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S1400C3D1Ev,_ZThn344_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1400C3D0Ev,_ZThn260_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S1400C3D1Ev,_ZThn260_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C15D0Ev,_ZTv0_n36_N8S1400C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S1400C15D0Ev,_ZThn352_N8S1400C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C15D1Ev,_ZTv0_n36_N8S1400C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn480_N8S1400C15D1Ev,_ZThn352_N8S1400C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S1400C15D0Ev,_ZTv0_n20_N8S1400C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S1400C15D0Ev,_ZThn268_N8S1400C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S1400C15D1Ev,_ZTv0_n20_N8S1400C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S1400C15D1Ev,_ZThn268_N8S1400C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn568_N8S1400C15D0Ev,_ZThn400_N8S1400C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1400C15D0Ev,_ZThn8_N8S1400C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn568_N8S1400C15D1Ev,_ZThn400_N8S1400C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1400C15D1Ev,_ZThn8_N8S1400C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1400C15 = {  "S1400C15", // class name
  bases_S1400C15, 29,
  &(vtc_S1400C15[0]), // expected_vtbl_contents
  &(vtt_S1400C15[0]), // expected_vtt_contents
  ABISELECT(960,712), // object size
  NSPAIRA(_ZTI8S1400C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S1400C15),245, //virtual function table var
  17, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S1400C15),65, //virtual table table var
  29, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1400C1  : S1400C2 , S1400C14_nt , virtual S1400C15 {
  int s1400c1f0;
  __tsi64 s1400c1f1;
  int s1400c1f2;
  virtual void  v1(); // _ZN7S1400C12v1Ev
  virtual void  v2(); // _ZN7S1400C12v2Ev
  virtual void  v3(); // _ZN7S1400C12v3Ev
  ~S1400C1(); // tgen
  S1400C1(); // tgen
};
//SIG(1 S1400C1) C1{ BC2{ BC3{ BC4{ v4 v5 v6 v7 FC5{ v9} Fi FU6{ m FL[4] FL}[6]} VBC7{ v8 Fi} BC8{ BC5 BC9{ BC10{ v10 v11 v12 v13 v14 v15 Fp[4]} vd v16 v17 FL} VBC7 v18 v19 Fi FC11{}} VBC12{ BC7 BC13{ v20 v21 Fs:16 FL Fp[8]} BC5 VBC9 BC10 vd v22 v23 v24 Fi} VBC10 v25 v26 v27 Fi[2]} BC10 BC8 vd v28} BC14{ v29 v30 v31} VBC15{ VBC3 VBC16{ VBC10 BC17{ v32 v33} VBC3 vd v34 v35 v36 v37 v38} VBC2 v39 v40 v41 v42 Fp Fs:0} v1 v2 v3 Fi FL Fi}


void  S1400C1 ::v1(){vfunc_called(this, "_ZN7S1400C12v1Ev");}
void  S1400C1 ::v2(){vfunc_called(this, "_ZN7S1400C12v2Ev");}
void  S1400C1 ::v3(){vfunc_called(this, "_ZN7S1400C12v3Ev");}
S1400C1 ::~S1400C1(){ note_dtor("S1400C1", this);} // tgen
S1400C1 ::S1400C1(){ note_ctor("S1400C1", this);} // tgen

static void Test_S1400C1()
{
  extern Class_Descriptor cd_S1400C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(174,262)];
    init_test(&cd_S1400C1, buf);
    S1400C1 *dp, &lv = *(dp=new (buf) S1400C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1384,1044), "sizeof(S1400C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1400C1)");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C4*)(S1400C3*)(S1400C2*), 0, "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C3*)(S1400C2*), ABISELECT(424,332), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(424,332), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C2*), ABISELECT(424,332), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C3*), ABISELECT(424,332), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C3*), ABISELECT(424,332), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C3*)(S1400C2*), ABISELECT(424,332), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(424,332), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C7_nt*)(S1400C8*)(S1400C2*), ABISELECT(424,332), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(216,204), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(224,208), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(224,208), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(216,204), "S1400C1");
    check_base_class_offset(lv, (S1400C7_nt*)(S1400C12*), ABISELECT(440,340), "S1400C1");
    check_base_class_offset(lv, (S1400C13*)(S1400C12*), ABISELECT(456,348), "S1400C1");
    check_base_class_offset(lv, (S1400C5_nt*)(S1400C12*), ABISELECT(544,396), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C9 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*), ABISELECT(600,424), "S1400C1");
    check_base_class_offset(lv, (S1400C9*)(S1400C12*), ABISELECT(600,424), "S1400C1");
    /*is_ambiguous_... S1400C12::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C12*), ABISELECT(552,400), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C12*)(S1400C3*)(S1400C2*), ABISELECT(440,340), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C12*)(S1400C3*), ABISELECT(440,340), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C12*)(S1400C3*)(S1400C2*), ABISELECT(440,340), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C3*)(S1400C2*), ABISELECT(648,452), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C3*), ABISELECT(648,452), "S1400C1");
    /*is_ambiguous_... S1400C16::S1400C10 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C16*), ABISELECT(648,452), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C3*)(S1400C2*), ABISELECT(648,452), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C3*)(S1400C2*), 0, "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C2*), ABISELECT(288,252), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C2*), ABISELECT(328,272), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C2*), ABISELECT(336,276), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C2*), ABISELECT(336,276), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C8*)(S1400C2*), ABISELECT(328,272), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C2*), 0, "S1400C1");
    check_base_class_offset(lv, (S1400C14_nt*), ABISELECT(392,312), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C4*)(S1400C3*), ABISELECT(704,480), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C3*), ABISELECT(920,684), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C3*), ABISELECT(928,688), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C3*), ABISELECT(928,688), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C8*)(S1400C3*), ABISELECT(920,684), "S1400C1");
    /*is_ambiguous_... S1400C15::S1400C3 */ AMB_check_base_class_offset(lv, (S1400C3*)(S1400C15*), ABISELECT(704,480), "S1400C1");
    check_base_class_offset(lv, (S1400C3*)(S1400C16*), ABISELECT(704,480), "S1400C1");
    check_base_class_offset(lv, (S1400C17_nt*)(S1400C16*), ABISELECT(688,472), "S1400C1");
    check_base_class_offset(lv, (S1400C16*)(S1400C15*), ABISELECT(688,472), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C4*)(S1400C3*)(S1400C2*), ABISELECT(992,732), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(1208,936), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(1216,940), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(1216,940), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C8*)(S1400C3*)(S1400C2*), ABISELECT(1208,936), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C3*)(S1400C2*), ABISELECT(992,732), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C2*), ABISELECT(1280,984), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C5_nt*)(S1400C8*)(S1400C2*), ABISELECT(1320,1004), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C10*)(S1400C9*)(S1400C8*)(S1400C2*), ABISELECT(1328,1008), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C9*)(S1400C8*)(S1400C2*), ABISELECT(1328,1008), "S1400C1");
    /*is_ambiguous_... S1400C1::S1400C2 */ AMB_check_base_class_offset(lv, (S1400C8*)(S1400C2*), ABISELECT(1320,1004), "S1400C1");
    check_base_class_offset(lv, (S1400C2*)(S1400C15*), ABISELECT(992,732), "S1400C1");
    check_base_class_offset(lv, (S1400C15*), ABISELECT(688,472), "S1400C1");
    check_field_offset(lv, s1400c1f0, ABISELECT(400,316), "S1400C1.s1400c1f0");
    check_field_offset(lv, s1400c1f1, ABISELECT(408,320), "S1400C1.s1400c1f1");
    check_field_offset(lv, s1400c1f2, ABISELECT(416,328), "S1400C1.s1400c1f2");
    test_class_info(&lv, &cd_S1400C1);
    dp->~S1400C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1400C1(Test_S1400C1, "S1400C1", ABISELECT(1384,1044));

#else // __cplusplus

extern void _ZN7S1400C1C1Ev();
extern void _ZN7S1400C1D1Ev();
Name_Map name_map_S1400C1[] = {
  NSPAIR(_ZN7S1400C1C1Ev),
  NSPAIR(_ZN7S1400C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1400C4;
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C7_nt;
extern VTBL_ENTRY _ZTI10S1400C7_nt[];
extern  VTBL_ENTRY _ZTV10S1400C7_nt[];
extern Class_Descriptor cd_S1400C13;
extern VTBL_ENTRY _ZTI8S1400C13[];
extern  VTBL_ENTRY _ZTV8S1400C13[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C12;
extern VTBL_ENTRY _ZTI8S1400C12[];
extern  VTBL_ENTRY _ZTV8S1400C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C12[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C3;
extern VTBL_ENTRY _ZTI7S1400C3[];
extern  VTBL_ENTRY _ZTV7S1400C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C3[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C2;
extern VTBL_ENTRY _ZTI7S1400C2[];
extern  VTBL_ENTRY _ZTV7S1400C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C2[];
extern Class_Descriptor cd_S1400C14_nt;
extern VTBL_ENTRY _ZTI11S1400C14_nt[];
extern  VTBL_ENTRY _ZTV11S1400C14_nt[];
extern Class_Descriptor cd_S1400C4;
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C3;
extern VTBL_ENTRY _ZTI7S1400C3[];
extern  VTBL_ENTRY _ZTV7S1400C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C3[];
extern Class_Descriptor cd_S1400C17_nt;
extern VTBL_ENTRY _ZTI11S1400C17_nt[];
extern  VTBL_ENTRY _ZTV11S1400C17_nt[];
extern Class_Descriptor cd_S1400C16;
extern VTBL_ENTRY _ZTI8S1400C16[];
extern  VTBL_ENTRY _ZTV8S1400C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C16[];
extern Class_Descriptor cd_S1400C4;
extern VTBL_ENTRY _ZTI7S1400C4[];
extern  VTBL_ENTRY _ZTV7S1400C4[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C3;
extern VTBL_ENTRY _ZTI7S1400C3[];
extern  VTBL_ENTRY _ZTV7S1400C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C3[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C5_nt;
extern VTBL_ENTRY _ZTI10S1400C5_nt[];
extern  VTBL_ENTRY _ZTV10S1400C5_nt[];
extern Class_Descriptor cd_S1400C10;
extern VTBL_ENTRY _ZTI8S1400C10[];
extern  VTBL_ENTRY _ZTV8S1400C10[];
extern Class_Descriptor cd_S1400C9;
extern VTBL_ENTRY _ZTI7S1400C9[];
extern  VTBL_ENTRY _ZTV7S1400C9[];
extern Class_Descriptor cd_S1400C8;
extern VTBL_ENTRY _ZTI7S1400C8[];
extern  VTBL_ENTRY _ZTV7S1400C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C8[];
extern Class_Descriptor cd_S1400C2;
extern VTBL_ENTRY _ZTI7S1400C2[];
extern  VTBL_ENTRY _ZTV7S1400C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C2[];
extern Class_Descriptor cd_S1400C15;
extern VTBL_ENTRY _ZTI8S1400C15[];
extern  VTBL_ENTRY _ZTV8S1400C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S1400C15[];
static Base_Class bases_S1400C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1400C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1400C7_nt,    ABISELECT(424,332), //bcp->offset
    76, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S1400C5_nt,    ABISELECT(216,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
    32, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(224,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
    33, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(224,208), //bcp->offset
    31, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(216,204), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S1400C7_nt,    ABISELECT(440,340), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S1400C13,    ABISELECT(456,348), //bcp->offset
    103, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(544,396), //bcp->offset
    107, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(600,424), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(600,424), //bcp->offset
    118, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S1400C10,    ABISELECT(552,400), //bcp->offset
    110, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S1400C12,    ABISELECT(440,340), //bcp->offset
    80, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1400C10,    ABISELECT(648,452), //bcp->offset
    139, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S1400C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(288,252), //bcp->offset
    43, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(328,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
    38, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(336,276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(336,276), //bcp->offset
    59, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(328,272), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S1400C2,    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
    42, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1400C14_nt,    ABISELECT(392,312), //bcp->offset
    71, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1400C4,    ABISELECT(704,480), //bcp->offset
    -1, //bcp->virtual_function_table_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
    27, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(920,684), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(928,688), //bcp->offset
    -1, //bcp->virtual_function_table_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
    25, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(928,688), //bcp->offset
    229, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(920,684), //bcp->offset
    221, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S1400C3,    ABISELECT(704,480), //bcp->offset
    187, //bcp->virtual_function_table_offset
    25, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S1400C17_nt,    ABISELECT(688,472), //bcp->offset
    -1, //bcp->virtual_function_table_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
    29, //immediately_derived
  0, 0},
  {&cd_S1400C16,    ABISELECT(688,472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    42, //immediately_derived
  0, 1},
  {&cd_S1400C4,    ABISELECT(992,732), //bcp->offset
    -1, //bcp->virtual_function_table_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
    35, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(1208,936), //bcp->offset
    -1, //bcp->virtual_function_table_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
    34, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(1216,940), //bcp->offset
    -1, //bcp->virtual_function_table_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
    33, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(1216,940), //bcp->offset
    285, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(1208,936), //bcp->offset
    277, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S1400C3,    ABISELECT(992,732), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(1280,984), //bcp->offset
    297, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S1400C5_nt,    ABISELECT(1320,1004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S1400C10,    ABISELECT(1328,1008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S1400C9,    ABISELECT(1328,1008), //bcp->offset
    313, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S1400C8,    ABISELECT(1320,1004), //bcp->offset
    305, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    99, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S1400C2,    ABISELECT(992,732), //bcp->offset
    241, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    42, //immediately_derived
  0, 1},
  {&cd_S1400C15,    ABISELECT(688,472), //bcp->offset
    153, //bcp->virtual_function_table_offset
    21, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S1400C1[];
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C1D1Ev();
extern void _ZN7S1400C1D0Ev();
extern void _ZN7S1400C23v28Ev();
extern void _ZN7S1400C12v1Ev();
extern void _ZN7S1400C12v2Ev();
extern void _ZN7S1400C12v3Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C1D1Ev,_ZThn204_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C1D0Ev,_ZThn204_N7S1400C1D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZThn224_N7S1400C1D1Ev,_ZThn208_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn224_N7S1400C1D0Ev,_ZThn208_N7S1400C1D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn328_N7S1400C1D1Ev,_ZThn272_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn328_N7S1400C1D0Ev,_ZThn272_N7S1400C1D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZThn336_N7S1400C1D1Ev,_ZThn276_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn336_N7S1400C1D0Ev,_ZThn276_N7S1400C1D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN11S1400C14_nt3v29Ev();
extern void _ZN11S1400C14_nt3v30Ev();
extern void _ZN11S1400C14_nt3v31Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C1D1Ev,_ZTv0_n20_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn440_N7S1400C1D1Ev,_ZThn340_N7S1400C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1400C1D0Ev,_ZTv0_n20_N7S1400C1D0Ev)();
extern void ABISELECT(_ZThn440_N7S1400C1D0Ev,_ZThn340_N7S1400C1D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C1D1Ev,_ZTv0_n36_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn600_N7S1400C1D1Ev,_ZThn424_N7S1400C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1400C1D0Ev,_ZTv0_n36_N7S1400C1D0Ev)();
extern void ABISELECT(_ZThn600_N7S1400C1D0Ev,_ZThn424_N7S1400C1D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN11S1400C17_nt3v32Ev();
extern void _ZN11S1400C17_nt3v33Ev();
extern void ABISELECT(_ZTv0_n80_N7S1400C1D1Ev,_ZTv0_n40_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn688_N7S1400C1D1Ev,_ZThn472_N7S1400C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S1400C1D0Ev,_ZTv0_n40_N7S1400C1D0Ev)();
extern void ABISELECT(_ZThn688_N7S1400C1D0Ev,_ZThn472_N7S1400C1D0Ev)() __attribute__((weak));
extern void _ZN8S1400C163v34Ev();
extern void _ZN8S1400C163v35Ev();
extern void _ZN8S1400C163v36Ev();
extern void _ZN8S1400C163v37Ev();
extern void _ZN8S1400C163v38Ev();
extern void _ZN8S1400C153v39Ev();
extern void _ZN8S1400C153v40Ev();
extern void _ZN8S1400C153v41Ev();
extern void _ZN8S1400C153v42Ev();
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N7S1400C1D1Ev,_ZTv0_n56_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn704_N7S1400C1D1Ev,_ZThn480_N7S1400C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N7S1400C1D0Ev,_ZTv0_n56_N7S1400C1D0Ev)();
extern void ABISELECT(_ZThn704_N7S1400C1D0Ev,_ZThn480_N7S1400C1D0Ev)() __attribute__((weak));
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N7S1400C1D1Ev,_ZTvn204_n56_N7S1400C1D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N7S1400C1D0Ev,_ZTvn204_n56_N7S1400C1D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N7S1400C1D1Ev,_ZTvn208_n56_N7S1400C1D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N7S1400C1D0Ev,_ZTvn208_n56_N7S1400C1D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N7S1400C1D1Ev,_ZTv0_n56_N7S1400C1D1Ev)();
extern void ABISELECT(_ZThn992_N7S1400C1D1Ev,_ZThn732_N7S1400C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N7S1400C1D0Ev,_ZTv0_n56_N7S1400C1D0Ev)();
extern void ABISELECT(_ZThn992_N7S1400C1D0Ev,_ZThn732_N7S1400C1D0Ev)() __attribute__((weak));
extern void _ZN7S1400C23v28Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N7S1400C1D1Ev,_ZTvn204_n56_N7S1400C1D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N7S1400C1D0Ev,_ZTvn204_n56_N7S1400C1D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N7S1400C1D1Ev,_ZTvn208_n56_N7S1400C1D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N7S1400C1D0Ev,_ZTvn208_n56_N7S1400C1D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn328_n112_N7S1400C1D1Ev,_ZTvn272_n56_N7S1400C1D1Ev)();
extern void ABISELECT(_ZTvn328_n112_N7S1400C1D0Ev,_ZTvn272_n56_N7S1400C1D0Ev)();
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn336_n112_N7S1400C1D1Ev,_ZTvn276_n56_N7S1400C1D1Ev)();
extern void ABISELECT(_ZTvn336_n112_N7S1400C1D0Ev,_ZTvn276_n56_N7S1400C1D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY vtc_S1400C1[] = {
  ABISELECT(992,732),
  ABISELECT(688,472),
  ABISELECT(704,480),
  ABISELECT(688,472),
  ABISELECT(648,452),
  ABISELECT(600,424),
  ABISELECT(440,340),
  ABISELECT(424,332),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1400C23v28Ev,
  (VTBL_ENTRY)&_ZN7S1400C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1400C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1400C12v3Ev,
  ABISELECT(208,128),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C1D1Ev,_ZThn204_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C1D0Ev,_ZThn204_N7S1400C1D0Ev),
  ABISELECT(-224,-208),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S1400C1D1Ev,_ZThn208_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N7S1400C1D0Ev,_ZThn208_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  ABISELECT(-288,-252),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  ABISELECT(96,60),
  ABISELECT(-328,-272),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C1D1Ev,_ZThn272_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C1D0Ev,_ZThn272_N7S1400C1D0Ev),
  ABISELECT(-336,-276),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N7S1400C1D1Ev,_ZThn276_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn336_N7S1400C1D0Ev,_ZThn276_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  ABISELECT(-392,-312),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN11S1400C14_nt3v29Ev,
  (VTBL_ENTRY)&_ZN11S1400C14_nt3v30Ev,
  (VTBL_ENTRY)&_ZN11S1400C14_nt3v31Ev,
  0,
  ABISELECT(-424,-332),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-440,-340),
  0,
  ABISELECT(160,84),
  ABISELECT(-440,-340),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C1D1Ev,_ZTv0_n20_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C1D0Ev,_ZTv0_n20_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
  ABISELECT(-456,-348),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
  ABISELECT(-544,-396),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  ABISELECT(-552,-400),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  0,
  0,
  ABISELECT(-600,-424),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-600,-424),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C1D1Ev,_ZTv0_n36_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C1D0Ev,_ZTv0_n36_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-648,-452),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  0,
  0,
  0,
  0,
  ABISELECT(304,260),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-688,-472),
  0,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-248,-132),
  ABISELECT(-264,-140),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(-688,-472),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S1400C1D1Ev,_ZTv0_n40_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S1400C1D0Ev,_ZTv0_n40_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C163v34Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v35Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v36Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v37Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v38Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v39Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v40Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v41Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v42Ev,
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-704,-480),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-104,-56),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  ABISELECT(-704,-480),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S1400C1D1Ev,_ZTv0_n56_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S1400C1D0Ev,_ZTv0_n56_N7S1400C1D0Ev),
  ABISELECT(-496,-352),
  ABISELECT(-920,-684),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N7S1400C1D1Ev,_ZTvn204_n56_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N7S1400C1D0Ev,_ZTvn204_n56_N7S1400C1D0Ev),
  ABISELECT(-928,-688),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N7S1400C1D1Ev,_ZTvn208_n56_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N7S1400C1D0Ev,_ZTvn208_n56_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  0,
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-992,-732),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-344,-280),
  ABISELECT(-392,-308),
  ABISELECT(-552,-392),
  ABISELECT(-568,-400),
  ABISELECT(-992,-732),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S1400C1D1Ev,_ZTv0_n56_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N7S1400C1D0Ev,_ZTv0_n56_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C23v28Ev,
  ABISELECT(-784,-604),
  ABISELECT(-1208,-936),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N7S1400C1D1Ev,_ZTvn204_n56_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N7S1400C1D0Ev,_ZTvn204_n56_N7S1400C1D0Ev),
  ABISELECT(-1216,-940),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N7S1400C1D1Ev,_ZTvn208_n56_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N7S1400C1D0Ev,_ZTvn208_n56_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
  ABISELECT(-1280,-984),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  ABISELECT(-896,-672),
  ABISELECT(-1320,-1004),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn328_n112_N7S1400C1D1Ev,_ZTvn272_n56_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn328_n112_N7S1400C1D0Ev,_ZTvn272_n56_N7S1400C1D0Ev),
  ABISELECT(-1328,-1008),
  (VTBL_ENTRY)&(_ZTI7S1400C1[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn336_n112_N7S1400C1D1Ev,_ZTvn276_n56_N7S1400C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn336_n112_N7S1400C1D0Ev,_ZTvn276_n56_N7S1400C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern VTBL_ENTRY _ZTV7S1400C1[];
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C2D1Ev();
extern void _ZN7S1400C2D0Ev();
extern void _ZN7S1400C23v28Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C2__A__7S1400C1[] = {
  ABISELECT(648,452),
  ABISELECT(600,424),
  ABISELECT(440,340),
  ABISELECT(424,332),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1400C23v28Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C3D1Ev();
extern void _ZN7S1400C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C37S1400C2__7S1400C1[] = {
  ABISELECT(648,452),
  ABISELECT(600,424),
  ABISELECT(440,340),
  ABISELECT(424,332),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D0Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C37S1400C2__7S1400C1[] = {
  ABISELECT(208,128),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C37S1400C2__7S1400C1[] = {
  0,
  ABISELECT(-208,-128),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C37S1400C2__7S1400C1[] = {
  0,
  ABISELECT(-424,-332),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__7S1400C37S1400C2__7S1400C1[] = {
  ABISELECT(208,128),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn440_N7S1400C3D1Ev,_ZThn340_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn440_N7S1400C3D0Ev,_ZThn340_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C37S1400C2__7S1400C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-440,-340),
  0,
  ABISELECT(160,84),
  ABISELECT(-440,-340),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C37S1400C2__7S1400C1[] = {
  ABISELECT(-456,-348),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C37S1400C2__7S1400C1[] = {
  ABISELECT(-544,-396),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn600_N7S1400C3D1Ev,_ZThn424_N7S1400C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev)();
extern void ABISELECT(_ZThn600_N7S1400C3D0Ev,_ZThn424_N7S1400C3D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C37S1400C2__7S1400C1[] = {
  0,
  0,
  ABISELECT(-600,-424),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-600,-424),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C37S1400C2__7S1400C1[] = {
  ABISELECT(-552,-400),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C37S1400C2__7S1400C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-648,-452),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C2__A1__7S1400C1[] = {
  ABISELECT(96,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C2__A1__7S1400C1[] = {
  0,
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C2__A__7S1400C1[] = {
  0,
  ABISELECT(-424,-332),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C2D1Ev,_ZThn204_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C2D0Ev,_ZThn204_N7S1400C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__7S1400C2__A__7S1400C1[] = {
  ABISELECT(208,128),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C2D1Ev,_ZThn204_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C2D0Ev,_ZThn204_N7S1400C2D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn440_N7S1400C2D1Ev,_ZThn340_N7S1400C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev)();
extern void ABISELECT(_ZThn440_N7S1400C2D0Ev,_ZThn340_N7S1400C2D0Ev)() __attribute__((weak));
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C2__A__7S1400C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-440,-340),
  0,
  ABISELECT(160,84),
  ABISELECT(-440,-340),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C2__A__7S1400C1[] = {
  ABISELECT(-456,-348),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C2__A__7S1400C1[] = {
  ABISELECT(-544,-396),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn600_N7S1400C2D1Ev,_ZThn424_N7S1400C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev)();
extern void ABISELECT(_ZThn600_N7S1400C2D0Ev,_ZThn424_N7S1400C2D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C2__A__7S1400C1[] = {
  0,
  0,
  ABISELECT(-600,-424),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-600,-424),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C2__A__7S1400C1[] = {
  ABISELECT(-552,-400),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C2__A__7S1400C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-648,-452),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn328_N7S1400C2D1Ev,_ZThn272_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn328_N7S1400C2D0Ev,_ZThn272_N7S1400C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__A1__7S1400C2__A__7S1400C1[] = {
  ABISELECT(96,60),
  ABISELECT(-328,-272),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C2D1Ev,_ZThn272_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C2D0Ev,_ZThn272_N7S1400C2D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void _ZN8S1400C12D1Ev();
extern void _ZN8S1400C12D0Ev();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C1[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C12D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev)() __attribute__((weak));
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__8S1400C12__7S1400C1[] = {
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI8S1400C12[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN11S1400C17_nt3v32Ev();
extern void _ZN11S1400C17_nt3v33Ev();
extern void ABISELECT(_ZTv0_n80_N8S1400C15D1Ev,_ZTv0_n40_N8S1400C15D1Ev)();
extern void _ZN8S1400C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S1400C15D0Ev,_ZTv0_n40_N8S1400C15D0Ev)();
extern void _ZN8S1400C15D0Ev() __attribute__((weak));
extern void _ZN8S1400C163v34Ev();
extern void _ZN8S1400C163v35Ev();
extern void _ZN8S1400C163v36Ev();
extern void _ZN8S1400C163v37Ev();
extern void _ZN8S1400C163v38Ev();
extern void _ZN8S1400C153v39Ev();
extern void _ZN8S1400C153v40Ev();
extern void _ZN8S1400C153v41Ev();
extern void _ZN8S1400C153v42Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C15__7S1400C1[] = {
  ABISELECT(304,260),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-248,-132),
  ABISELECT(-264,-140),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v33Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S1400C15D1Ev,_ZTv0_n40_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S1400C15D0Ev,_ZTv0_n40_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C163v34Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v35Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v36Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v37Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v38Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v39Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v40Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v41Ev,
  (VTBL_ENTRY)&_ZN8S1400C153v42Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZThn16_N8S1400C15D1Ev,_ZThn8_N8S1400C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev)();
extern void ABISELECT(_ZThn16_N8S1400C15D0Ev,_ZThn8_N8S1400C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S1400C3__8S1400C15__7S1400C1[] = {
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-104,-56),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__8S1400C15__7S1400C1[] = {
  0,
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N8S1400C15D1Ev,_ZTvn204_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N8S1400C15D0Ev,_ZTvn204_n56_N8S1400C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__8S1400C15__7S1400C1[] = {
  ABISELECT(-496,-352),
  ABISELECT(-232,-212),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C15D1Ev,_ZTvn204_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C15D0Ev,_ZTvn204_n56_N8S1400C15D0Ev),
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N8S1400C15D1Ev,_ZTvn208_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N8S1400C15D0Ev,_ZTvn208_n56_N8S1400C15D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C97S1400C87S1400C3__8S1400C15__7S1400C1[] = {
  ABISELECT(-240,-216),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C15D1Ev,_ZTvn208_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C15D0Ev,_ZTvn208_n56_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N8S1400C15D1Ev,_ZTv0_n20_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S1400C15D0Ev,_ZTv0_n20_N8S1400C15D0Ev)();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__8S1400C15__7S1400C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(248,132),
  0,
  ABISELECT(160,84),
  ABISELECT(248,132),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C15D1Ev,_ZTv0_n20_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C15D0Ev,_ZTv0_n20_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__8S1400C15__7S1400C1[] = {
  ABISELECT(232,124),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__8S1400C15__7S1400C1[] = {
  ABISELECT(144,76),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C15D1Ev,_ZTv0_n36_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S1400C15D0Ev,_ZTv0_n36_N8S1400C15D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__8S1400C15__7S1400C1[] = {
  0,
  0,
  ABISELECT(88,48),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C15D1Ev,_ZTv0_n36_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C15D0Ev,_ZTv0_n36_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__8S1400C15__7S1400C1[] = {
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__8S1400C15__7S1400C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZThn304_N8S1400C15D1Ev,_ZThn260_N8S1400C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev)();
extern void ABISELECT(_ZThn304_N8S1400C15D0Ev,_ZThn260_N8S1400C15D0Ev)() __attribute__((weak));
extern void _ZN7S1400C23v28Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C2__8S1400C15__7S1400C1[] = {
  0,
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-304,-260),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-344,-280),
  ABISELECT(-392,-308),
  ABISELECT(-552,-392),
  ABISELECT(-568,-400),
  ABISELECT(-304,-260),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C23v28Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N8S1400C15D1Ev,_ZTvn204_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N8S1400C15D0Ev,_ZTvn204_n56_N8S1400C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C37S1400C2__A1__8S1400C15__7S1400C1[] = {
  ABISELECT(-784,-604),
  ABISELECT(-520,-464),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C15D1Ev,_ZTvn204_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C15D0Ev,_ZTvn204_n56_N8S1400C15D0Ev),
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N8S1400C15D1Ev,_ZTvn208_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N8S1400C15D0Ev,_ZTvn208_n56_N8S1400C15D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C97S1400C87S1400C37S1400C2__A2__8S1400C15__7S1400C1[] = {
  ABISELECT(-528,-468),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C15D1Ev,_ZTvn208_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C15D0Ev,_ZTvn208_n56_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C107S1400C2__A5__8S1400C15__7S1400C1[] = {
  ABISELECT(-592,-512),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn328_n112_N8S1400C15D1Ev,_ZTvn272_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn328_n112_N8S1400C15D0Ev,_ZTvn272_n56_N8S1400C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C2__A2__8S1400C15__7S1400C1[] = {
  ABISELECT(-896,-672),
  ABISELECT(-632,-532),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn328_n112_N8S1400C15D1Ev,_ZTvn272_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn328_n112_N8S1400C15D0Ev,_ZTvn272_n56_N8S1400C15D0Ev),
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn336_n112_N8S1400C15D1Ev,_ZTvn276_n56_N8S1400C15D1Ev)();
extern void ABISELECT(_ZTvn336_n112_N8S1400C15D0Ev,_ZTvn276_n56_N8S1400C15D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C97S1400C87S1400C2__A3__8S1400C15__7S1400C1[] = {
  ABISELECT(-640,-536),
  (VTBL_ENTRY)&(_ZTI8S1400C15[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn336_n112_N8S1400C15D1Ev,_ZTvn276_n56_N8S1400C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn336_n112_N8S1400C15D0Ev,_ZTvn276_n56_N8S1400C15D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C3D1Ev();
extern void _ZN7S1400C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C3__A1__7S1400C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-104,-56),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D0Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__A2__7S1400C1[] = {
  ABISELECT(-496,-352),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C3__A2__7S1400C1[] = {
  0,
  ABISELECT(496,352),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C3__A1__7S1400C1[] = {
  0,
  ABISELECT(280,148),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__7S1400C3__A1__7S1400C1[] = {
  ABISELECT(-496,-352),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev)();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C3__A1__7S1400C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(264,140),
  0,
  ABISELECT(160,84),
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C3__A1__7S1400C1[] = {
  ABISELECT(248,132),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C3__A1__7S1400C1[] = {
  ABISELECT(160,84),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C3__A1__7S1400C1[] = {
  0,
  0,
  ABISELECT(104,56),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,56),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C3__A1__7S1400C1[] = {
  ABISELECT(152,80),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C3__A1__7S1400C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN11S1400C17_nt3v32Ev();
extern void _ZN11S1400C17_nt3v33Ev();
extern void _ZN8S1400C16D1Ev();
extern void _ZN8S1400C16D0Ev();
extern void _ZN8S1400C163v34Ev();
extern void _ZN8S1400C163v35Ev();
extern void _ZN8S1400C163v36Ev();
extern void _ZN8S1400C163v37Ev();
extern void _ZN8S1400C163v38Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C16__7S1400C1[] = {
  ABISELECT(-88,-48),
  ABISELECT(-248,-132),
  ABISELECT(-264,-140),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v32Ev,
  (VTBL_ENTRY)&_ZN11S1400C17_nt3v33Ev,
  (VTBL_ENTRY)&_ZN8S1400C16D1Ev,
  (VTBL_ENTRY)&_ZN8S1400C16D0Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v34Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v35Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v36Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v37Ev,
  (VTBL_ENTRY)&_ZN8S1400C163v38Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__8S1400C16__7S1400C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZThn16_N8S1400C16D1Ev,_ZThn8_N8S1400C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev)();
extern void ABISELECT(_ZThn16_N8S1400C16D0Ev,_ZThn8_N8S1400C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S1400C3__8S1400C16__7S1400C1[] = {
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(224,208),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(216,204),
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-104,-56),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__8S1400C16__7S1400C1[] = {
  0,
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZTvn216_n112_N8S1400C16D1Ev,_ZTvn204_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZTvn216_n112_N8S1400C16D0Ev,_ZTvn204_n56_N8S1400C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__8S1400C16__7S1400C1[] = {
  ABISELECT(-496,-352),
  ABISELECT(-232,-212),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C16D1Ev,_ZTvn204_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn216_n112_N8S1400C16D0Ev,_ZTvn204_n56_N8S1400C16D0Ev),
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTvn224_n112_N8S1400C16D1Ev,_ZTvn208_n56_N8S1400C16D1Ev)();
extern void ABISELECT(_ZTvn224_n112_N8S1400C16D0Ev,_ZTvn208_n56_N8S1400C16D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C97S1400C87S1400C3__8S1400C16__7S1400C1[] = {
  ABISELECT(-240,-216),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C16D1Ev,_ZTvn208_n56_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn224_n112_N8S1400C16D0Ev,_ZTvn208_n56_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N8S1400C16D1Ev,_ZTv0_n20_N8S1400C16D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S1400C16D0Ev,_ZTv0_n20_N8S1400C16D0Ev)();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__8S1400C16__7S1400C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(248,132),
  0,
  ABISELECT(160,84),
  ABISELECT(248,132),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C16D1Ev,_ZTv0_n20_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S1400C16D0Ev,_ZTv0_n20_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__8S1400C16__7S1400C1[] = {
  ABISELECT(232,124),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__8S1400C16__7S1400C1[] = {
  ABISELECT(144,76),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N8S1400C16D1Ev,_ZTv0_n36_N8S1400C16D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S1400C16D0Ev,_ZTv0_n36_N8S1400C16D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__8S1400C16__7S1400C1[] = {
  0,
  0,
  ABISELECT(88,48),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C16D1Ev,_ZTv0_n36_N8S1400C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S1400C16D0Ev,_ZTv0_n36_N8S1400C16D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A3__8S1400C16__7S1400C1[] = {
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI8S1400C16[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C2D1Ev();
extern void _ZN7S1400C2D0Ev();
extern void _ZN7S1400C23v28Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C2__A1__7S1400C1[] = {
  ABISELECT(-344,-280),
  ABISELECT(-392,-308),
  ABISELECT(-552,-392),
  ABISELECT(-568,-400),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1400C23v28Ev,
};
extern void _ZN7S1400C42v4Ev();
extern void _ZN7S1400C42v5Ev();
extern void _ZN7S1400C42v6Ev();
extern void _ZN7S1400C42v7Ev();
extern void _ZN7S1400C33v25Ev();
extern void _ZN7S1400C33v26Ev();
extern void _ZN7S1400C33v27Ev();
extern void _ZN7S1400C3D1Ev();
extern void _ZN7S1400C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C37S1400C2__A2__7S1400C1[] = {
  ABISELECT(-344,-280),
  ABISELECT(-392,-308),
  ABISELECT(-552,-392),
  ABISELECT(-568,-400),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN7S1400C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1400C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1400C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C3D0Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C37S1400C2__A3__7S1400C1[] = {
  ABISELECT(-784,-604),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C37S1400C2__A3__7S1400C1[] = {
  0,
  ABISELECT(784,604),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C37S1400C2__A2__7S1400C1[] = {
  0,
  ABISELECT(568,400),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__7S1400C37S1400C2__A2__7S1400C1[] = {
  ABISELECT(-784,-604),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D1Ev,_ZThn204_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C3D0Ev,_ZThn204_N7S1400C3D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev)();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C37S1400C2__A2__7S1400C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(552,392),
  0,
  ABISELECT(160,84),
  ABISELECT(552,392),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C37S1400C2__A2__7S1400C1[] = {
  ABISELECT(536,384),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C37S1400C2__A2__7S1400C1[] = {
  ABISELECT(448,336),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C37S1400C2__A2__7S1400C1[] = {
  0,
  0,
  ABISELECT(392,308),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(392,308),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C37S1400C2__A2__7S1400C1[] = {
  ABISELECT(440,332),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C37S1400C2__A2__7S1400C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(344,280),
  (VTBL_ENTRY)&(_ZTI7S1400C3[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void _ZN7S1400C8D1Ev();
extern void _ZN7S1400C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C2__A4__7S1400C1[] = {
  ABISELECT(-896,-672),
  0,
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D1Ev,
  (VTBL_ENTRY)&_ZN7S1400C8D0Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C87S1400C2__A4__7S1400C1[] = {
  0,
  ABISELECT(896,672),
  (VTBL_ENTRY)&(_ZTI7S1400C8[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C7_nt3v17Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C7_nt__7S1400C2__A1__7S1400C1[] = {
  0,
  ABISELECT(568,400),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn216_N7S1400C2D1Ev,_ZThn204_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn216_N7S1400C2D0Ev,_ZThn204_N7S1400C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C87S1400C3__7S1400C2__A1__7S1400C1[] = {
  ABISELECT(-784,-604),
  ABISELECT(-216,-204),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C2D1Ev,_ZThn204_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn216_N7S1400C2D0Ev,_ZThn204_N7S1400C2D0Ev),
};
extern void _ZN10S1400C7_nt3v17Ev();
extern void ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev)();
extern void _ZN8S1400C123v22Ev();
extern void _ZN8S1400C123v23Ev();
extern void _ZN8S1400C123v24Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C12__7S1400C2__A1__7S1400C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(552,392),
  0,
  ABISELECT(160,84),
  ABISELECT(552,392),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C7_nt3v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN8S1400C123v22Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v23Ev,
  (VTBL_ENTRY)&_ZN8S1400C123v24Ev,
};
extern void _ZN8S1400C133v20Ev();
extern void _ZN8S1400C133v21Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C138S1400C12__7S1400C2__A1__7S1400C1[] = {
  ABISELECT(536,384),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C133v20Ev,
  (VTBL_ENTRY)&_ZN8S1400C133v21Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
static  VTBL_ENTRY _tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C2__A1__7S1400C1[] = {
  ABISELECT(448,336),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev)();
extern void _ZN7S1400C93v15Ev();
extern void _ZN7S1400C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1400C9__A1__7S1400C2__A1__7S1400C1[] = {
  0,
  0,
  ABISELECT(392,308),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(392,308),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1400C93v15Ev,
  (VTBL_ENTRY)&_ZN7S1400C93v16Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C108S1400C12__A2__7S1400C2__A1__7S1400C1[] = {
  ABISELECT(440,332),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN8S1400C102v9Ev();
extern void _ZN8S1400C103v10Ev();
extern void _ZN8S1400C103v11Ev();
extern void _ZN8S1400C103v12Ev();
extern void _ZN8S1400C103v13Ev();
extern void _ZN8S1400C103v14Ev();
static  VTBL_ENTRY _tg__ZTV8S1400C10__A3__7S1400C2__A1__7S1400C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(344,280),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN8S1400C102v9Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v10Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v11Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v12Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v13Ev,
  (VTBL_ENTRY)&_ZN8S1400C103v14Ev,
};
extern void _ZN10S1400C5_nt2v8Ev();
extern void _ZN7S1400C83v18Ev();
extern void _ZN7S1400C83v19Ev();
extern void ABISELECT(_ZThn328_N7S1400C2D1Ev,_ZThn272_N7S1400C2D1Ev)();
extern void ABISELECT(_ZThn328_N7S1400C2D0Ev,_ZThn272_N7S1400C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S1400C8__A1__7S1400C2__A1__7S1400C1[] = {
  ABISELECT(-896,-672),
  ABISELECT(-328,-272),
  (VTBL_ENTRY)&(_ZTI7S1400C2[0]),
  (VTBL_ENTRY)&_ZN10S1400C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v18Ev,
  (VTBL_ENTRY)&_ZN7S1400C83v19Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C2D1Ev,_ZThn272_N7S1400C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn328_N7S1400C2D0Ev,_ZThn272_N7S1400C2D0Ev),
};
static  VTT_ENTRY vtt_S1400C1[] = {
  {&(_ZTV7S1400C1[10]),  10,325},
  {&(_tg__ZTV7S1400C2__A__7S1400C1[6]),  6,16},
  {&(_tg__ZTV7S1400C37S1400C2__7S1400C1[6]),  6,15},
  {&(_tg__ZTV7S1400C87S1400C37S1400C2__7S1400C1[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C37S1400C2__7S1400C1[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C37S1400C2__7S1400C1[3]),  3,4},
  {&(_tg__ZTV7S1400C8__7S1400C37S1400C2__7S1400C1[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C37S1400C2__7S1400C1[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C37S1400C2__7S1400C1[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C37S1400C2__7S1400C1[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C37S1400C2__7S1400C1[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C37S1400C2__7S1400C1[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C37S1400C2__7S1400C1[8]),  8,14},
  {&(_tg__ZTV7S1400C87S1400C2__A1__7S1400C1[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C2__A1__7S1400C1[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C2__A__7S1400C1[3]),  3,4},
  {&(_tg__ZTV7S1400C87S1400C3__7S1400C2__A__7S1400C1[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C2__A__7S1400C1[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C2__A__7S1400C1[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C2__A__7S1400C1[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C2__A__7S1400C1[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C2__A__7S1400C1[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C2__A__7S1400C1[8]),  8,14},
  {&(_tg__ZTV7S1400C8__A1__7S1400C2__A__7S1400C1[3]),  3,8},
  {&(_ZTV7S1400C1[79]),  79,325},
  {&(_ZTV7S1400C1[26]),  26,325},
  {&(_ZTV7S1400C1[97]),  97,325},
  {&(_ZTV7S1400C1[105]),  105,325},
  {&(_ZTV7S1400C1[109]),  109,325},
  {&(_ZTV7S1400C1[129]),  129,325},
  {&(_ZTV7S1400C1[112]),  112,325},
  {&(_ZTV7S1400C1[147]),  147,325},
  {&(_ZTV7S1400C1[54]),  54,325},
  {&(_ZTV7S1400C1[174]),  174,325},
  {&(_ZTV7S1400C1[212]),  212,325},
  {&(_ZTV7S1400C1[224]),  224,325},
  {&(_ZTV7S1400C1[231]),  231,325},
  {&(_ZTV7S1400C1[174]),  174,325},
  {&(_ZTV7S1400C1[267]),  267,325},
  {&(_ZTV7S1400C1[280]),  280,325},
  {&(_ZTV7S1400C1[287]),  287,325},
  {&(_ZTV7S1400C1[299]),  299,325},
  {&(_ZTV7S1400C1[308]),  308,325},
  {&(_ZTV7S1400C1[315]),  315,325},
  {&(_tg__ZTV8S1400C12__7S1400C1[3]),  3,9},
  {&(_tg__ZTV7S1400C9__8S1400C12__7S1400C1[11]),  11,21},
  {&(_tg__ZTV8S1400C15__7S1400C1[17]),  17,30},
  {&(_tg__ZTV7S1400C3__8S1400C15__7S1400C1[25]),  25,34},
  {&(_tg__ZTV10S1400C7_nt__8S1400C15__7S1400C1[3]),  3,4},
  {&(_tg__ZTV7S1400C87S1400C3__8S1400C15__7S1400C1[3]),  3,8},
  {&(_tg__ZTV7S1400C97S1400C87S1400C3__8S1400C15__7S1400C1[2]),  2,12},
  {&(_tg__ZTV8S1400C12__8S1400C15__7S1400C1[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__8S1400C15__7S1400C1[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__8S1400C15__7S1400C1[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__8S1400C15__7S1400C1[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__8S1400C15__7S1400C1[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__8S1400C15__7S1400C1[8]),  8,14},
  {&(_tg__ZTV8S1400C15__7S1400C1[17]),  17,30},
  {&(_tg__ZTV7S1400C2__8S1400C15__7S1400C1[26]),  26,36},
  {&(_tg__ZTV7S1400C87S1400C37S1400C2__A1__8S1400C15__7S1400C1[3]),  3,8},
  {&(_tg__ZTV7S1400C97S1400C87S1400C37S1400C2__A2__8S1400C15__7S1400C1[2]),  2,12},
  {&(_tg__ZTV8S1400C107S1400C2__A5__8S1400C15__7S1400C1[2]),  2,8},
  {&(_tg__ZTV7S1400C87S1400C2__A2__8S1400C15__7S1400C1[3]),  3,8},
  {&(_tg__ZTV7S1400C97S1400C87S1400C2__A3__8S1400C15__7S1400C1[2]),  2,12},
  {&(_tg__ZTV7S1400C3__A1__7S1400C1[6]),  6,15},
  {&(_tg__ZTV7S1400C87S1400C3__A2__7S1400C1[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C3__A2__7S1400C1[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C3__A1__7S1400C1[3]),  3,4},
  {&(_tg__ZTV7S1400C8__7S1400C3__A1__7S1400C1[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C3__A1__7S1400C1[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C3__A1__7S1400C1[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C3__A1__7S1400C1[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C3__A1__7S1400C1[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C3__A1__7S1400C1[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C3__A1__7S1400C1[8]),  8,14},
  {&(_tg__ZTV8S1400C16__7S1400C1[7]),  7,16},
  {&(_tg__ZTV8S1400C10__8S1400C16__7S1400C1[8]),  8,14},
  {&(_tg__ZTV7S1400C3__8S1400C16__7S1400C1[25]),  25,34},
  {&(_tg__ZTV10S1400C7_nt__8S1400C16__7S1400C1[3]),  3,4},
  {&(_tg__ZTV7S1400C87S1400C3__8S1400C16__7S1400C1[3]),  3,8},
  {&(_tg__ZTV7S1400C97S1400C87S1400C3__8S1400C16__7S1400C1[2]),  2,12},
  {&(_tg__ZTV8S1400C12__8S1400C16__7S1400C1[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__8S1400C16__7S1400C1[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__8S1400C16__7S1400C1[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__8S1400C16__7S1400C1[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A3__8S1400C16__7S1400C1[2]),  2,8},
  {&(_tg__ZTV7S1400C2__A1__7S1400C1[6]),  6,16},
  {&(_tg__ZTV7S1400C37S1400C2__A2__7S1400C1[6]),  6,15},
  {&(_tg__ZTV7S1400C87S1400C37S1400C2__A3__7S1400C1[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C37S1400C2__A3__7S1400C1[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C37S1400C2__A2__7S1400C1[3]),  3,4},
  {&(_tg__ZTV7S1400C8__7S1400C37S1400C2__A2__7S1400C1[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C37S1400C2__A2__7S1400C1[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C37S1400C2__A2__7S1400C1[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C37S1400C2__A2__7S1400C1[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C37S1400C2__A2__7S1400C1[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C37S1400C2__A2__7S1400C1[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C37S1400C2__A2__7S1400C1[8]),  8,14},
  {&(_tg__ZTV7S1400C87S1400C2__A4__7S1400C1[3]),  3,8},
  {&(_tg__ZTV10S1400C7_nt__7S1400C87S1400C2__A4__7S1400C1[3]),  3,4},
  {&(_tg__ZTV10S1400C7_nt__7S1400C2__A1__7S1400C1[3]),  3,4},
  {&(_tg__ZTV7S1400C87S1400C3__7S1400C2__A1__7S1400C1[3]),  3,8},
  {&(_tg__ZTV8S1400C12__7S1400C2__A1__7S1400C1[17]),  17,23},
  {&(_tg__ZTV8S1400C138S1400C12__7S1400C2__A1__7S1400C1[2]),  2,4},
  {&(_tg__ZTV10S1400C5_nt8S1400C12__A1__7S1400C2__A1__7S1400C1[2]),  2,3},
  {&(_tg__ZTV7S1400C9__A1__7S1400C2__A1__7S1400C1[11]),  11,21},
  {&(_tg__ZTV8S1400C108S1400C12__A2__7S1400C2__A1__7S1400C1[2]),  2,8},
  {&(_tg__ZTV8S1400C10__A3__7S1400C2__A1__7S1400C1[8]),  8,14},
  {&(_tg__ZTV7S1400C8__A1__7S1400C2__A1__7S1400C1[3]),  3,8},
};
extern VTBL_ENTRY _ZTI7S1400C1[];
extern  VTBL_ENTRY _ZTV7S1400C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1400C1[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C16D0Ev,_ZTv0_n56_N8S1400C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1400C16D0Ev,_ZThn8_N8S1400C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C16D1Ev,_ZTv0_n56_N8S1400C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1400C16D1Ev,_ZThn8_N8S1400C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C15D0Ev,_ZTv0_n56_N8S1400C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S1400C15D0Ev,_ZThn260_N8S1400C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1400C15D0Ev,_ZThn8_N8S1400C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S1400C15D1Ev,_ZTv0_n56_N8S1400C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N8S1400C15D1Ev,_ZThn260_N8S1400C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S1400C15D1Ev,_ZThn8_N8S1400C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S1400C15D0Ev,_ZTv0_n40_N8S1400C15D0Ev), // 
  (VTBL_ENTRY)_ZN8S1400C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S1400C15D1Ev,_ZTv0_n40_N8S1400C15D1Ev), // 
  (VTBL_ENTRY)_ZN8S1400C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D0Ev,_ZTv0_n36_N8S1400C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D0Ev,_ZThn84_N8S1400C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S1400C12D1Ev,_ZTv0_n36_N8S1400C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S1400C12D1Ev,_ZThn84_N8S1400C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C2D0Ev,_ZTv0_n36_N7S1400C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn600_N7S1400C2D0Ev,_ZThn424_N7S1400C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C2D1Ev,_ZTv0_n36_N7S1400C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn600_N7S1400C2D1Ev,_ZThn424_N7S1400C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C2D0Ev,_ZTv0_n20_N7S1400C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1400C2D0Ev,_ZThn340_N7S1400C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C2D1Ev,_ZTv0_n20_N7S1400C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1400C2D1Ev,_ZThn340_N7S1400C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D0Ev,_ZTv0_n36_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn600_N7S1400C3D0Ev,_ZThn424_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C3D1Ev,_ZTv0_n36_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn600_N7S1400C3D1Ev,_ZThn424_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D0Ev,_ZTv0_n20_N7S1400C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1400C3D0Ev,_ZThn340_N7S1400C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C3D1Ev,_ZTv0_n20_N7S1400C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1400C3D1Ev,_ZThn340_N7S1400C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S1400C1D0Ev,_ZTv0_n56_N7S1400C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N7S1400C1D0Ev,_ZThn732_N7S1400C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S1400C1D0Ev,_ZThn480_N7S1400C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N7S1400C1D1Ev,_ZTv0_n56_N7S1400C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn992_N7S1400C1D1Ev,_ZThn732_N7S1400C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S1400C1D1Ev,_ZThn480_N7S1400C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S1400C1D0Ev,_ZTv0_n40_N7S1400C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N7S1400C1D0Ev,_ZThn472_N7S1400C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S1400C1D1Ev,_ZTv0_n40_N7S1400C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N7S1400C1D1Ev,_ZThn472_N7S1400C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C1D0Ev,_ZTv0_n36_N7S1400C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn600_N7S1400C1D0Ev,_ZThn424_N7S1400C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1400C1D1Ev,_ZTv0_n36_N7S1400C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn600_N7S1400C1D1Ev,_ZThn424_N7S1400C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C1D0Ev,_ZTv0_n20_N7S1400C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1400C1D0Ev,_ZThn340_N7S1400C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S1400C1D1Ev,_ZTv0_n20_N7S1400C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N7S1400C1D1Ev,_ZThn340_N7S1400C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1400C1 = {  "S1400C1", // class name
  bases_S1400C1, 43,
  &(vtc_S1400C1[0]), // expected_vtbl_contents
  &(vtt_S1400C1[0]), // expected_vtt_contents
  ABISELECT(1384,1044), // object size
  NSPAIRA(_ZTI7S1400C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1400C1),325, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1400C1),109, //virtual table table var
  43, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2366C5_nt  {
  void *s2366c5f0;
  int s2366c5f1;
  ::S629C14 s2366c5f2;
  void  mf2366c5(); // _ZN10S2366C5_nt8mf2366c5Ev
};
//SIG(-1 S2366C5_nt) C1{ m Fp Fi FC2{ m}}


void  S2366C5_nt ::mf2366c5(){}

//skip512 S2366C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2366C4_nt  {
  ::S2366C5_nt s2366c4f0;
  int s2366c4f1[2];
  char s2366c4f2;
  virtual  ~S2366C4_nt(); // _ZN10S2366C4_ntD1Ev
  virtual void  v5(); // _ZN10S2366C4_nt2v5Ev
  virtual void  v6(); // _ZN10S2366C4_nt2v6Ev
  virtual void  v7(); // _ZN10S2366C4_nt2v7Ev
  S2366C4_nt(); // tgen
};
//SIG(-1 S2366C4_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2366C4_nt ::~S2366C4_nt(){ note_dtor("S2366C4_nt", this);}
void  S2366C4_nt ::v5(){vfunc_called(this, "_ZN10S2366C4_nt2v5Ev");}
void  S2366C4_nt ::v6(){vfunc_called(this, "_ZN10S2366C4_nt2v6Ev");}
void  S2366C4_nt ::v7(){vfunc_called(this, "_ZN10S2366C4_nt2v7Ev");}
S2366C4_nt ::S2366C4_nt(){ note_ctor("S2366C4_nt", this);} // tgen

//skip512 S2366C4_nt

#else // __cplusplus

extern void _ZN10S2366C4_ntC1Ev();
extern void _ZN10S2366C4_ntD1Ev();
Name_Map name_map_S2366C4_nt[] = {
  NSPAIR(_ZN10S2366C4_ntC1Ev),
  NSPAIR(_ZN10S2366C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2366C4_nt[];
extern void _ZN10S2366C4_ntD1Ev();
extern void _ZN10S2366C4_ntD0Ev();
extern void _ZN10S2366C4_nt2v5Ev();
extern void _ZN10S2366C4_nt2v6Ev();
extern void _ZN10S2366C4_nt2v7Ev();
static  VTBL_ENTRY vtc_S2366C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2366C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2366C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S2366C4_nt[];
VTBL_ENTRY *P__ZTI10S2366C4_nt = _ZTI10S2366C4_nt; 
extern  VTBL_ENTRY _ZTV10S2366C4_nt[];
Class_Descriptor cd_S2366C4_nt = {  "S2366C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2366C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S2366C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2366C4_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  S2366C3_nt  : S2366C4_nt {
  void *s2366c3f0;
  virtual void  v8(); // _ZN10S2366C3_nt2v8Ev
  virtual void  v9(); // _ZN10S2366C3_nt2v9Ev
  ~S2366C3_nt(); // tgen
  S2366C3_nt(); // tgen
};
//SIG(-1 S2366C3_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2366C3_nt ::v8(){vfunc_called(this, "_ZN10S2366C3_nt2v8Ev");}
void  S2366C3_nt ::v9(){vfunc_called(this, "_ZN10S2366C3_nt2v9Ev");}
S2366C3_nt ::~S2366C3_nt(){ note_dtor("S2366C3_nt", this);} // tgen
S2366C3_nt ::S2366C3_nt(){ note_ctor("S2366C3_nt", this);} // tgen

//skip512 S2366C3_nt

#else // __cplusplus

extern void _ZN10S2366C3_ntC1Ev();
extern void _ZN10S2366C3_ntD1Ev();
Name_Map name_map_S2366C3_nt[] = {
  NSPAIR(_ZN10S2366C3_ntC1Ev),
  NSPAIR(_ZN10S2366C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2366C4_nt;
extern VTBL_ENTRY _ZTI10S2366C4_nt[];
extern  VTBL_ENTRY _ZTV10S2366C4_nt[];
static Base_Class bases_S2366C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2366C4_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 _ZTI10S2366C3_nt[];
extern void _ZN10S2366C3_ntD1Ev();
extern void _ZN10S2366C3_ntD0Ev();
extern void _ZN10S2366C4_nt2v5Ev();
extern void _ZN10S2366C4_nt2v6Ev();
extern void _ZN10S2366C4_nt2v7Ev();
extern void _ZN10S2366C3_nt2v8Ev();
extern void _ZN10S2366C3_nt2v9Ev();
static  VTBL_ENTRY vtc_S2366C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2366C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2366C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2366C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2366C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2366C3_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI10S2366C3_nt[];
VTBL_ENTRY *P__ZTI10S2366C3_nt = _ZTI10S2366C3_nt; 
extern  VTBL_ENTRY _ZTV10S2366C3_nt[];
Class_Descriptor cd_S2366C3_nt = {  "S2366C3_nt", // class name
  bases_S2366C3_nt, 1,
  &(vtc_S2366C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S2366C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2366C3_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2366C8_nt  {
  long s2366c8f0[4];
};
//SIG(-1 S2366C8_nt) C1{ Fl[4]}



//skip512 S2366C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2366C7_nt  {
  ::S2366C8_nt s2366c7f0;
  void  mf2366c7(); // _ZN10S2366C7_nt8mf2366c7Ev
};
//SIG(-1 S2366C7_nt) C1{ m FC2{ Fl[4]}}


void  S2366C7_nt ::mf2366c7(){}

//skip512 S2366C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2366C10_nt  {
  void *s2366c10f0;
  void  mf2366c10(); // _ZN11S2366C10_nt9mf2366c10Ev
};
//SIG(-1 S2366C10_nt) C1{ m Fp}


void  S2366C10_nt ::mf2366c10(){}

//skip512 S2366C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2366C9_nt  {
  ::S2366C5_nt s2366c9f0;
  ::S2366C10_nt s2366c9f1;
  int s2366c9f2[2];
  ::S2366C5_nt s2366c9f3;
  ::S2366C10_nt s2366c9f4;
  int s2366c9f5[2];
  void  mf2366c9(); // _ZN10S2366C9_nt8mf2366c9Ev
};
//SIG(-1 S2366C9_nt) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m Fp} Fi[2] FC2 FC4 Fi[2]}


void  S2366C9_nt ::mf2366c9(){}

//skip512 S2366C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2366C14_nt  {
  int s2366c14f0[2];
  void  mf2366c14(); // _ZN11S2366C14_nt9mf2366c14Ev
};
//SIG(-1 S2366C14_nt) C1{ m Fi[2]}


void  S2366C14_nt ::mf2366c14(){}

//skip512 S2366C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2366C12_nt  {
  ::S1503C5_nt s2366c12f0;
  ::S2366C14_nt s2366c12f1;
  void  mf2366c12(); // _ZN11S2366C12_nt9mf2366c12Ev
};
//SIG(-1 S2366C12_nt) C1{ m FC2{ m Fi[2]} FC3{ m Fi[2]}}


void  S2366C12_nt ::mf2366c12(){}

//skip512 S2366C12_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2366C11_nt  {
  void *s2366c11f0[2];
  int s2366c11f1[2];
  void *s2366c11f2;
  __tsi64 s2366c11f3;
  void *s2366c11f4[9];
  short s2366c11f5;
  void *s2366c11f6[2];
  ::S2366C12_nt s2366c11f7;
  ::S2366C14_nt s2366c11f8;
  char s2366c11f9;
  int s2366c11f10[3];
  char s2366c11f11;
  int s2366c11f12[6];
  char s2366c11f13;
  void  mf2366c11(); // _ZN11S2366C11_nt9mf2366c11Ev
};
//SIG(-1 S2366C11_nt) C1{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC2{ m FC3{ m Fi[2]} FC4{ m Fi[2]}} FC4 Fc Fi[3] Fc Fi[6] Fc}


void  S2366C11_nt ::mf2366c11(){}

//skip512 S2366C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2366C15_nt  {
  int s2366c15f0[2];
  __tsi64 s2366c15f1;
  int s2366c15f2;
  void  mf2366c15(); // _ZN11S2366C15_nt9mf2366c15Ev
};
//SIG(-1 S2366C15_nt) C1{ m Fi[2] FL Fi}


void  S2366C15_nt ::mf2366c15(){}

//skip512 S2366C15_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2366C2  : S2366C3_nt {
  int s2366c2f0[4];
  void *s2366c2f1[4];
  int s2366c2f2[2];
  ::S2366C7_nt s2366c2f3;
  char s2366c2f4[2];
  ::S2366C9_nt s2366c2f5;
  void *s2366c2f6;
  ::S2366C11_nt s2366c2f7;
  ::S2366C11_nt s2366c2f8;
  ::S2366C15_nt s2366c2f9;
  ::S629C8_nt s2366c2f10;
  __tsi64 s2366c2f11[3];
  int s2366c2f12;
  __tsi64 s2366c2f13;
  ::S2366C5_nt s2366c2f14;
  __tsi64 s2366c2f15;
  virtual void  v10(); // _ZN7S2366C23v10Ev
  virtual void  v11(); // _ZN7S2366C23v11Ev
  virtual void  v12(); // _ZN7S2366C23v12Ev
  virtual void  v13(); // _ZN7S2366C23v13Ev
  virtual void  v14(); // _ZN7S2366C23v14Ev
  virtual void  v15(); // _ZN7S2366C23v15Ev
  ~S2366C2(); // tgen
  S2366C2(); // tgen
};
//SIG(-1 S2366C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} v1 v2 v3 v4 v5 v6 Fi[4] Fp[4] Fi[2] FC6{ m FC7{ Fl[4]}} Fc[2] FC8{ m FC4 FC9{ m Fp} Fi[2] FC4 FC9 Fi[2]} Fp FC10{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC11{ m FC12{ m Fi[2]} FC13{ m Fi[2]}} FC13 Fc Fi[3] Fc Fi[6] Fc} FC10 FC14{ m Fi[2] FL Fi} FC15{ m} FL[3] Fi FL FC4 FL}


void  S2366C2 ::v10(){vfunc_called(this, "_ZN7S2366C23v10Ev");}
void  S2366C2 ::v11(){vfunc_called(this, "_ZN7S2366C23v11Ev");}
void  S2366C2 ::v12(){vfunc_called(this, "_ZN7S2366C23v12Ev");}
void  S2366C2 ::v13(){vfunc_called(this, "_ZN7S2366C23v13Ev");}
void  S2366C2 ::v14(){vfunc_called(this, "_ZN7S2366C23v14Ev");}
void  S2366C2 ::v15(){vfunc_called(this, "_ZN7S2366C23v15Ev");}
S2366C2 ::~S2366C2(){ note_dtor("S2366C2", this);} // tgen
S2366C2 ::S2366C2(){ note_ctor("S2366C2", this);} // tgen

static void Test_S2366C2()
{
  extern Class_Descriptor cd_S2366C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(92,131)];
    init_test(&cd_S2366C2, buf);
    S2366C2 *dp, &lv = *(dp=new (buf) S2366C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(728,520), "sizeof(S2366C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2366C2)");
    check_base_class_offset(lv, (S2366C4_nt*)(S2366C3_nt*), 0, "S2366C2");
    check_base_class_offset(lv, (S2366C3_nt*), 0, "S2366C2");
    check_field_offset(lv, s2366c2f0, ABISELECT(48,32), "S2366C2.s2366c2f0");
    check_field_offset(lv, s2366c2f1, ABISELECT(64,48), "S2366C2.s2366c2f1");
    check_field_offset(lv, s2366c2f2, ABISELECT(96,64), "S2366C2.s2366c2f2");
    check_field_offset(lv, s2366c2f3, ABISELECT(104,72), "S2366C2.s2366c2f3");
    check_field_offset(lv, s2366c2f4, ABISELECT(136,88), "S2366C2.s2366c2f4");
    check_field_offset(lv, s2366c2f5, ABISELECT(144,92), "S2366C2.s2366c2f5");
    check_field_offset(lv, s2366c2f6, ABISELECT(208,140), "S2366C2.s2366c2f6");
    check_field_offset(lv, s2366c2f7, ABISELECT(216,144), "S2366C2.s2366c2f7");
    check_field_offset(lv, s2366c2f8, ABISELECT(424,292), "S2366C2.s2366c2f8");
    check_field_offset(lv, s2366c2f9, ABISELECT(632,440), "S2366C2.s2366c2f9");
    check_field_offset(lv, s2366c2f10, ABISELECT(656,460), "S2366C2.s2366c2f10");
    check_field_offset(lv, s2366c2f11, ABISELECT(664,464), "S2366C2.s2366c2f11");
    check_field_offset(lv, s2366c2f12, ABISELECT(688,488), "S2366C2.s2366c2f12");
    check_field_offset(lv, s2366c2f13, ABISELECT(696,492), "S2366C2.s2366c2f13");
    check_field_offset(lv, s2366c2f14, ABISELECT(704,500), "S2366C2.s2366c2f14");
    check_field_offset(lv, s2366c2f15, ABISELECT(720,512), "S2366C2.s2366c2f15");
    test_class_info(&lv, &cd_S2366C2);
    dp->~S2366C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2366C2(Test_S2366C2, "S2366C2", ABISELECT(728,520));

#else // __cplusplus

extern void _ZN7S2366C2C1Ev();
extern void _ZN7S2366C2D1Ev();
Name_Map name_map_S2366C2[] = {
  NSPAIR(_ZN7S2366C2C1Ev),
  NSPAIR(_ZN7S2366C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2366C4_nt;
extern VTBL_ENTRY _ZTI10S2366C4_nt[];
extern  VTBL_ENTRY _ZTV10S2366C4_nt[];
extern Class_Descriptor cd_S2366C3_nt;
extern VTBL_ENTRY _ZTI10S2366C3_nt[];
extern  VTBL_ENTRY _ZTV10S2366C3_nt[];
static Base_Class bases_S2366C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2366C4_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_S2366C3_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 _ZTI7S2366C2[];
extern void _ZN7S2366C2D1Ev();
extern void _ZN7S2366C2D0Ev();
extern void _ZN10S2366C4_nt2v5Ev();
extern void _ZN10S2366C4_nt2v6Ev();
extern void _ZN10S2366C4_nt2v7Ev();
extern void _ZN10S2366C3_nt2v8Ev();
extern void _ZN10S2366C3_nt2v9Ev();
extern void _ZN7S2366C23v10Ev();
extern void _ZN7S2366C23v11Ev();
extern void _ZN7S2366C23v12Ev();
extern void _ZN7S2366C23v13Ev();
extern void _ZN7S2366C23v14Ev();
extern void _ZN7S2366C23v15Ev();
static  VTBL_ENTRY vtc_S2366C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2366C2[0]),
  (VTBL_ENTRY)&_ZN7S2366C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2366C2D0Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2366C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2366C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v15Ev,
};
extern VTBL_ENTRY _ZTI7S2366C2[];
extern  VTBL_ENTRY _ZTV7S2366C2[];
Class_Descriptor cd_S2366C2 = {  "S2366C2", // class name
  bases_S2366C2, 2,
  &(vtc_S2366C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(728,520), // object size
  NSPAIRA(_ZTI7S2366C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2366C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2366C17_nt  {
  __tsi64 s2366c17f0;
  ::S2366C5_nt s2366c17f1;
  ::S2366C10_nt s2366c17f2;
  void *s2366c17f3;
  void  mf2366c17(); // _ZN11S2366C17_nt9mf2366c17Ev
};
//SIG(-1 S2366C17_nt) C1{ m FL FC2{ m Fp Fi FC3{ m}} FC4{ m Fp} Fp}


void  S2366C17_nt ::mf2366c17(){}

//skip512 S2366C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2366C19  {
  void *s2366c19f0;
  void  mf2366c19(); // _ZN8S2366C199mf2366c19Ev
};
//SIG(-1 S2366C19) C1{ m Fp}


void  S2366C19 ::mf2366c19(){}

static void Test_S2366C19()
{
  {
    init_simple_test("S2366C19");
    S2366C19 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2366C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2366C19)");
    check_field_offset(lv, s2366c19f0, 0, "S2366C19.s2366c19f0");
  }
}
static Arrange_To_Call_Me vS2366C19(Test_S2366C19, "S2366C19", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2366C1  : S2366C2 {
  ::S2366C17_nt s2366c1f0;
  void *s2366c1f1;
  ::S2366C19 s2366c1f2;
  void *s2366c1f3;
  virtual void  v1(); // _ZN7S2366C12v1Ev
  virtual void  v2(); // _ZN7S2366C12v2Ev
  virtual void  v3(); // _ZN7S2366C12v3Ev
  virtual void  v4(); // _ZN7S2366C12v4Ev
  ~S2366C1(); // tgen
  S2366C1(); // tgen
};
//SIG(1 S2366C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v8 v9 Fp} v10 v11 v12 v13 v14 v15 Fi[4] Fp[4] Fi[2] FC7{ m FC8{ Fl[4]}} Fc[2] FC9{ m FC5 FC10{ m Fp} Fi[2] FC5 FC10 Fi[2]} Fp FC11{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC12{ m FC13{ m Fi[2]} FC14{ m Fi[2]}} FC14 Fc Fi[3] Fc Fi[6] Fc} FC11 FC15{ m Fi[2] FL Fi} FC16{ m} FL[3] Fi FL FC5 FL} v1 v2 v3 v4 FC17{ m FL FC5 FC10 Fp} Fp FC18{ m Fp} Fp}


void  S2366C1 ::v1(){vfunc_called(this, "_ZN7S2366C12v1Ev");}
void  S2366C1 ::v2(){vfunc_called(this, "_ZN7S2366C12v2Ev");}
void  S2366C1 ::v3(){vfunc_called(this, "_ZN7S2366C12v3Ev");}
void  S2366C1 ::v4(){vfunc_called(this, "_ZN7S2366C12v4Ev");}
S2366C1 ::~S2366C1(){ note_dtor("S2366C1", this);} // tgen
S2366C1 ::S2366C1(){ note_ctor("S2366C1", this);} // tgen

static void Test_S2366C1()
{
  extern Class_Descriptor cd_S2366C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(100,141)];
    init_test(&cd_S2366C1, buf);
    S2366C1 *dp, &lv = *(dp=new (buf) S2366C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(792,560), "sizeof(S2366C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2366C1)");
    check_base_class_offset(lv, (S2366C4_nt*)(S2366C3_nt*)(S2366C2*), 0, "S2366C1");
    check_base_class_offset(lv, (S2366C3_nt*)(S2366C2*), 0, "S2366C1");
    check_base_class_offset(lv, (S2366C2*), 0, "S2366C1");
    check_field_offset(lv, s2366c1f0, ABISELECT(728,520), "S2366C1.s2366c1f0");
    check_field_offset(lv, s2366c1f1, ABISELECT(768,548), "S2366C1.s2366c1f1");
    check_field_offset(lv, s2366c1f2, ABISELECT(776,552), "S2366C1.s2366c1f2");
    check_field_offset(lv, s2366c1f3, ABISELECT(784,556), "S2366C1.s2366c1f3");
    test_class_info(&lv, &cd_S2366C1);
    dp->~S2366C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2366C1(Test_S2366C1, "S2366C1", ABISELECT(792,560));

#else // __cplusplus

extern void _ZN7S2366C1C1Ev();
extern void _ZN7S2366C1D1Ev();
Name_Map name_map_S2366C1[] = {
  NSPAIR(_ZN7S2366C1C1Ev),
  NSPAIR(_ZN7S2366C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2366C4_nt;
extern VTBL_ENTRY _ZTI10S2366C4_nt[];
extern  VTBL_ENTRY _ZTV10S2366C4_nt[];
extern Class_Descriptor cd_S2366C3_nt;
extern VTBL_ENTRY _ZTI10S2366C3_nt[];
extern  VTBL_ENTRY _ZTV10S2366C3_nt[];
extern Class_Descriptor cd_S2366C2;
extern VTBL_ENTRY _ZTI7S2366C2[];
extern  VTBL_ENTRY _ZTV7S2366C2[];
static Base_Class bases_S2366C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2366C4_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_S2366C3_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_S2366C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2366C1[];
extern void _ZN7S2366C1D1Ev();
extern void _ZN7S2366C1D0Ev();
extern void _ZN10S2366C4_nt2v5Ev();
extern void _ZN10S2366C4_nt2v6Ev();
extern void _ZN10S2366C4_nt2v7Ev();
extern void _ZN10S2366C3_nt2v8Ev();
extern void _ZN10S2366C3_nt2v9Ev();
extern void _ZN7S2366C23v10Ev();
extern void _ZN7S2366C23v11Ev();
extern void _ZN7S2366C23v12Ev();
extern void _ZN7S2366C23v13Ev();
extern void _ZN7S2366C23v14Ev();
extern void _ZN7S2366C23v15Ev();
extern void _ZN7S2366C12v1Ev();
extern void _ZN7S2366C12v2Ev();
extern void _ZN7S2366C12v3Ev();
extern void _ZN7S2366C12v4Ev();
static  VTBL_ENTRY vtc_S2366C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2366C1[0]),
  (VTBL_ENTRY)&_ZN7S2366C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2366C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2366C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2366C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2366C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v14Ev,
  (VTBL_ENTRY)&_ZN7S2366C23v15Ev,
  (VTBL_ENTRY)&_ZN7S2366C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2366C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2366C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2366C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2366C1[];
extern  VTBL_ENTRY _ZTV7S2366C1[];
Class_Descriptor cd_S2366C1 = {  "S2366C1", // class name
  bases_S2366C1, 3,
  &(vtc_S2366C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(792,560), // object size
  NSPAIRA(_ZTI7S2366C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2366C1),19, //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  S863C5  {
  ::S2366C5_nt s863c5f0;
  int s863c5f1[2];
  char s863c5f2;
  virtual  ~S863C5(); // _ZN6S863C5D1Ev
  virtual void  v2(); // _ZN6S863C52v2Ev
  virtual void  v3(); // _ZN6S863C52v3Ev
  virtual void  v4(); // _ZN6S863C52v4Ev
  S863C5(); // tgen
};
//SIG(-1 S863C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S863C5 ::~S863C5(){ note_dtor("S863C5", this);}
void  S863C5 ::v2(){vfunc_called(this, "_ZN6S863C52v2Ev");}
void  S863C5 ::v3(){vfunc_called(this, "_ZN6S863C52v3Ev");}
void  S863C5 ::v4(){vfunc_called(this, "_ZN6S863C52v4Ev");}
S863C5 ::S863C5(){ note_ctor("S863C5", this);} // tgen

static void Test_S863C5()
{
  extern Class_Descriptor cd_S863C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S863C5, buf);
    S863C5 *dp, &lv = *(dp=new (buf) S863C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S863C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S863C5)");
    check_field_offset(lv, s863c5f0, ABISELECT(8,4), "S863C5.s863c5f0");
    check_field_offset(lv, s863c5f1, ABISELECT(24,16), "S863C5.s863c5f1");
    check_field_offset(lv, s863c5f2, ABISELECT(32,24), "S863C5.s863c5f2");
    test_class_info(&lv, &cd_S863C5);
    dp->~S863C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS863C5(Test_S863C5, "S863C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S863C5C1Ev();
extern void _ZN6S863C5D1Ev();
Name_Map name_map_S863C5[] = {
  NSPAIR(_ZN6S863C5C1Ev),
  NSPAIR(_ZN6S863C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S863C5[];
extern void _ZN6S863C5D1Ev();
extern void _ZN6S863C5D0Ev();
extern void _ZN6S863C52v2Ev();
extern void _ZN6S863C52v3Ev();
extern void _ZN6S863C52v4Ev();
static  VTBL_ENTRY vtc_S863C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S863C5[0]),
  (VTBL_ENTRY)&_ZN6S863C5D1Ev,
  (VTBL_ENTRY)&_ZN6S863C5D0Ev,
  (VTBL_ENTRY)&_ZN6S863C52v2Ev,
  (VTBL_ENTRY)&_ZN6S863C52v3Ev,
  (VTBL_ENTRY)&_ZN6S863C52v4Ev,
};
extern VTBL_ENTRY _ZTI6S863C5[];
extern  VTBL_ENTRY _ZTV6S863C5[];
Class_Descriptor cd_S863C5 = {  "S863C5", // class name
  0,0,//no base classes
  &(vtc_S863C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S863C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S863C5),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  S863C4  : S863C5 {
  void *s863c4f0;
  virtual void  v5(); // _ZN6S863C42v5Ev
  virtual void  v6(); // _ZN6S863C42v6Ev
  ~S863C4(); // tgen
  S863C4(); // tgen
};
//SIG(-1 S863C4) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S863C4 ::v5(){vfunc_called(this, "_ZN6S863C42v5Ev");}
void  S863C4 ::v6(){vfunc_called(this, "_ZN6S863C42v6Ev");}
S863C4 ::~S863C4(){ note_dtor("S863C4", this);} // tgen
S863C4 ::S863C4(){ note_ctor("S863C4", this);} // tgen

static void Test_S863C4()
{
  extern Class_Descriptor cd_S863C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S863C4, buf);
    S863C4 *dp, &lv = *(dp=new (buf) S863C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S863C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S863C4)");
    check_base_class_offset(lv, (S863C5*), 0, "S863C4");
    check_field_offset(lv, s863c4f0, ABISELECT(40,28), "S863C4.s863c4f0");
    test_class_info(&lv, &cd_S863C4);
    dp->~S863C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS863C4(Test_S863C4, "S863C4", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S863C4C1Ev();
extern void _ZN6S863C4D1Ev();
Name_Map name_map_S863C4[] = {
  NSPAIR(_ZN6S863C4C1Ev),
  NSPAIR(_ZN6S863C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S863C5;
extern VTBL_ENTRY _ZTI6S863C5[];
extern  VTBL_ENTRY _ZTV6S863C5[];
static Base_Class bases_S863C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S863C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI6S863C4[];
extern void _ZN6S863C4D1Ev();
extern void _ZN6S863C4D0Ev();
extern void _ZN6S863C52v2Ev();
extern void _ZN6S863C52v3Ev();
extern void _ZN6S863C52v4Ev();
extern void _ZN6S863C42v5Ev();
extern void _ZN6S863C42v6Ev();
static  VTBL_ENTRY vtc_S863C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S863C4[0]),
  (VTBL_ENTRY)&_ZN6S863C4D1Ev,
  (VTBL_ENTRY)&_ZN6S863C4D0Ev,
  (VTBL_ENTRY)&_ZN6S863C52v2Ev,
  (VTBL_ENTRY)&_ZN6S863C52v3Ev,
  (VTBL_ENTRY)&_ZN6S863C52v4Ev,
  (VTBL_ENTRY)&_ZN6S863C42v5Ev,
  (VTBL_ENTRY)&_ZN6S863C42v6Ev,
};
extern VTBL_ENTRY _ZTI6S863C4[];
extern  VTBL_ENTRY _ZTV6S863C4[];
Class_Descriptor cd_S863C4 = {  "S863C4", // class name
  bases_S863C4, 1,
  &(vtc_S863C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S863C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S863C4),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  S863C3  : S863C4 {
  int s863c3f0[4];
  void *s863c3f1[4];
  int s863c3f2[2];
  ::S2366C7_nt s863c3f3;
  char s863c3f4[2];
  ::S2366C9_nt s863c3f5;
  void *s863c3f6;
  ::S2366C11_nt s863c3f7;
  ::S2366C11_nt s863c3f8;
  ::S2366C15_nt s863c3f9;
  ::S629C14 s863c3f10;
  __tsi64 s863c3f11[3];
  int s863c3f12;
  __tsi64 s863c3f13;
  ::S2366C5_nt s863c3f14;
  __tsi64 s863c3f15;
  virtual void  v7(); // _ZN6S863C32v7Ev
  virtual void  v8(); // _ZN6S863C32v8Ev
  virtual void  v9(); // _ZN6S863C32v9Ev
  virtual void  v10(); // _ZN6S863C33v10Ev
  virtual void  v11(); // _ZN6S863C33v11Ev
  virtual void  v12(); // _ZN6S863C33v12Ev
  ~S863C3(); // tgen
  S863C3(); // tgen
};
//SIG(-1 S863C3) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} v1 v2 v3 v4 v5 v6 Fi[4] Fp[4] Fi[2] FC6{ m FC7{ Fl[4]}} Fc[2] FC8{ m FC4 FC9{ m Fp} Fi[2] FC4 FC9 Fi[2]} Fp FC10{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC11{ m FC12{ m Fi[2]} FC13{ m Fi[2]}} FC13 Fc Fi[3] Fc Fi[6] Fc} FC10 FC14{ m Fi[2] FL Fi} FC5 FL[3] Fi FL FC4 FL}


void  S863C3 ::v7(){vfunc_called(this, "_ZN6S863C32v7Ev");}
void  S863C3 ::v8(){vfunc_called(this, "_ZN6S863C32v8Ev");}
void  S863C3 ::v9(){vfunc_called(this, "_ZN6S863C32v9Ev");}
void  S863C3 ::v10(){vfunc_called(this, "_ZN6S863C33v10Ev");}
void  S863C3 ::v11(){vfunc_called(this, "_ZN6S863C33v11Ev");}
void  S863C3 ::v12(){vfunc_called(this, "_ZN6S863C33v12Ev");}
S863C3 ::~S863C3(){ note_dtor("S863C3", this);} // tgen
S863C3 ::S863C3(){ note_ctor("S863C3", this);} // tgen

static void Test_S863C3()
{
  extern Class_Descriptor cd_S863C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(92,131)];
    init_test(&cd_S863C3, buf);
    S863C3 *dp, &lv = *(dp=new (buf) S863C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(728,520), "sizeof(S863C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S863C3)");
    check_base_class_offset(lv, (S863C5*)(S863C4*), 0, "S863C3");
    check_base_class_offset(lv, (S863C4*), 0, "S863C3");
    check_field_offset(lv, s863c3f0, ABISELECT(48,32), "S863C3.s863c3f0");
    check_field_offset(lv, s863c3f1, ABISELECT(64,48), "S863C3.s863c3f1");
    check_field_offset(lv, s863c3f2, ABISELECT(96,64), "S863C3.s863c3f2");
    check_field_offset(lv, s863c3f3, ABISELECT(104,72), "S863C3.s863c3f3");
    check_field_offset(lv, s863c3f4, ABISELECT(136,88), "S863C3.s863c3f4");
    check_field_offset(lv, s863c3f5, ABISELECT(144,92), "S863C3.s863c3f5");
    check_field_offset(lv, s863c3f6, ABISELECT(208,140), "S863C3.s863c3f6");
    check_field_offset(lv, s863c3f7, ABISELECT(216,144), "S863C3.s863c3f7");
    check_field_offset(lv, s863c3f8, ABISELECT(424,292), "S863C3.s863c3f8");
    check_field_offset(lv, s863c3f9, ABISELECT(632,440), "S863C3.s863c3f9");
    check_field_offset(lv, s863c3f10, ABISELECT(656,460), "S863C3.s863c3f10");
    check_field_offset(lv, s863c3f11, ABISELECT(664,464), "S863C3.s863c3f11");
    check_field_offset(lv, s863c3f12, ABISELECT(688,488), "S863C3.s863c3f12");
    check_field_offset(lv, s863c3f13, ABISELECT(696,492), "S863C3.s863c3f13");
    check_field_offset(lv, s863c3f14, ABISELECT(704,500), "S863C3.s863c3f14");
    check_field_offset(lv, s863c3f15, ABISELECT(720,512), "S863C3.s863c3f15");
    test_class_info(&lv, &cd_S863C3);
    dp->~S863C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS863C3(Test_S863C3, "S863C3", ABISELECT(728,520));

#else // __cplusplus

extern void _ZN6S863C3C1Ev();
extern void _ZN6S863C3D1Ev();
Name_Map name_map_S863C3[] = {
  NSPAIR(_ZN6S863C3C1Ev),
  NSPAIR(_ZN6S863C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S863C5;
extern VTBL_ENTRY _ZTI6S863C5[];
extern  VTBL_ENTRY _ZTV6S863C5[];
extern Class_Descriptor cd_S863C4;
extern VTBL_ENTRY _ZTI6S863C4[];
extern  VTBL_ENTRY _ZTV6S863C4[];
static Base_Class bases_S863C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S863C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S863C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S863C3[];
extern void _ZN6S863C3D1Ev();
extern void _ZN6S863C3D0Ev();
extern void _ZN6S863C52v2Ev();
extern void _ZN6S863C52v3Ev();
extern void _ZN6S863C52v4Ev();
extern void _ZN6S863C42v5Ev();
extern void _ZN6S863C42v6Ev();
extern void _ZN6S863C32v7Ev();
extern void _ZN6S863C32v8Ev();
extern void _ZN6S863C32v9Ev();
extern void _ZN6S863C33v10Ev();
extern void _ZN6S863C33v11Ev();
extern void _ZN6S863C33v12Ev();
static  VTBL_ENTRY vtc_S863C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S863C3[0]),
  (VTBL_ENTRY)&_ZN6S863C3D1Ev,
  (VTBL_ENTRY)&_ZN6S863C3D0Ev,
  (VTBL_ENTRY)&_ZN6S863C52v2Ev,
  (VTBL_ENTRY)&_ZN6S863C52v3Ev,
  (VTBL_ENTRY)&_ZN6S863C52v4Ev,
  (VTBL_ENTRY)&_ZN6S863C42v5Ev,
  (VTBL_ENTRY)&_ZN6S863C42v6Ev,
  (VTBL_ENTRY)&_ZN6S863C32v7Ev,
  (VTBL_ENTRY)&_ZN6S863C32v8Ev,
  (VTBL_ENTRY)&_ZN6S863C32v9Ev,
  (VTBL_ENTRY)&_ZN6S863C33v10Ev,
  (VTBL_ENTRY)&_ZN6S863C33v11Ev,
  (VTBL_ENTRY)&_ZN6S863C33v12Ev,
};
extern VTBL_ENTRY _ZTI6S863C3[];
extern  VTBL_ENTRY _ZTV6S863C3[];
Class_Descriptor cd_S863C3 = {  "S863C3", // class name
  bases_S863C3, 2,
  &(vtc_S863C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(728,520), // object size
  NSPAIRA(_ZTI6S863C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S863C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S863C2  : S863C3 {
  ::S2366C19 s863c2f0;
  void *s863c2f1;
  int s863c2f2;
  virtual void  v13(); // _ZN6S863C23v13Ev
  virtual void  v14(); // _ZN6S863C23v14Ev
  virtual void  v15(); // _ZN6S863C23v15Ev
  virtual void  v16(); // _ZN6S863C23v16Ev
  virtual void  v17(); // _ZN6S863C23v17Ev
  virtual void  v18(); // _ZN6S863C23v18Ev
  ~S863C2(); // tgen
  S863C2(); // tgen
};
//SIG(-1 S863C2) C1{ BC2{ BC3{ BC4{ vd v7 v8 v9 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v10 v11 Fp} v12 v13 v14 v15 v16 v17 Fi[4] Fp[4] Fi[2] FC7{ m FC8{ Fl[4]}} Fc[2] FC9{ m FC5 FC10{ m Fp} Fi[2] FC5 FC10 Fi[2]} Fp FC11{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC12{ m FC13{ m Fi[2]} FC14{ m Fi[2]}} FC14 Fc Fi[3] Fc Fi[6] Fc} FC11 FC15{ m Fi[2] FL Fi} FC6 FL[3] Fi FL FC5 FL} v1 v2 v3 v4 v5 v6 FC16{ m Fp} Fp Fi}


void  S863C2 ::v13(){vfunc_called(this, "_ZN6S863C23v13Ev");}
void  S863C2 ::v14(){vfunc_called(this, "_ZN6S863C23v14Ev");}
void  S863C2 ::v15(){vfunc_called(this, "_ZN6S863C23v15Ev");}
void  S863C2 ::v16(){vfunc_called(this, "_ZN6S863C23v16Ev");}
void  S863C2 ::v17(){vfunc_called(this, "_ZN6S863C23v17Ev");}
void  S863C2 ::v18(){vfunc_called(this, "_ZN6S863C23v18Ev");}
S863C2 ::~S863C2(){ note_dtor("S863C2", this);} // tgen
S863C2 ::S863C2(){ note_ctor("S863C2", this);} // tgen

static void Test_S863C2()
{
  extern Class_Descriptor cd_S863C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(95,134)];
    init_test(&cd_S863C2, buf);
    S863C2 *dp, &lv = *(dp=new (buf) S863C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(752,532), "sizeof(S863C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S863C2)");
    check_base_class_offset(lv, (S863C5*)(S863C4*)(S863C3*), 0, "S863C2");
    check_base_class_offset(lv, (S863C4*)(S863C3*), 0, "S863C2");
    check_base_class_offset(lv, (S863C3*), 0, "S863C2");
    check_field_offset(lv, s863c2f0, ABISELECT(728,520), "S863C2.s863c2f0");
    check_field_offset(lv, s863c2f1, ABISELECT(736,524), "S863C2.s863c2f1");
    check_field_offset(lv, s863c2f2, ABISELECT(744,528), "S863C2.s863c2f2");
    test_class_info(&lv, &cd_S863C2);
    dp->~S863C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS863C2(Test_S863C2, "S863C2", ABISELECT(752,532));

#else // __cplusplus

extern void _ZN6S863C2C1Ev();
extern void _ZN6S863C2D1Ev();
Name_Map name_map_S863C2[] = {
  NSPAIR(_ZN6S863C2C1Ev),
  NSPAIR(_ZN6S863C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S863C5;
extern VTBL_ENTRY _ZTI6S863C5[];
extern  VTBL_ENTRY _ZTV6S863C5[];
extern Class_Descriptor cd_S863C4;
extern VTBL_ENTRY _ZTI6S863C4[];
extern  VTBL_ENTRY _ZTV6S863C4[];
extern Class_Descriptor cd_S863C3;
extern VTBL_ENTRY _ZTI6S863C3[];
extern  VTBL_ENTRY _ZTV6S863C3[];
static Base_Class bases_S863C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S863C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S863C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S863C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S863C2[];
extern void _ZN6S863C2D1Ev();
extern void _ZN6S863C2D0Ev();
extern void _ZN6S863C52v2Ev();
extern void _ZN6S863C52v3Ev();
extern void _ZN6S863C52v4Ev();
extern void _ZN6S863C42v5Ev();
extern void _ZN6S863C42v6Ev();
extern void _ZN6S863C32v7Ev();
extern void _ZN6S863C32v8Ev();
extern void _ZN6S863C32v9Ev();
extern void _ZN6S863C33v10Ev();
extern void _ZN6S863C33v11Ev();
extern void _ZN6S863C33v12Ev();
extern void _ZN6S863C23v13Ev();
extern void _ZN6S863C23v14Ev();
extern void _ZN6S863C23v15Ev();
extern void _ZN6S863C23v16Ev();
extern void _ZN6S863C23v17Ev();
extern void _ZN6S863C23v18Ev();
static  VTBL_ENTRY vtc_S863C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S863C2[0]),
  (VTBL_ENTRY)&_ZN6S863C2D1Ev,
  (VTBL_ENTRY)&_ZN6S863C2D0Ev,
  (VTBL_ENTRY)&_ZN6S863C52v2Ev,
  (VTBL_ENTRY)&_ZN6S863C52v3Ev,
  (VTBL_ENTRY)&_ZN6S863C52v4Ev,
  (VTBL_ENTRY)&_ZN6S863C42v5Ev,
  (VTBL_ENTRY)&_ZN6S863C42v6Ev,
  (VTBL_ENTRY)&_ZN6S863C32v7Ev,
  (VTBL_ENTRY)&_ZN6S863C32v8Ev,
  (VTBL_ENTRY)&_ZN6S863C32v9Ev,
  (VTBL_ENTRY)&_ZN6S863C33v10Ev,
  (VTBL_ENTRY)&_ZN6S863C33v11Ev,
  (VTBL_ENTRY)&_ZN6S863C33v12Ev,
  (VTBL_ENTRY)&_ZN6S863C23v13Ev,
  (VTBL_ENTRY)&_ZN6S863C23v14Ev,
  (VTBL_ENTRY)&_ZN6S863C23v15Ev,
  (VTBL_ENTRY)&_ZN6S863C23v16Ev,
  (VTBL_ENTRY)&_ZN6S863C23v17Ev,
  (VTBL_ENTRY)&_ZN6S863C23v18Ev,
};
extern VTBL_ENTRY _ZTI6S863C2[];
extern  VTBL_ENTRY _ZTV6S863C2[];
Class_Descriptor cd_S863C2 = {  "S863C2", // class name
  bases_S863C2, 3,
  &(vtc_S863C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(752,532), // object size
  NSPAIRA(_ZTI6S863C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S863C2),21, //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  S863C1  : S863C2 {
  __tsi64 s863c1f0;
  virtual void  v1(); // _ZN6S863C12v1Ev
  ~S863C1(); // tgen
  S863C1(); // tgen
};
//SIG(1 S863C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v2 v3 v4 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v5 v6 Fp} v7 v8 v9 v10 v11 v12 Fi[4] Fp[4] Fi[2] FC8{ m FC9{ Fl[4]}} Fc[2] FC10{ m FC6 FC11{ m Fp} Fi[2] FC6 FC11 Fi[2]} Fp FC12{ m Fp[2] Fi[2] Fp FL Fp[9] Fs Fp[2] FC13{ m FC14{ m Fi[2]} FC15{ m Fi[2]}} FC15 Fc Fi[3] Fc Fi[6] Fc} FC12 FC16{ m Fi[2] FL Fi} FC7 FL[3] Fi FL FC6 FL} v13 v14 v15 v16 v17 v18 FC17{ m Fp} Fp Fi} v1 FL}


void  S863C1 ::v1(){vfunc_called(this, "_ZN6S863C12v1Ev");}
S863C1 ::~S863C1(){ note_dtor("S863C1", this);} // tgen
S863C1 ::S863C1(){ note_ctor("S863C1", this);} // tgen

static void Test_S863C1()
{
  extern Class_Descriptor cd_S863C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(96,136)];
    init_test(&cd_S863C1, buf);
    S863C1 *dp, &lv = *(dp=new (buf) S863C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(760,540), "sizeof(S863C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S863C1)");
    check_base_class_offset(lv, (S863C5*)(S863C4*)(S863C3*)(S863C2*), 0, "S863C1");
    check_base_class_offset(lv, (S863C4*)(S863C3*)(S863C2*), 0, "S863C1");
    check_base_class_offset(lv, (S863C3*)(S863C2*), 0, "S863C1");
    check_base_class_offset(lv, (S863C2*), 0, "S863C1");
    check_field_offset(lv, s863c1f0, ABISELECT(752,532), "S863C1.s863c1f0");
    test_class_info(&lv, &cd_S863C1);
    dp->~S863C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS863C1(Test_S863C1, "S863C1", ABISELECT(760,540));

#else // __cplusplus

extern void _ZN6S863C1C1Ev();
extern void _ZN6S863C1D1Ev();
Name_Map name_map_S863C1[] = {
  NSPAIR(_ZN6S863C1C1Ev),
  NSPAIR(_ZN6S863C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S863C5;
extern VTBL_ENTRY _ZTI6S863C5[];
extern  VTBL_ENTRY _ZTV6S863C5[];
extern Class_Descriptor cd_S863C4;
extern VTBL_ENTRY _ZTI6S863C4[];
extern  VTBL_ENTRY _ZTV6S863C4[];
extern Class_Descriptor cd_S863C3;
extern VTBL_ENTRY _ZTI6S863C3[];
extern  VTBL_ENTRY _ZTV6S863C3[];
extern Class_Descriptor cd_S863C2;
extern VTBL_ENTRY _ZTI6S863C2[];
extern  VTBL_ENTRY _ZTV6S863C2[];
static Base_Class bases_S863C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S863C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S863C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S863C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S863C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S863C1[];
extern void _ZN6S863C1D1Ev();
extern void _ZN6S863C1D0Ev();
extern void _ZN6S863C52v2Ev();
extern void _ZN6S863C52v3Ev();
extern void _ZN6S863C52v4Ev();
extern void _ZN6S863C42v5Ev();
extern void _ZN6S863C42v6Ev();
extern void _ZN6S863C32v7Ev();
extern void _ZN6S863C32v8Ev();
extern void _ZN6S863C32v9Ev();
extern void _ZN6S863C33v10Ev();
extern void _ZN6S863C33v11Ev();
extern void _ZN6S863C33v12Ev();
extern void _ZN6S863C23v13Ev();
extern void _ZN6S863C23v14Ev();
extern void _ZN6S863C23v15Ev();
extern void _ZN6S863C23v16Ev();
extern void _ZN6S863C23v17Ev();
extern void _ZN6S863C23v18Ev();
extern void _ZN6S863C12v1Ev();
static  VTBL_ENTRY vtc_S863C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S863C1[0]),
  (VTBL_ENTRY)&_ZN6S863C1D1Ev,
  (VTBL_ENTRY)&_ZN6S863C1D0Ev,
  (VTBL_ENTRY)&_ZN6S863C52v2Ev,
  (VTBL_ENTRY)&_ZN6S863C52v3Ev,
  (VTBL_ENTRY)&_ZN6S863C52v4Ev,
  (VTBL_ENTRY)&_ZN6S863C42v5Ev,
  (VTBL_ENTRY)&_ZN6S863C42v6Ev,
  (VTBL_ENTRY)&_ZN6S863C32v7Ev,
  (VTBL_ENTRY)&_ZN6S863C32v8Ev,
  (VTBL_ENTRY)&_ZN6S863C32v9Ev,
  (VTBL_ENTRY)&_ZN6S863C33v10Ev,
  (VTBL_ENTRY)&_ZN6S863C33v11Ev,
  (VTBL_ENTRY)&_ZN6S863C33v12Ev,
  (VTBL_ENTRY)&_ZN6S863C23v13Ev,
  (VTBL_ENTRY)&_ZN6S863C23v14Ev,
  (VTBL_ENTRY)&_ZN6S863C23v15Ev,
  (VTBL_ENTRY)&_ZN6S863C23v16Ev,
  (VTBL_ENTRY)&_ZN6S863C23v17Ev,
  (VTBL_ENTRY)&_ZN6S863C23v18Ev,
  (VTBL_ENTRY)&_ZN6S863C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S863C1[];
extern  VTBL_ENTRY _ZTV6S863C1[];
Class_Descriptor cd_S863C1 = {  "S863C1", // class name
  bases_S863C1, 4,
  &(vtc_S863C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(760,540), // object size
  NSPAIRA(_ZTI6S863C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S863C1),22, //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  S3552C4  : virtual S20677C3 {
  long double s3552c4f0;
  int s3552c4f1;
  ::S20677C3 s3552c4f2;
  ::S20677C3 s3552c4f3;
  ~S3552C4(); // tgen
  S3552C4(); // tgen
};
//SIG(-1 S3552C4) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S3552C4 ::~S3552C4(){ note_dtor("S3552C4", this);} // tgen
S3552C4 ::S3552C4(){ note_ctor("S3552C4", this);} // tgen

static void Test_S3552C4()
{
  extern Class_Descriptor cd_S3552C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S3552C4, buf);
    S3552C4 *dp, &lv = *(dp=new (buf) S3552C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S3552C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3552C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S3552C4");
    check_field_offset(lv, s3552c4f0, ABISELECT(16,4), "S3552C4.s3552c4f0");
    check_field_offset(lv, s3552c4f1, ABISELECT(32,16), "S3552C4.s3552c4f1");
    check_field_offset(lv, s3552c4f2, ABISELECT(40,20), "S3552C4.s3552c4f2");
    check_field_offset(lv, s3552c4f3, ABISELECT(88,60), "S3552C4.s3552c4f3");
    test_class_info(&lv, &cd_S3552C4);
    dp->~S3552C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3552C4(Test_S3552C4, "S3552C4", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN7S3552C4C1Ev();
extern void _ZN7S3552C4D1Ev();
Name_Map name_map_S3552C4[] = {
  NSPAIR(_ZN7S3552C4C1Ev),
  NSPAIR(_ZN7S3552C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S3552C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S3552C4[];
static  VTBL_ENTRY vtc_S3552C4[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
extern VTBL_ENTRY _ZTV7S3552C4[];
static  VTT_ENTRY vtt_S3552C4[] = {
  {&(_ZTV7S3552C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
Class_Descriptor cd_S3552C4 = {  "S3552C4", // class name
  bases_S3552C4, 1,
  &(vtc_S3552C4[0]), // expected_vtbl_contents
  &(vtt_S3552C4[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI7S3552C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3552C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3552C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3552C7  : virtual S20677C3 , S3552C4 {
  short s3552c7f0;
  __tsi64 s3552c7f1;
  char s3552c7f2;
  int s3552c7f3[2];
  ::S3552C4 s3552c7f4;
  void *s3552c7f5;
  __tsi64 s3552c7f6;
  int s3552c7f7;
  __tsi64 s3552c7f8;
  int s3552c7f9;
  virtual void  v1(); // _ZN7S3552C72v1Ev
  virtual void  v2(); // _ZN7S3552C72v2Ev
  virtual void  v3(); // _ZN7S3552C72v3Ev
  ~S3552C7(); // tgen
  S3552C7(); // tgen
};
//SIG(-1 S3552C7) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S3552C7 ::v1(){vfunc_called(this, "_ZN7S3552C72v1Ev");}
void  S3552C7 ::v2(){vfunc_called(this, "_ZN7S3552C72v2Ev");}
void  S3552C7 ::v3(){vfunc_called(this, "_ZN7S3552C72v3Ev");}
S3552C7 ::~S3552C7(){ note_dtor("S3552C7", this);} // tgen
S3552C7 ::S3552C7(){ note_ctor("S3552C7", this);} // tgen

static void Test_S3552C7()
{
  extern Class_Descriptor cd_S3552C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S3552C7, buf);
    S3552C7 *dp, &lv = *(dp=new (buf) S3552C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S3552C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3552C7)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S3552C7");
    check_base_class_offset(lv, (S20677C3*)(S3552C4*), ABISELECT(408,292), "S3552C7");
    check_base_class_offset(lv, (S3552C4*), 0, "S3552C7");
    check_field_offset(lv, s3552c7f0, ABISELECT(136,100), "S3552C7.s3552c7f0");
    check_field_offset(lv, s3552c7f1, ABISELECT(144,104), "S3552C7.s3552c7f1");
    check_field_offset(lv, s3552c7f2, ABISELECT(152,112), "S3552C7.s3552c7f2");
    check_field_offset(lv, s3552c7f3, ABISELECT(156,116), "S3552C7.s3552c7f3");
    check_field_offset(lv, s3552c7f4, ABISELECT(176,124), "S3552C7.s3552c7f4");
    check_field_offset(lv, s3552c7f5, ABISELECT(368,264), "S3552C7.s3552c7f5");
    check_field_offset(lv, s3552c7f6, ABISELECT(376,268), "S3552C7.s3552c7f6");
    check_field_offset(lv, s3552c7f7, ABISELECT(384,276), "S3552C7.s3552c7f7");
    check_field_offset(lv, s3552c7f8, ABISELECT(392,280), "S3552C7.s3552c7f8");
    check_field_offset(lv, s3552c7f9, ABISELECT(400,288), "S3552C7.s3552c7f9");
    test_class_info(&lv, &cd_S3552C7);
    dp->~S3552C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3552C7(Test_S3552C7, "S3552C7", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN7S3552C7C1Ev();
extern void _ZN7S3552C7D1Ev();
Name_Map name_map_S3552C7[] = {
  NSPAIR(_ZN7S3552C7C1Ev),
  NSPAIR(_ZN7S3552C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
static Base_Class bases_S3552C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3552C4,    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 _ZTI7S3552C7[];
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY vtc_S3552C7[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C7[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern VTBL_ENTRY _ZTV7S3552C7[];
static  VTBL_ENTRY _tg__ZTV7S3552C4__7S3552C7[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
static  VTT_ENTRY vtt_S3552C7[] = {
  {&(_ZTV7S3552C7[3]),  3,6},
  {&(_tg__ZTV7S3552C4__7S3552C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3552C7[];
extern  VTBL_ENTRY _ZTV7S3552C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C7[];
Class_Descriptor cd_S3552C7 = {  "S3552C7", // class name
  bases_S3552C7, 2,
  &(vtc_S3552C7[0]), // expected_vtbl_contents
  &(vtt_S3552C7[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI7S3552C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3552C7),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3552C7),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  S3552C8  : virtual S20677C3 , virtual S3552C7 {
  __tsi64 s3552c8f0;
  ::S20677C6_nt s3552c8f1;
  void *s3552c8f2;
  char s3552c8f3[2];
  ::S20677C3 s3552c8f4;
  long s3552c8f5;
  ::S20677C6_nt s3552c8f6;
  virtual void  v4(); // _ZN7S3552C82v4Ev
  virtual void  v5(); // _ZN7S3552C82v5Ev
  virtual void  v6(); // _ZN7S3552C82v6Ev
  ~S3552C8(); // tgen
  S3552C8(); // tgen
};
//SIG(-1 S3552C8) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S3552C8 ::v4(){vfunc_called(this, "_ZN7S3552C82v4Ev");}
void  S3552C8 ::v5(){vfunc_called(this, "_ZN7S3552C82v5Ev");}
void  S3552C8 ::v6(){vfunc_called(this, "_ZN7S3552C82v6Ev");}
S3552C8 ::~S3552C8(){ note_dtor("S3552C8", this);} // tgen
S3552C8 ::S3552C8(){ note_ctor("S3552C8", this);} // tgen

static void Test_S3552C8()
{
  extern Class_Descriptor cd_S3552C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S3552C8, buf);
    S3552C8 *dp, &lv = *(dp=new (buf) S3552C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S3552C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3552C8)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S3552C8");
    check_base_class_offset(lv, (S20677C3*)(S3552C7*), ABISELECT(104,72), "S3552C8");
    check_base_class_offset(lv, (S20677C3*)(S3552C4*)(S3552C7*), ABISELECT(104,72), "S3552C8");
    check_base_class_offset(lv, (S3552C4*)(S3552C7*), ABISELECT(160,112), "S3552C8");
    check_base_class_offset(lv, (S3552C7*), ABISELECT(160,112), "S3552C8");
    check_field_offset(lv, s3552c8f0, ABISELECT(8,4), "S3552C8.s3552c8f0");
    check_field_offset(lv, s3552c8f1, ABISELECT(16,12), "S3552C8.s3552c8f1");
    check_field_offset(lv, s3552c8f2, ABISELECT(24,16), "S3552C8.s3552c8f2");
    check_field_offset(lv, s3552c8f3, ABISELECT(32,20), "S3552C8.s3552c8f3");
    check_field_offset(lv, s3552c8f4, ABISELECT(40,24), "S3552C8.s3552c8f4");
    check_field_offset(lv, s3552c8f5, ABISELECT(88,64), "S3552C8.s3552c8f5");
    check_field_offset(lv, s3552c8f6, ABISELECT(96,68), "S3552C8.s3552c8f6");
    test_class_info(&lv, &cd_S3552C8);
    dp->~S3552C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3552C8(Test_S3552C8, "S3552C8", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN7S3552C8C1Ev();
extern void _ZN7S3552C8D1Ev();
Name_Map name_map_S3552C8[] = {
  NSPAIR(_ZN7S3552C8C1Ev),
  NSPAIR(_ZN7S3552C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C7;
extern VTBL_ENTRY _ZTI7S3552C7[];
extern  VTBL_ENTRY _ZTV7S3552C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C7[];
static Base_Class bases_S3552C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3552C4,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3552C7,    ABISELECT(160,112), //bcp->offset
    7, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3552C8[];
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY vtc_S3552C8[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern VTBL_ENTRY _ZTV7S3552C8[];
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C8[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C7[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C47S3552C7__7S3552C8[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
static  VTT_ENTRY vtt_S3552C8[] = {
  {&(_ZTV7S3552C8[4]),  4,16},
  {&(_ZTV7S3552C8[13]),  13,16},
  {&(_tg__ZTV7S3552C7__7S3552C8[3]),  3,6},
  {&(_tg__ZTV7S3552C47S3552C7__7S3552C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3552C8[];
extern  VTBL_ENTRY _ZTV7S3552C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C8[];
Class_Descriptor cd_S3552C8 = {  "S3552C8", // class name
  bases_S3552C8, 3,
  &(vtc_S3552C8[0]), // expected_vtbl_contents
  &(vtt_S3552C8[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI7S3552C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3552C8),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3552C8),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  S3552C10  : virtual S20677C3 , virtual S3552C4 {
  int s3552c10f0;
  ::S3552C4 s3552c10f1;
  __tsi64 s3552c10f2;
  int s3552c10f3;
  void *s3552c10f4;
  virtual void  v7(); // _ZN8S3552C102v7Ev
  virtual void  v8(); // _ZN8S3552C102v8Ev
  ~S3552C10(); // tgen
  S3552C10(); // tgen
};
//SIG(-1 S3552C10) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 FD Fi FC2 FC2} v1 v2 Fi FC3 FL Fi Fp}


void  S3552C10 ::v7(){vfunc_called(this, "_ZN8S3552C102v7Ev");}
void  S3552C10 ::v8(){vfunc_called(this, "_ZN8S3552C102v8Ev");}
S3552C10 ::~S3552C10(){ note_dtor("S3552C10", this);} // tgen
S3552C10 ::S3552C10(){ note_ctor("S3552C10", this);} // tgen

static void Test_S3552C10()
{
  extern Class_Descriptor cd_S3552C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,77)];
    init_test(&cd_S3552C10, buf);
    S3552C10 *dp, &lv = *(dp=new (buf) S3552C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,304), "sizeof(S3552C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3552C10)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(232,164), "S3552C10");
    check_base_class_offset(lv, (S20677C3*)(S3552C4*), ABISELECT(232,164), "S3552C10");
    check_base_class_offset(lv, (S3552C4*), ABISELECT(288,204), "S3552C10");
    check_field_offset(lv, s3552c10f0, ABISELECT(8,4), "S3552C10.s3552c10f0");
    check_field_offset(lv, s3552c10f1, ABISELECT(16,8), "S3552C10.s3552c10f1");
    check_field_offset(lv, s3552c10f2, ABISELECT(208,148), "S3552C10.s3552c10f2");
    check_field_offset(lv, s3552c10f3, ABISELECT(216,156), "S3552C10.s3552c10f3");
    check_field_offset(lv, s3552c10f4, ABISELECT(224,160), "S3552C10.s3552c10f4");
    test_class_info(&lv, &cd_S3552C10);
    dp->~S3552C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3552C10(Test_S3552C10, "S3552C10", ABISELECT(432,304));

#else // __cplusplus

extern void _ZN8S3552C10C1Ev();
extern void _ZN8S3552C10D1Ev();
Name_Map name_map_S3552C10[] = {
  NSPAIR(_ZN8S3552C10C1Ev),
  NSPAIR(_ZN8S3552C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
static Base_Class bases_S3552C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(232,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
    -1, //immediately_derived
  1, 1},
  {&cd_S3552C4,    ABISELECT(288,204), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3552C10[];
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY vtc_S3552C10[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
};
extern VTBL_ENTRY _ZTV8S3552C10[];
static  VTBL_ENTRY _tg__ZTV7S3552C4__8S3552C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
static  VTT_ENTRY vtt_S3552C10[] = {
  {&(_ZTV8S3552C10[4]),  4,9},
  {&(_ZTV8S3552C10[9]),  9,9},
  {&(_tg__ZTV7S3552C4__8S3552C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3552C10[];
extern  VTBL_ENTRY _ZTV8S3552C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3552C10[];
Class_Descriptor cd_S3552C10 = {  "S3552C10", // class name
  bases_S3552C10, 2,
  &(vtc_S3552C10[0]), // expected_vtbl_contents
  &(vtt_S3552C10[0]), // expected_vtt_contents
  ABISELECT(432,304), // object size
  NSPAIRA(_ZTI8S3552C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3552C10),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3552C10),3, //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  S3552C6  : virtual S3552C7 , virtual S3552C8 , virtual S3552C10 {
  ::S20677C6_nt s3552c6f0;
  ::S20677C6_nt s3552c6f1;
  int s3552c6f2;
  ::S3552C4 s3552c6f3;
  ::S20677C6_nt s3552c6f4;
  ::S20677C6_nt s3552c6f5;
  ::S21008C9 s3552c6f6;
  ::S3552C8 s3552c6f7;
  void *s3552c6f8;
  ::S20677C6_nt s3552c6f9;
  virtual void  v9(); // _ZN7S3552C62v9Ev
  virtual void  v10(); // _ZN7S3552C63v10Ev
  ~S3552C6(); // tgen
  S3552C6(); // tgen
};
//SIG(-1 S3552C6) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v3 v4 v5 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC2 v6 v7 v8 FL FC6{} Fp Fc[2] FC3 Fl FC6} VBC7{ VBC3 VBC4 v9 v10 Fi FC4 FL Fi Fp} v1 v2 FC6 FC6 Fi FC4 FC6 FC6 FC8{ v11 FC6 FC9{ VBC3 FD Fi FC3 FC3} FC6 FL FC6 Fp FC6 Fp[2] FC6} FC5 Fp FC6}


void  S3552C6 ::v9(){vfunc_called(this, "_ZN7S3552C62v9Ev");}
void  S3552C6 ::v10(){vfunc_called(this, "_ZN7S3552C63v10Ev");}
S3552C6 ::~S3552C6(){ note_dtor("S3552C6", this);} // tgen
S3552C6 ::S3552C6(){ note_ctor("S3552C6", this);} // tgen

static void Test_S3552C6()
{
  extern Class_Descriptor cd_S3552C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(128,356)];
    init_test(&cd_S3552C6, buf);
    S3552C6 *dp, &lv = *(dp=new (buf) S3552C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2032,1420), "sizeof(S3552C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3552C6)");
    check_base_class_offset(lv, (S20677C3*)(S3552C7*), ABISELECT(1496,1044), "S3552C6");
    check_base_class_offset(lv, (S20677C3*)(S3552C4*)(S3552C7*), ABISELECT(1496,1044), "S3552C6");
    check_base_class_offset(lv, (S20677C3*)(S3552C8*), ABISELECT(1496,1044), "S3552C6");
    check_base_class_offset(lv, (S20677C3*)(S3552C10*), ABISELECT(1496,1044), "S3552C6");
    /*is_ambiguous_... S3552C6::S3552C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C4*), ABISELECT(1496,1044), "S3552C6");
    check_base_class_offset(lv, (S3552C4*)(S3552C7*), ABISELECT(1088,752), "S3552C6");
    check_base_class_offset(lv, (S3552C7*), ABISELECT(1088,752), "S3552C6");
    check_base_class_offset(lv, (S3552C7*)(S3552C8*), ABISELECT(1088,752), "S3552C6");
    check_base_class_offset(lv, (S3552C8*), ABISELECT(1544,1084), "S3552C6");
    check_base_class_offset(lv, (S3552C4*)(S3552C10*), ABISELECT(1888,1320), "S3552C6");
    check_base_class_offset(lv, (S3552C10*), ABISELECT(1648,1156), "S3552C6");
    check_field_offset(lv, s3552c6f0, ABISELECT(8,4), "S3552C6.s3552c6f0");
    check_field_offset(lv, s3552c6f1, ABISELECT(9,5), "S3552C6.s3552c6f1");
    check_field_offset(lv, s3552c6f2, ABISELECT(12,8), "S3552C6.s3552c6f2");
    check_field_offset(lv, s3552c6f3, ABISELECT(16,12), "S3552C6.s3552c6f3");
    check_field_offset(lv, s3552c6f4, ABISELECT(208,152), "S3552C6.s3552c6f4");
    check_field_offset(lv, s3552c6f5, ABISELECT(209,153), "S3552C6.s3552c6f5");
    check_field_offset(lv, s3552c6f6, ABISELECT(224,156), "S3552C6.s3552c6f6");
    check_field_offset(lv, s3552c6f7, ABISELECT(496,340), "S3552C6.s3552c6f7");
    check_field_offset(lv, s3552c6f8, ABISELECT(1072,744), "S3552C6.s3552c6f8");
    check_field_offset(lv, s3552c6f9, ABISELECT(1080,748), "S3552C6.s3552c6f9");
    test_class_info(&lv, &cd_S3552C6);
    dp->~S3552C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3552C6(Test_S3552C6, "S3552C6", ABISELECT(2032,1420));

#else // __cplusplus

extern void _ZN7S3552C6C1Ev();
extern void _ZN7S3552C6D1Ev();
Name_Map name_map_S3552C6[] = {
  NSPAIR(_ZN7S3552C6C1Ev),
  NSPAIR(_ZN7S3552C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C7;
extern VTBL_ENTRY _ZTI7S3552C7[];
extern  VTBL_ENTRY _ZTV7S3552C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C7[];
extern Class_Descriptor cd_S3552C8;
extern VTBL_ENTRY _ZTI7S3552C8[];
extern  VTBL_ENTRY _ZTV7S3552C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C8[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C10;
extern VTBL_ENTRY _ZTI8S3552C10[];
extern  VTBL_ENTRY _ZTV8S3552C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3552C10[];
static Base_Class bases_S3552C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1496,1044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3552C4,    ABISELECT(1088,752), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3552C7,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3552C8,    ABISELECT(1544,1084), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3552C4,    ABISELECT(1888,1320), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3552C10,    ABISELECT(1648,1156), //bcp->offset
    28, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S3552C6[];
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY vtc_S3552C6[] = {
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-1544,-1084),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-1648,-1156),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
  ABISELECT(-392,-276),
  ABISELECT(-1888,-1320),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
};
extern VTBL_ENTRY _ZTV7S3552C6[];
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C6[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C7[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C47S3552C7__7S3552C6[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C6[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C8__7S3552C6[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C6[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__8S3552C10__7S3552C6[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__A1__7S3552C6[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
static  VTT_ENTRY vtt_S3552C6[] = {
  {&(_ZTV7S3552C6[7]),  7,39},
  {&(_ZTV7S3552C6[15]),  15,39},
  {&(_ZTV7S3552C6[25]),  25,39},
  {&(_ZTV7S3552C6[34]),  34,39},
  {&(_ZTV7S3552C6[39]),  39,39},
  {&(_tg__ZTV7S3552C7__7S3552C6[3]),  3,6},
  {&(_tg__ZTV7S3552C47S3552C7__7S3552C6[3]),  3,3},
  {&(_tg__ZTV7S3552C8__7S3552C6[4]),  4,7},
  {&(_tg__ZTV7S3552C7__7S3552C8__7S3552C6[6]),  6,9},
  {&(_tg__ZTV8S3552C10__7S3552C6[4]),  4,6},
  {&(_tg__ZTV7S3552C4__8S3552C10__7S3552C6[3]),  3,3},
  {&(_tg__ZTV7S3552C4__A1__7S3552C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3552C6[];
extern  VTBL_ENTRY _ZTV7S3552C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C6[];
Class_Descriptor cd_S3552C6 = {  "S3552C6", // class name
  bases_S3552C6, 6,
  &(vtc_S3552C6[0]), // expected_vtbl_contents
  &(vtt_S3552C6[0]), // expected_vtt_contents
  ABISELECT(2032,1420), // object size
  NSPAIRA(_ZTI7S3552C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3552C6),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3552C6),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3552C3  : virtual S3552C4 , S3552C6 , S3552C10 {
  int s3552c3f0;
  char s3552c3f1:2;
  ::S20677C6_nt s3552c3f2;
  int s3552c3f3;
  ~S3552C3(); // tgen
  S3552C3(); // tgen
};
//SIG(-1 S3552C3) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} BC4{ VBC5{ VBC3 BC2 v1 v2 v3 Fs FL Fc Fi[2] FC2 Fp FL Fi FL Fi} VBC6{ VBC3 VBC5 v4 v5 v6 FL FC7{} Fp Fc[2] FC3 Fl FC7} VBC8{ VBC3 VBC2 v7 v8 Fi FC2 FL Fi Fp} v9 v10 FC7 FC7 Fi FC2 FC7 FC7 FC9{ v11 FC7 FC10{ VBC3 FD Fi FC3 FC3} FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} BC8 Fi Fc:2 FC7 Fi}


S3552C3 ::~S3552C3(){ note_dtor("S3552C3", this);} // tgen
S3552C3 ::S3552C3(){ note_ctor("S3552C3", this);} // tgen

static void Test_S3552C3()
{
  extern Class_Descriptor cd_S3552C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(144,400)];
    init_test(&cd_S3552C3, buf);
    S3552C3 *dp, &lv = *(dp=new (buf) S3552C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2288,1596), "sizeof(S3552C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3552C3)");
    /*is_ambiguous_... S3552C3::S3552C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C4*), ABISELECT(1480,1028), "S3552C3");
    check_base_class_offset(lv, (S20677C3*)(S3552C7*), ABISELECT(1480,1028), "S3552C3");
    check_base_class_offset(lv, (S20677C3*)(S3552C4*)(S3552C7*), ABISELECT(1480,1028), "S3552C3");
    check_base_class_offset(lv, (S20677C3*)(S3552C8*), ABISELECT(1480,1028), "S3552C3");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C10*), ABISELECT(1480,1028), "S3552C3");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C10*), ABISELECT(1480,1028), "S3552C3");
    /*is_ambiguous_... S3552C3::S3552C4 */ AMB_check_base_class_offset(lv, (S3552C4*), ABISELECT(1344,928), "S3552C3");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C4*)(S3552C10*), ABISELECT(1344,928), "S3552C3");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C4*)(S3552C10*), ABISELECT(1344,928), "S3552C3");
    check_base_class_offset(lv, (S3552C4*)(S3552C7*), ABISELECT(1536,1068), "S3552C3");
    check_base_class_offset(lv, (S3552C7*)(S3552C6*), ABISELECT(1536,1068), "S3552C3");
    check_base_class_offset(lv, (S3552C7*)(S3552C8*), ABISELECT(1536,1068), "S3552C3");
    check_base_class_offset(lv, (S3552C8*)(S3552C6*), ABISELECT(1944,1360), "S3552C3");
    check_base_class_offset(lv, (S3552C10*)(S3552C6*), ABISELECT(2048,1432), "S3552C3");
    check_base_class_offset(lv, (S3552C6*), 0, "S3552C3");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C10*), ABISELECT(1088,752), "S3552C3");
    check_field_offset(lv, s3552c3f0, ABISELECT(1320,916), "S3552C3.s3552c3f0");
    set_bf_and_test(lv, s3552c3f1, ABISELECT(1324,920), 0, 2, 1, "S3552C3");
    set_bf_and_test(lv, s3552c3f1, ABISELECT(1324,920), 0, 2, hide_sll(1LL<<1), "S3552C3");
    check_field_offset(lv, s3552c3f2, ABISELECT(1325,921), "S3552C3.s3552c3f2");
    check_field_offset(lv, s3552c3f3, ABISELECT(1328,924), "S3552C3.s3552c3f3");
    test_class_info(&lv, &cd_S3552C3);
    dp->~S3552C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3552C3(Test_S3552C3, "S3552C3", ABISELECT(2288,1596));

#else // __cplusplus

extern void _ZN7S3552C3C1Ev();
extern void _ZN7S3552C3D1Ev();
Name_Map name_map_S3552C3[] = {
  NSPAIR(_ZN7S3552C3C1Ev),
  NSPAIR(_ZN7S3552C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C7;
extern VTBL_ENTRY _ZTI7S3552C7[];
extern  VTBL_ENTRY _ZTV7S3552C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C7[];
extern Class_Descriptor cd_S3552C8;
extern VTBL_ENTRY _ZTI7S3552C8[];
extern  VTBL_ENTRY _ZTV7S3552C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C8[];
extern Class_Descriptor cd_S3552C10;
extern VTBL_ENTRY _ZTI8S3552C10[];
extern  VTBL_ENTRY _ZTV8S3552C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3552C10[];
extern Class_Descriptor cd_S3552C6;
extern VTBL_ENTRY _ZTI7S3552C6[];
extern  VTBL_ENTRY _ZTV7S3552C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C6[];
extern Class_Descriptor cd_S3552C10;
extern VTBL_ENTRY _ZTI8S3552C10[];
extern  VTBL_ENTRY _ZTV8S3552C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3552C10[];
static Base_Class bases_S3552C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1480,1028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3552C4,    ABISELECT(1344,928), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3552C4,    ABISELECT(1536,1068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    3, //immediately_derived
  0, 0},
  {&cd_S3552C7,    ABISELECT(1536,1068), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3552C8,    ABISELECT(1944,1360), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3552C10,    ABISELECT(2048,1432), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3552C6,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3552C10,    ABISELECT(1088,752), //bcp->offset
    9, //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3552C3[];
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY vtc_S3552C3[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
  ABISELECT(256,176),
  ABISELECT(392,276),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
extern VTBL_ENTRY _ZTV7S3552C3[];
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C6__7S3552C3[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C6__7S3552C3[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C6__7S3552C3[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C6__7S3552C3[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__A1__7S3552C6__7S3552C3[] = {
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__A__7S3552C3[] = {
  ABISELECT(256,176),
  ABISELECT(392,276),
  0,
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__8S3552C10__A__7S3552C3[] = {
  ABISELECT(136,100),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__7S3552C3[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C7[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C47S3552C7__A1__7S3552C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C3[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C8__7S3552C3[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C3[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__8S3552C10__7S3552C3[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
};
static  VTT_ENTRY vtt_S3552C3[] = {
  {&(_ZTV7S3552C3[7]),  7,45},
  {&(_tg__ZTV7S3552C6__7S3552C3[7]),  7,9},
  {&(_tg__ZTV7S3552C7__7S3552C6__7S3552C3[6]),  6,9},
  {&(_tg__ZTV7S3552C8__7S3552C6__7S3552C3[7]),  7,10},
  {&(_tg__ZTV8S3552C10__7S3552C6__7S3552C3[6]),  6,8},
  {&(_tg__ZTV7S3552C4__A1__7S3552C6__7S3552C3[3]),  3,3},
  {&(_tg__ZTV8S3552C10__A__7S3552C3[4]),  4,6},
  {&(_tg__ZTV7S3552C4__8S3552C10__A__7S3552C3[3]),  3,3},
  {&(_ZTV7S3552C3[18]),  18,45},
  {&(_ZTV7S3552C3[24]),  24,45},
  {&(_ZTV7S3552C3[34]),  34,45},
  {&(_ZTV7S3552C3[43]),  43,45},
  {&(_ZTV7S3552C3[13]),  13,45},
  {&(_tg__ZTV7S3552C4__7S3552C3[3]),  3,3},
  {&(_tg__ZTV7S3552C7__7S3552C3[3]),  3,6},
  {&(_tg__ZTV7S3552C47S3552C7__A1__7S3552C3[3]),  3,3},
  {&(_tg__ZTV7S3552C8__7S3552C3[4]),  4,7},
  {&(_tg__ZTV7S3552C7__7S3552C8__7S3552C3[6]),  6,9},
  {&(_tg__ZTV8S3552C10__7S3552C3[4]),  4,6},
  {&(_tg__ZTV7S3552C4__8S3552C10__7S3552C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3552C3[];
extern  VTBL_ENTRY _ZTV7S3552C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C3[];
Class_Descriptor cd_S3552C3 = {  "S3552C3", // class name
  bases_S3552C3, 8,
  &(vtc_S3552C3[0]), // expected_vtbl_contents
  &(vtt_S3552C3[0]), // expected_vtt_contents
  ABISELECT(2288,1596), // object size
  NSPAIRA(_ZTI7S3552C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3552C3),45, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3552C3),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3552C2  : S3552C3 {
  int s3552c2f0;
  ::S20677C6_nt s3552c2f1;
  short s3552c2f2;
  __tsi64 s3552c2f3;
  ::S3552C4 s3552c2f4;
  __tsi64 s3552c2f5;
  virtual void  v11(); // _ZN7S3552C23v11Ev
  ~S3552C2(); // tgen
  S3552C2(); // tgen
};
//SIG(-1 S3552C2) C1{ BC2{ VBC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} BC5{ VBC6{ VBC4 BC3 v2 v3 v4 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi} VBC7{ VBC4 VBC6 v5 v6 v7 FL FC8{} Fp Fc[2] FC4 Fl FC8} VBC9{ VBC4 VBC3 v8 v9 Fi FC3 FL Fi Fp} v10 v11 FC8 FC8 Fi FC3 FC8 FC8 FC10{ v12 FC8 FC11{ VBC4 FD Fi FC4 FC4} FC8 FL FC8 Fp FC8 Fp[2] FC8} FC7 Fp FC8} BC9 Fi Fc:2 FC8 Fi} v1 Fi FC8 Fs FL FC3 FL}


void  S3552C2 ::v11(){vfunc_called(this, "_ZN7S3552C23v11Ev");}
S3552C2 ::~S3552C2(){ note_dtor("S3552C2", this);} // tgen
S3552C2 ::S3552C2(){ note_ctor("S3552C2", this);} // tgen

static void Test_S3552C2()
{
  extern Class_Descriptor cd_S3552C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(158,441)];
    init_test(&cd_S3552C2, buf);
    S3552C2 *dp, &lv = *(dp=new (buf) S3552C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2512,1760), "sizeof(S3552C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3552C2)");
    /*is_ambiguous_... S3552C2::S3552C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C4*), ABISELECT(1704,1192), "S3552C2");
    check_base_class_offset(lv, (S20677C3*)(S3552C7*), ABISELECT(1704,1192), "S3552C2");
    check_base_class_offset(lv, (S20677C3*)(S3552C4*)(S3552C7*), ABISELECT(1704,1192), "S3552C2");
    check_base_class_offset(lv, (S20677C3*)(S3552C8*), ABISELECT(1704,1192), "S3552C2");
    /*is_ambiguous_... S3552C2::S3552C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C10*), ABISELECT(1704,1192), "S3552C2");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C10*)(S3552C3*), ABISELECT(1704,1192), "S3552C2");
    /*is_ambiguous_... S3552C3::S3552C4 */ AMB_check_base_class_offset(lv, (S3552C4*)(S3552C3*), ABISELECT(1568,1092), "S3552C2");
    /*is_ambiguous_... S3552C2::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C4*)(S3552C10*), ABISELECT(1568,1092), "S3552C2");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C4*)(S3552C10*)(S3552C3*), ABISELECT(1568,1092), "S3552C2");
    check_base_class_offset(lv, (S3552C4*)(S3552C7*), ABISELECT(1760,1232), "S3552C2");
    check_base_class_offset(lv, (S3552C7*)(S3552C6*)(S3552C3*), ABISELECT(1760,1232), "S3552C2");
    check_base_class_offset(lv, (S3552C7*)(S3552C8*), ABISELECT(1760,1232), "S3552C2");
    check_base_class_offset(lv, (S3552C8*)(S3552C6*)(S3552C3*), ABISELECT(2168,1524), "S3552C2");
    check_base_class_offset(lv, (S3552C10*)(S3552C6*)(S3552C3*), ABISELECT(2272,1596), "S3552C2");
    check_base_class_offset(lv, (S3552C6*)(S3552C3*), 0, "S3552C2");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C10*)(S3552C3*), ABISELECT(1088,752), "S3552C2");
    check_base_class_offset(lv, (S3552C3*), 0, "S3552C2");
    check_field_offset(lv, s3552c2f0, ABISELECT(1332,928), "S3552C2.s3552c2f0");
    check_field_offset(lv, s3552c2f1, ABISELECT(1336,932), "S3552C2.s3552c2f1");
    check_field_offset(lv, s3552c2f2, ABISELECT(1338,934), "S3552C2.s3552c2f2");
    check_field_offset(lv, s3552c2f3, ABISELECT(1344,936), "S3552C2.s3552c2f3");
    check_field_offset(lv, s3552c2f4, ABISELECT(1360,944), "S3552C2.s3552c2f4");
    check_field_offset(lv, s3552c2f5, ABISELECT(1552,1084), "S3552C2.s3552c2f5");
    test_class_info(&lv, &cd_S3552C2);
    dp->~S3552C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3552C2(Test_S3552C2, "S3552C2", ABISELECT(2512,1760));

#else // __cplusplus

extern void _ZN7S3552C2C1Ev();
extern void _ZN7S3552C2D1Ev();
Name_Map name_map_S3552C2[] = {
  NSPAIR(_ZN7S3552C2C1Ev),
  NSPAIR(_ZN7S3552C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C7;
extern VTBL_ENTRY _ZTI7S3552C7[];
extern  VTBL_ENTRY _ZTV7S3552C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C7[];
extern Class_Descriptor cd_S3552C8;
extern VTBL_ENTRY _ZTI7S3552C8[];
extern  VTBL_ENTRY _ZTV7S3552C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C8[];
extern Class_Descriptor cd_S3552C10;
extern VTBL_ENTRY _ZTI8S3552C10[];
extern  VTBL_ENTRY _ZTV8S3552C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3552C10[];
extern Class_Descriptor cd_S3552C6;
extern VTBL_ENTRY _ZTI7S3552C6[];
extern  VTBL_ENTRY _ZTV7S3552C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C6[];
extern Class_Descriptor cd_S3552C10;
extern VTBL_ENTRY _ZTI8S3552C10[];
extern  VTBL_ENTRY _ZTV8S3552C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3552C10[];
extern Class_Descriptor cd_S3552C3;
extern VTBL_ENTRY _ZTI7S3552C3[];
extern  VTBL_ENTRY _ZTV7S3552C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C3[];
static Base_Class bases_S3552C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1704,1192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3552C4,    ABISELECT(1568,1092), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3552C4,    ABISELECT(1760,1232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3552C7,    ABISELECT(1760,1232), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3552C8,    ABISELECT(2168,1524), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3552C10,    ABISELECT(2272,1596), //bcp->offset
    38, //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
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3552C6,    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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3552C10,    ABISELECT(1088,752), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3552C3,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3552C2[];
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
extern void _ZN7S3552C23v11Ev();
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY vtc_S3552C2[] = {
  ABISELECT(1568,1092),
  ABISELECT(2272,1596),
  ABISELECT(2168,1524),
  ABISELECT(1704,1192),
  ABISELECT(1760,1232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3552C23v11Ev,
  ABISELECT(480,340),
  ABISELECT(616,440),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
  ABISELECT(136,100),
  ABISELECT(-1568,-1092),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1232),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1524),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1596),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
extern VTBL_ENTRY _ZTV7S3552C2[];
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C3__7S3552C2[] = {
  ABISELECT(1568,1092),
  ABISELECT(2272,1596),
  ABISELECT(2168,1524),
  ABISELECT(1704,1192),
  ABISELECT(1760,1232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
};
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C67S3552C3__7S3552C2[] = {
  ABISELECT(1568,1092),
  ABISELECT(2272,1596),
  ABISELECT(2168,1524),
  ABISELECT(1704,1192),
  ABISELECT(1760,1232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C67S3552C3__7S3552C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1232),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C67S3552C3__7S3552C2[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1524),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C67S3552C3__7S3552C2[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1596),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__A1__7S3552C67S3552C3__7S3552C2[] = {
  ABISELECT(136,100),
  ABISELECT(-1568,-1092),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C107S3552C3__A1__7S3552C2[] = {
  ABISELECT(480,340),
  ABISELECT(616,440),
  0,
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__8S3552C107S3552C3__A1__7S3552C2[] = {
  ABISELECT(136,100),
  ABISELECT(-480,-340),
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__7S3552C3__7S3552C2[] = {
  ABISELECT(136,100),
  ABISELECT(-1568,-1092),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C3__7S3552C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1232),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C3__7S3552C2[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1524),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C3__7S3552C2[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1596),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__A__7S3552C3__7S3552C2[] = {
  ABISELECT(480,340),
  ABISELECT(616,440),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__7S3552C2[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C7[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C47S3552C7__A1__7S3552C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C2[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C8__7S3552C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C2[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__8S3552C10__7S3552C2[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
};
static  VTT_ENTRY vtt_S3552C2[] = {
  {&(_ZTV7S3552C2[7]),  7,46},
  {&(_tg__ZTV7S3552C3__7S3552C2[7]),  7,9},
  {&(_tg__ZTV7S3552C67S3552C3__7S3552C2[7]),  7,9},
  {&(_tg__ZTV7S3552C7__7S3552C67S3552C3__7S3552C2[6]),  6,9},
  {&(_tg__ZTV7S3552C8__7S3552C67S3552C3__7S3552C2[7]),  7,10},
  {&(_tg__ZTV8S3552C10__7S3552C67S3552C3__7S3552C2[6]),  6,8},
  {&(_tg__ZTV7S3552C4__A1__7S3552C67S3552C3__7S3552C2[3]),  3,3},
  {&(_tg__ZTV8S3552C107S3552C3__A1__7S3552C2[4]),  4,6},
  {&(_tg__ZTV7S3552C4__8S3552C107S3552C3__A1__7S3552C2[3]),  3,3},
  {&(_tg__ZTV7S3552C4__7S3552C3__7S3552C2[3]),  3,3},
  {&(_tg__ZTV7S3552C7__7S3552C3__7S3552C2[6]),  6,9},
  {&(_tg__ZTV7S3552C8__7S3552C3__7S3552C2[7]),  7,10},
  {&(_tg__ZTV8S3552C10__7S3552C3__7S3552C2[6]),  6,8},
  {&(_tg__ZTV8S3552C10__A__7S3552C3__7S3552C2[4]),  4,6},
  {&(_ZTV7S3552C2[19]),  19,46},
  {&(_ZTV7S3552C2[25]),  25,46},
  {&(_ZTV7S3552C2[35]),  35,46},
  {&(_ZTV7S3552C2[44]),  44,46},
  {&(_ZTV7S3552C2[14]),  14,46},
  {&(_tg__ZTV7S3552C4__7S3552C2[3]),  3,3},
  {&(_tg__ZTV7S3552C7__7S3552C2[3]),  3,6},
  {&(_tg__ZTV7S3552C47S3552C7__A1__7S3552C2[3]),  3,3},
  {&(_tg__ZTV7S3552C8__7S3552C2[4]),  4,7},
  {&(_tg__ZTV7S3552C7__7S3552C8__7S3552C2[6]),  6,9},
  {&(_tg__ZTV8S3552C10__7S3552C2[4]),  4,6},
  {&(_tg__ZTV7S3552C4__8S3552C10__7S3552C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3552C2[];
extern  VTBL_ENTRY _ZTV7S3552C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C2[];
Class_Descriptor cd_S3552C2 = {  "S3552C2", // class name
  bases_S3552C2, 9,
  &(vtc_S3552C2[0]), // expected_vtbl_contents
  &(vtt_S3552C2[0]), // expected_vtt_contents
  ABISELECT(2512,1760), // object size
  NSPAIRA(_ZTI7S3552C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3552C2),46, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3552C2),26, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3552C1  : S3552C2 {
  short s3552c1f0;
  void *s3552c1f1;
  __tsi64 s3552c1f2;
  int s3552c1f3[8];
  ::S20677C3 s3552c1f4;
  int s3552c1f5;
  __tsi64 s3552c1f6[2];
  int s3552c1f7;
  void *s3552c1f8;
  ::S3552C6 s3552c1f9;
  ~S3552C1(); // tgen
  S3552C1(); // tgen
};
//SIG(1 S3552C1) C1{ BC2{ BC3{ VBC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} BC6{ VBC7{ VBC5 BC4 v1 v2 v3 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC8{ VBC5 VBC7 v4 v5 v6 FL FC9{} Fp Fc[2] FC5 Fl FC9} VBC10{ VBC5 VBC4 v7 v8 Fi FC4 FL Fi Fp} v9 v10 FC9 FC9 Fi FC4 FC9 FC9 FC11{ v12 FC9 FC12{ VBC5 FD Fi FC5 FC5} FC9 FL FC9 Fp FC9 Fp[2] FC9} FC8 Fp FC9} BC10 Fi Fc:2 FC9 Fi} v11 Fi FC9 Fs FL FC4 FL} Fs Fp FL Fi[8] FC5 Fi FL[2] Fi Fp FC6}


S3552C1 ::~S3552C1(){ note_dtor("S3552C1", this);} // tgen
S3552C1 ::S3552C1(){ note_ctor("S3552C1", this);} // tgen

static void Test_S3552C1()
{
  extern Class_Descriptor cd_S3552C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(294,825)];
    init_test(&cd_S3552C1, buf);
    S3552C1 *dp, &lv = *(dp=new (buf) S3552C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4688,3296), "sizeof(S3552C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3552C1)");
    /*is_ambiguous_... S3552C1::S3552C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C4*), ABISELECT(3880,2728), "S3552C1");
    check_base_class_offset(lv, (S20677C3*)(S3552C7*), ABISELECT(3880,2728), "S3552C1");
    check_base_class_offset(lv, (S20677C3*)(S3552C4*)(S3552C7*), ABISELECT(3880,2728), "S3552C1");
    check_base_class_offset(lv, (S20677C3*)(S3552C8*), ABISELECT(3880,2728), "S3552C1");
    /*is_ambiguous_... S3552C1::S3552C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C10*), ABISELECT(3880,2728), "S3552C1");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3552C10*)(S3552C3*)(S3552C2*), ABISELECT(3880,2728), "S3552C1");
    /*is_ambiguous_... S3552C3::S3552C4 */ AMB_check_base_class_offset(lv, (S3552C4*)(S3552C3*)(S3552C2*), ABISELECT(3744,2628), "S3552C1");
    /*is_ambiguous_... S3552C1::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C4*)(S3552C10*), ABISELECT(3744,2628), "S3552C1");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C4*)(S3552C10*)(S3552C3*)(S3552C2*), ABISELECT(3744,2628), "S3552C1");
    check_base_class_offset(lv, (S3552C4*)(S3552C7*), ABISELECT(3936,2768), "S3552C1");
    check_base_class_offset(lv, (S3552C7*)(S3552C6*)(S3552C3*)(S3552C2*), ABISELECT(3936,2768), "S3552C1");
    check_base_class_offset(lv, (S3552C7*)(S3552C8*), ABISELECT(3936,2768), "S3552C1");
    check_base_class_offset(lv, (S3552C8*)(S3552C6*)(S3552C3*)(S3552C2*), ABISELECT(4344,3060), "S3552C1");
    check_base_class_offset(lv, (S3552C10*)(S3552C6*)(S3552C3*)(S3552C2*), ABISELECT(4448,3132), "S3552C1");
    check_base_class_offset(lv, (S3552C6*)(S3552C3*)(S3552C2*), 0, "S3552C1");
    /*is_ambiguous_... S3552C3::S3552C10 */ AMB_check_base_class_offset(lv, (S3552C10*)(S3552C3*)(S3552C2*), ABISELECT(1088,752), "S3552C1");
    check_base_class_offset(lv, (S3552C3*)(S3552C2*), 0, "S3552C1");
    check_base_class_offset(lv, (S3552C2*), 0, "S3552C1");
    check_field_offset(lv, s3552c1f0, ABISELECT(1560,1092), "S3552C1.s3552c1f0");
    check_field_offset(lv, s3552c1f1, ABISELECT(1568,1096), "S3552C1.s3552c1f1");
    check_field_offset(lv, s3552c1f2, ABISELECT(1576,1100), "S3552C1.s3552c1f2");
    check_field_offset(lv, s3552c1f3, ABISELECT(1584,1108), "S3552C1.s3552c1f3");
    check_field_offset(lv, s3552c1f4, ABISELECT(1616,1140), "S3552C1.s3552c1f4");
    check_field_offset(lv, s3552c1f5, ABISELECT(1664,1180), "S3552C1.s3552c1f5");
    check_field_offset(lv, s3552c1f6, ABISELECT(1672,1184), "S3552C1.s3552c1f6");
    check_field_offset(lv, s3552c1f7, ABISELECT(1688,1200), "S3552C1.s3552c1f7");
    check_field_offset(lv, s3552c1f8, ABISELECT(1696,1204), "S3552C1.s3552c1f8");
    check_field_offset(lv, s3552c1f9, ABISELECT(1712,1208), "S3552C1.s3552c1f9");
    test_class_info(&lv, &cd_S3552C1);
    dp->~S3552C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3552C1(Test_S3552C1, "S3552C1", ABISELECT(4688,3296));

#else // __cplusplus

extern void _ZN7S3552C1C1Ev();
extern void _ZN7S3552C1D1Ev();
Name_Map name_map_S3552C1[] = {
  NSPAIR(_ZN7S3552C1C1Ev),
  NSPAIR(_ZN7S3552C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C4;
extern VTBL_ENTRY _ZTI7S3552C4[];
extern  VTBL_ENTRY _ZTV7S3552C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C4[];
extern Class_Descriptor cd_S3552C7;
extern VTBL_ENTRY _ZTI7S3552C7[];
extern  VTBL_ENTRY _ZTV7S3552C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C7[];
extern Class_Descriptor cd_S3552C8;
extern VTBL_ENTRY _ZTI7S3552C8[];
extern  VTBL_ENTRY _ZTV7S3552C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C8[];
extern Class_Descriptor cd_S3552C10;
extern VTBL_ENTRY _ZTI8S3552C10[];
extern  VTBL_ENTRY _ZTV8S3552C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3552C10[];
extern Class_Descriptor cd_S3552C6;
extern VTBL_ENTRY _ZTI7S3552C6[];
extern  VTBL_ENTRY _ZTV7S3552C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C6[];
extern Class_Descriptor cd_S3552C10;
extern VTBL_ENTRY _ZTI8S3552C10[];
extern  VTBL_ENTRY _ZTV8S3552C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3552C10[];
extern Class_Descriptor cd_S3552C3;
extern VTBL_ENTRY _ZTI7S3552C3[];
extern  VTBL_ENTRY _ZTV7S3552C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C3[];
extern Class_Descriptor cd_S3552C2;
extern VTBL_ENTRY _ZTI7S3552C2[];
extern  VTBL_ENTRY _ZTV7S3552C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C2[];
static Base_Class bases_S3552C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(3880,2728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3552C4,    ABISELECT(3744,2628), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3552C4,    ABISELECT(3936,2768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3552C7,    ABISELECT(3936,2768), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3552C8,    ABISELECT(4344,3060), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3552C10,    ABISELECT(4448,3132), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3552C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3552C10,    ABISELECT(1088,752), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3552C3,    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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3552C2,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3552C1[];
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
extern void _ZN7S3552C23v11Ev();
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY vtc_S3552C1[] = {
  ABISELECT(3744,2628),
  ABISELECT(4448,3132),
  ABISELECT(4344,3060),
  ABISELECT(3880,2728),
  ABISELECT(3936,2768),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C1[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3552C23v11Ev,
  ABISELECT(2656,1876),
  ABISELECT(2792,1976),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3552C1[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
  ABISELECT(136,100),
  ABISELECT(-3744,-2628),
  (VTBL_ENTRY)&(_ZTI7S3552C1[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3936,-2768),
  (VTBL_ENTRY)&(_ZTI7S3552C1[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-4344,-3060),
  (VTBL_ENTRY)&(_ZTI7S3552C1[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-4448,-3132),
  (VTBL_ENTRY)&(_ZTI7S3552C1[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
extern VTBL_ENTRY _ZTV7S3552C1[];
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
extern void _ZN7S3552C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C2__7S3552C1[] = {
  ABISELECT(3744,2628),
  ABISELECT(4448,3132),
  ABISELECT(4344,3060),
  ABISELECT(3880,2728),
  ABISELECT(3936,2768),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3552C23v11Ev,
};
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C37S3552C2__7S3552C1[] = {
  ABISELECT(3744,2628),
  ABISELECT(4448,3132),
  ABISELECT(4344,3060),
  ABISELECT(3880,2728),
  ABISELECT(3936,2768),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
};
extern void _ZN7S3552C62v9Ev();
extern void _ZN7S3552C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C67S3552C37S3552C2__7S3552C1[] = {
  ABISELECT(3744,2628),
  ABISELECT(4448,3132),
  ABISELECT(4344,3060),
  ABISELECT(3880,2728),
  ABISELECT(3936,2768),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3552C63v10Ev,
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C67S3552C37S3552C2__7S3552C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3936,-2768),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C67S3552C37S3552C2__7S3552C1[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-4344,-3060),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C67S3552C37S3552C2__7S3552C1[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-4448,-3132),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__A1__7S3552C67S3552C37S3552C2__7S3552C1[] = {
  ABISELECT(136,100),
  ABISELECT(-3744,-2628),
  (VTBL_ENTRY)&(_ZTI7S3552C6[0]),
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C107S3552C37S3552C2__A1__7S3552C1[] = {
  ABISELECT(2656,1876),
  ABISELECT(2792,1976),
  0,
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__8S3552C107S3552C37S3552C2__A1__7S3552C1[] = {
  ABISELECT(136,100),
  ABISELECT(-2656,-1876),
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__7S3552C37S3552C2__7S3552C1[] = {
  ABISELECT(136,100),
  ABISELECT(-3744,-2628),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C37S3552C2__7S3552C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3936,-2768),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C37S3552C2__7S3552C1[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-4344,-3060),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C37S3552C2__7S3552C1[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-4448,-3132),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__A__7S3552C37S3552C2__7S3552C1[] = {
  ABISELECT(2656,1876),
  ABISELECT(2792,1976),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3552C3[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__7S3552C2__7S3552C1[] = {
  ABISELECT(136,100),
  ABISELECT(-3744,-2628),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C2__7S3552C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3936,-2768),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C2__7S3552C1[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-4344,-3060),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C2__7S3552C1[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-4448,-3132),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C107S3552C3__A1__7S3552C2__7S3552C1[] = {
  ABISELECT(2656,1876),
  ABISELECT(2792,1976),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3552C2[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__7S3552C1[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C7[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C47S3552C7__A1__7S3552C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C4[0]),
};
extern void _ZN7S3552C82v4Ev();
extern void _ZN7S3552C82v5Ev();
extern void _ZN7S3552C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C8__7S3552C1[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3552C82v6Ev,
};
extern void _ZN7S3552C72v1Ev();
extern void _ZN7S3552C72v2Ev();
extern void _ZN7S3552C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3552C7__7S3552C8__7S3552C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI7S3552C8[0]),
  (VTBL_ENTRY)&_ZN7S3552C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3552C72v3Ev,
};
extern void _ZN8S3552C102v7Ev();
extern void _ZN8S3552C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3552C10__7S3552C1[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
  (VTBL_ENTRY)&_ZN8S3552C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3552C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3552C4__8S3552C10__7S3552C1[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI8S3552C10[0]),
};
static  VTT_ENTRY vtt_S3552C1[] = {
  {&(_ZTV7S3552C1[7]),  7,46},
  {&(_tg__ZTV7S3552C2__7S3552C1[7]),  7,10},
  {&(_tg__ZTV7S3552C37S3552C2__7S3552C1[7]),  7,9},
  {&(_tg__ZTV7S3552C67S3552C37S3552C2__7S3552C1[7]),  7,9},
  {&(_tg__ZTV7S3552C7__7S3552C67S3552C37S3552C2__7S3552C1[6]),  6,9},
  {&(_tg__ZTV7S3552C8__7S3552C67S3552C37S3552C2__7S3552C1[7]),  7,10},
  {&(_tg__ZTV8S3552C10__7S3552C67S3552C37S3552C2__7S3552C1[6]),  6,8},
  {&(_tg__ZTV7S3552C4__A1__7S3552C67S3552C37S3552C2__7S3552C1[3]),  3,3},
  {&(_tg__ZTV8S3552C107S3552C37S3552C2__A1__7S3552C1[4]),  4,6},
  {&(_tg__ZTV7S3552C4__8S3552C107S3552C37S3552C2__A1__7S3552C1[3]),  3,3},
  {&(_tg__ZTV7S3552C4__7S3552C37S3552C2__7S3552C1[3]),  3,3},
  {&(_tg__ZTV7S3552C7__7S3552C37S3552C2__7S3552C1[6]),  6,9},
  {&(_tg__ZTV7S3552C8__7S3552C37S3552C2__7S3552C1[7]),  7,10},
  {&(_tg__ZTV8S3552C10__7S3552C37S3552C2__7S3552C1[6]),  6,8},
  {&(_tg__ZTV8S3552C10__A__7S3552C37S3552C2__7S3552C1[4]),  4,6},
  {&(_tg__ZTV7S3552C4__7S3552C2__7S3552C1[3]),  3,3},
  {&(_tg__ZTV7S3552C7__7S3552C2__7S3552C1[6]),  6,9},
  {&(_tg__ZTV7S3552C8__7S3552C2__7S3552C1[7]),  7,10},
  {&(_tg__ZTV8S3552C10__7S3552C2__7S3552C1[6]),  6,8},
  {&(_tg__ZTV8S3552C107S3552C3__A1__7S3552C2__7S3552C1[4]),  4,6},
  {&(_ZTV7S3552C1[19]),  19,46},
  {&(_ZTV7S3552C1[25]),  25,46},
  {&(_ZTV7S3552C1[35]),  35,46},
  {&(_ZTV7S3552C1[44]),  44,46},
  {&(_ZTV7S3552C1[14]),  14,46},
  {&(_tg__ZTV7S3552C4__7S3552C1[3]),  3,3},
  {&(_tg__ZTV7S3552C7__7S3552C1[3]),  3,6},
  {&(_tg__ZTV7S3552C47S3552C7__A1__7S3552C1[3]),  3,3},
  {&(_tg__ZTV7S3552C8__7S3552C1[4]),  4,7},
  {&(_tg__ZTV7S3552C7__7S3552C8__7S3552C1[6]),  6,9},
  {&(_tg__ZTV8S3552C10__7S3552C1[4]),  4,6},
  {&(_tg__ZTV7S3552C4__8S3552C10__7S3552C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3552C1[];
extern  VTBL_ENTRY _ZTV7S3552C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3552C1[];
Class_Descriptor cd_S3552C1 = {  "S3552C1", // class name
  bases_S3552C1, 10,
  &(vtc_S3552C1[0]), // expected_vtbl_contents
  &(vtt_S3552C1[0]), // expected_vtt_contents
  ABISELECT(4688,3296), // object size
  NSPAIRA(_ZTI7S3552C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3552C1),46, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3552C1),32, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3551C4  : virtual S20677C3 {
  long double s3551c4f0;
  int s3551c4f1;
  ::S20677C3 s3551c4f2;
  ::S20677C3 s3551c4f3;
  ~S3551C4(); // tgen
  S3551C4(); // tgen
};
//SIG(-1 S3551C4) C1{ VBC2{ m Fp FL[4] Fs} FD Fi FC2 FC2}


S3551C4 ::~S3551C4(){ note_dtor("S3551C4", this);} // tgen
S3551C4 ::S3551C4(){ note_ctor("S3551C4", this);} // tgen

static void Test_S3551C4()
{
  extern Class_Descriptor cd_S3551C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,36)];
    init_test(&cd_S3551C4, buf);
    S3551C4 *dp, &lv = *(dp=new (buf) S3551C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,140), "sizeof(S3551C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3551C4)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(136,100), "S3551C4");
    check_field_offset(lv, s3551c4f0, ABISELECT(16,4), "S3551C4.s3551c4f0");
    check_field_offset(lv, s3551c4f1, ABISELECT(32,16), "S3551C4.s3551c4f1");
    check_field_offset(lv, s3551c4f2, ABISELECT(40,20), "S3551C4.s3551c4f2");
    check_field_offset(lv, s3551c4f3, ABISELECT(88,60), "S3551C4.s3551c4f3");
    test_class_info(&lv, &cd_S3551C4);
    dp->~S3551C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3551C4(Test_S3551C4, "S3551C4", ABISELECT(192,140));

#else // __cplusplus

extern void _ZN7S3551C4C1Ev();
extern void _ZN7S3551C4D1Ev();
Name_Map name_map_S3551C4[] = {
  NSPAIR(_ZN7S3551C4C1Ev),
  NSPAIR(_ZN7S3551C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
static Base_Class bases_S3551C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(136,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S3551C4[];
static  VTBL_ENTRY vtc_S3551C4[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
extern VTBL_ENTRY _ZTV7S3551C4[];
static  VTT_ENTRY vtt_S3551C4[] = {
  {&(_ZTV7S3551C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
Class_Descriptor cd_S3551C4 = {  "S3551C4", // class name
  bases_S3551C4, 1,
  &(vtc_S3551C4[0]), // expected_vtbl_contents
  &(vtt_S3551C4[0]), // expected_vtt_contents
  ABISELECT(192,140), // object size
  NSPAIRA(_ZTI7S3551C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3551C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3551C4),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3551C7  : virtual S20677C3 , S3551C4 {
  short s3551c7f0;
  __tsi64 s3551c7f1;
  char s3551c7f2;
  int s3551c7f3[2];
  ::S3551C4 s3551c7f4;
  void *s3551c7f5;
  __tsi64 s3551c7f6;
  int s3551c7f7;
  __tsi64 s3551c7f8;
  int s3551c7f9;
  virtual void  v1(); // _ZN7S3551C72v1Ev
  virtual void  v2(); // _ZN7S3551C72v2Ev
  virtual void  v3(); // _ZN7S3551C72v3Ev
  ~S3551C7(); // tgen
  S3551C7(); // tgen
};
//SIG(-1 S3551C7) C1{ VBC2{ m Fp FL[4] Fs} BC3{ VBC2 FD Fi FC2 FC2} v1 v2 v3 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi}


void  S3551C7 ::v1(){vfunc_called(this, "_ZN7S3551C72v1Ev");}
void  S3551C7 ::v2(){vfunc_called(this, "_ZN7S3551C72v2Ev");}
void  S3551C7 ::v3(){vfunc_called(this, "_ZN7S3551C72v3Ev");}
S3551C7 ::~S3551C7(){ note_dtor("S3551C7", this);} // tgen
S3551C7 ::S3551C7(){ note_ctor("S3551C7", this);} // tgen

static void Test_S3551C7()
{
  extern Class_Descriptor cd_S3551C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(30,84)];
    init_test(&cd_S3551C7, buf);
    S3551C7 *dp, &lv = *(dp=new (buf) S3551C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,332), "sizeof(S3551C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3551C7)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(408,292), "S3551C7");
    check_base_class_offset(lv, (S20677C3*)(S3551C4*), ABISELECT(408,292), "S3551C7");
    check_base_class_offset(lv, (S3551C4*), 0, "S3551C7");
    check_field_offset(lv, s3551c7f0, ABISELECT(136,100), "S3551C7.s3551c7f0");
    check_field_offset(lv, s3551c7f1, ABISELECT(144,104), "S3551C7.s3551c7f1");
    check_field_offset(lv, s3551c7f2, ABISELECT(152,112), "S3551C7.s3551c7f2");
    check_field_offset(lv, s3551c7f3, ABISELECT(156,116), "S3551C7.s3551c7f3");
    check_field_offset(lv, s3551c7f4, ABISELECT(176,124), "S3551C7.s3551c7f4");
    check_field_offset(lv, s3551c7f5, ABISELECT(368,264), "S3551C7.s3551c7f5");
    check_field_offset(lv, s3551c7f6, ABISELECT(376,268), "S3551C7.s3551c7f6");
    check_field_offset(lv, s3551c7f7, ABISELECT(384,276), "S3551C7.s3551c7f7");
    check_field_offset(lv, s3551c7f8, ABISELECT(392,280), "S3551C7.s3551c7f8");
    check_field_offset(lv, s3551c7f9, ABISELECT(400,288), "S3551C7.s3551c7f9");
    test_class_info(&lv, &cd_S3551C7);
    dp->~S3551C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3551C7(Test_S3551C7, "S3551C7", ABISELECT(464,332));

#else // __cplusplus

extern void _ZN7S3551C7C1Ev();
extern void _ZN7S3551C7D1Ev();
Name_Map name_map_S3551C7[] = {
  NSPAIR(_ZN7S3551C7C1Ev),
  NSPAIR(_ZN7S3551C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
static Base_Class bases_S3551C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(408,292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3551C4,    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 _ZTI7S3551C7[];
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY vtc_S3551C7[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C7[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern VTBL_ENTRY _ZTV7S3551C7[];
static  VTBL_ENTRY _tg__ZTV7S3551C4__7S3551C7[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
static  VTT_ENTRY vtt_S3551C7[] = {
  {&(_ZTV7S3551C7[3]),  3,6},
  {&(_tg__ZTV7S3551C4__7S3551C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3551C7[];
extern  VTBL_ENTRY _ZTV7S3551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C7[];
Class_Descriptor cd_S3551C7 = {  "S3551C7", // class name
  bases_S3551C7, 2,
  &(vtc_S3551C7[0]), // expected_vtbl_contents
  &(vtt_S3551C7[0]), // expected_vtt_contents
  ABISELECT(464,332), // object size
  NSPAIRA(_ZTI7S3551C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3551C7),6, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3551C7),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  S3551C8  : virtual S20677C3 , virtual S3551C7 {
  __tsi64 s3551c8f0;
  ::S20677C6_nt s3551c8f1;
  void *s3551c8f2;
  char s3551c8f3[2];
  ::S20677C3 s3551c8f4;
  long s3551c8f5;
  ::S20677C6_nt s3551c8f6;
  virtual void  v4(); // _ZN7S3551C82v4Ev
  virtual void  v5(); // _ZN7S3551C82v5Ev
  virtual void  v6(); // _ZN7S3551C82v6Ev
  ~S3551C8(); // tgen
  S3551C8(); // tgen
};
//SIG(-1 S3551C8) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 BC4{ VBC2 FD Fi FC2 FC2} v4 v5 v6 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} v1 v2 v3 FL FC5{} Fp Fc[2] FC2 Fl FC5}


void  S3551C8 ::v4(){vfunc_called(this, "_ZN7S3551C82v4Ev");}
void  S3551C8 ::v5(){vfunc_called(this, "_ZN7S3551C82v5Ev");}
void  S3551C8 ::v6(){vfunc_called(this, "_ZN7S3551C82v6Ev");}
S3551C8 ::~S3551C8(){ note_dtor("S3551C8", this);} // tgen
S3551C8 ::S3551C8(){ note_ctor("S3551C8", this);} // tgen

static void Test_S3551C8()
{
  extern Class_Descriptor cd_S3551C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(37,102)];
    init_test(&cd_S3551C8, buf);
    S3551C8 *dp, &lv = *(dp=new (buf) S3551C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,404), "sizeof(S3551C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3551C8)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(104,72), "S3551C8");
    check_base_class_offset(lv, (S20677C3*)(S3551C7*), ABISELECT(104,72), "S3551C8");
    check_base_class_offset(lv, (S20677C3*)(S3551C4*)(S3551C7*), ABISELECT(104,72), "S3551C8");
    check_base_class_offset(lv, (S3551C4*)(S3551C7*), ABISELECT(160,112), "S3551C8");
    check_base_class_offset(lv, (S3551C7*), ABISELECT(160,112), "S3551C8");
    check_field_offset(lv, s3551c8f0, ABISELECT(8,4), "S3551C8.s3551c8f0");
    check_field_offset(lv, s3551c8f1, ABISELECT(16,12), "S3551C8.s3551c8f1");
    check_field_offset(lv, s3551c8f2, ABISELECT(24,16), "S3551C8.s3551c8f2");
    check_field_offset(lv, s3551c8f3, ABISELECT(32,20), "S3551C8.s3551c8f3");
    check_field_offset(lv, s3551c8f4, ABISELECT(40,24), "S3551C8.s3551c8f4");
    check_field_offset(lv, s3551c8f5, ABISELECT(88,64), "S3551C8.s3551c8f5");
    check_field_offset(lv, s3551c8f6, ABISELECT(96,68), "S3551C8.s3551c8f6");
    test_class_info(&lv, &cd_S3551C8);
    dp->~S3551C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3551C8(Test_S3551C8, "S3551C8", ABISELECT(576,404));

#else // __cplusplus

extern void _ZN7S3551C8C1Ev();
extern void _ZN7S3551C8D1Ev();
Name_Map name_map_S3551C8[] = {
  NSPAIR(_ZN7S3551C8C1Ev),
  NSPAIR(_ZN7S3551C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C7;
extern VTBL_ENTRY _ZTI7S3551C7[];
extern  VTBL_ENTRY _ZTV7S3551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C7[];
static Base_Class bases_S3551C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3551C4,    ABISELECT(160,112), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3551C7,    ABISELECT(160,112), //bcp->offset
    7, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3551C8[];
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY vtc_S3551C8[] = {
  ABISELECT(160,112),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-160,-112),
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern VTBL_ENTRY _ZTV7S3551C8[];
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C8[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C7[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C47S3551C7__7S3551C8[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
static  VTT_ENTRY vtt_S3551C8[] = {
  {&(_ZTV7S3551C8[4]),  4,16},
  {&(_ZTV7S3551C8[13]),  13,16},
  {&(_tg__ZTV7S3551C7__7S3551C8[3]),  3,6},
  {&(_tg__ZTV7S3551C47S3551C7__7S3551C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3551C8[];
extern  VTBL_ENTRY _ZTV7S3551C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C8[];
Class_Descriptor cd_S3551C8 = {  "S3551C8", // class name
  bases_S3551C8, 3,
  &(vtc_S3551C8[0]), // expected_vtbl_contents
  &(vtt_S3551C8[0]), // expected_vtt_contents
  ABISELECT(576,404), // object size
  NSPAIRA(_ZTI7S3551C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3551C8),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3551C8),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  S3551C10  : virtual S20677C3 , virtual S3551C4 {
  int s3551c10f0;
  ::S3551C4 s3551c10f1;
  __tsi64 s3551c10f2;
  int s3551c10f3;
  void *s3551c10f4;
  virtual void  v7(); // _ZN8S3551C102v7Ev
  virtual void  v8(); // _ZN8S3551C102v8Ev
  ~S3551C10(); // tgen
  S3551C10(); // tgen
};
//SIG(-1 S3551C10) C1{ VBC2{ m Fp FL[4] Fs} VBC3{ VBC2 FD Fi FC2 FC2} v1 v2 Fi FC3 FL Fi Fp}


void  S3551C10 ::v7(){vfunc_called(this, "_ZN8S3551C102v7Ev");}
void  S3551C10 ::v8(){vfunc_called(this, "_ZN8S3551C102v8Ev");}
S3551C10 ::~S3551C10(){ note_dtor("S3551C10", this);} // tgen
S3551C10 ::S3551C10(){ note_ctor("S3551C10", this);} // tgen

static void Test_S3551C10()
{
  extern Class_Descriptor cd_S3551C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,77)];
    init_test(&cd_S3551C10, buf);
    S3551C10 *dp, &lv = *(dp=new (buf) S3551C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,304), "sizeof(S3551C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3551C10)");
    check_base_class_offset(lv, (S20677C3*), ABISELECT(232,164), "S3551C10");
    check_base_class_offset(lv, (S20677C3*)(S3551C4*), ABISELECT(232,164), "S3551C10");
    check_base_class_offset(lv, (S3551C4*), ABISELECT(288,204), "S3551C10");
    check_field_offset(lv, s3551c10f0, ABISELECT(8,4), "S3551C10.s3551c10f0");
    check_field_offset(lv, s3551c10f1, ABISELECT(16,8), "S3551C10.s3551c10f1");
    check_field_offset(lv, s3551c10f2, ABISELECT(208,148), "S3551C10.s3551c10f2");
    check_field_offset(lv, s3551c10f3, ABISELECT(216,156), "S3551C10.s3551c10f3");
    check_field_offset(lv, s3551c10f4, ABISELECT(224,160), "S3551C10.s3551c10f4");
    test_class_info(&lv, &cd_S3551C10);
    dp->~S3551C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3551C10(Test_S3551C10, "S3551C10", ABISELECT(432,304));

#else // __cplusplus

extern void _ZN8S3551C10C1Ev();
extern void _ZN8S3551C10D1Ev();
Name_Map name_map_S3551C10[] = {
  NSPAIR(_ZN8S3551C10C1Ev),
  NSPAIR(_ZN8S3551C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
static Base_Class bases_S3551C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(232,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
    -1, //immediately_derived
  1, 1},
  {&cd_S3551C4,    ABISELECT(288,204), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3551C10[];
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY vtc_S3551C10[] = {
  ABISELECT(288,204),
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
  ABISELECT(-56,-40),
  ABISELECT(-288,-204),
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
};
extern VTBL_ENTRY _ZTV8S3551C10[];
static  VTBL_ENTRY _tg__ZTV7S3551C4__8S3551C10[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
static  VTT_ENTRY vtt_S3551C10[] = {
  {&(_ZTV8S3551C10[4]),  4,9},
  {&(_ZTV8S3551C10[9]),  9,9},
  {&(_tg__ZTV7S3551C4__8S3551C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S3551C10[];
extern  VTBL_ENTRY _ZTV8S3551C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3551C10[];
Class_Descriptor cd_S3551C10 = {  "S3551C10", // class name
  bases_S3551C10, 2,
  &(vtc_S3551C10[0]), // expected_vtbl_contents
  &(vtt_S3551C10[0]), // expected_vtt_contents
  ABISELECT(432,304), // object size
  NSPAIRA(_ZTI8S3551C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3551C10),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3551C10),3, //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  S3551C6  : virtual S3551C7 , virtual S3551C8 , virtual S3551C10 {
  ::S20677C6_nt s3551c6f0;
  ::S20677C6_nt s3551c6f1;
  int s3551c6f2;
  ::S3551C4 s3551c6f3;
  ::S20677C6_nt s3551c6f4;
  ::S20677C6_nt s3551c6f5;
  ::S21008C9 s3551c6f6;
  ::S3551C8 s3551c6f7;
  void *s3551c6f8;
  ::S20677C6_nt s3551c6f9;
  virtual void  v9(); // _ZN7S3551C62v9Ev
  virtual void  v10(); // _ZN7S3551C63v10Ev
  ~S3551C6(); // tgen
  S3551C6(); // tgen
};
//SIG(-1 S3551C6) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} BC4{ VBC3 FD Fi FC3 FC3} v3 v4 v5 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC5{ VBC3 VBC2 v6 v7 v8 FL FC6{} Fp Fc[2] FC3 Fl FC6} VBC7{ VBC3 VBC4 v9 v10 Fi FC4 FL Fi Fp} v1 v2 FC6 FC6 Fi FC4 FC6 FC6 FC8{ v11 FC6 FC9{ VBC3 FD Fi FC3 FC3} FC6 FL FC6 Fp FC6 Fp[2] FC6} FC5 Fp FC6}


void  S3551C6 ::v9(){vfunc_called(this, "_ZN7S3551C62v9Ev");}
void  S3551C6 ::v10(){vfunc_called(this, "_ZN7S3551C63v10Ev");}
S3551C6 ::~S3551C6(){ note_dtor("S3551C6", this);} // tgen
S3551C6 ::S3551C6(){ note_ctor("S3551C6", this);} // tgen

static void Test_S3551C6()
{
  extern Class_Descriptor cd_S3551C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(128,356)];
    init_test(&cd_S3551C6, buf);
    S3551C6 *dp, &lv = *(dp=new (buf) S3551C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2032,1420), "sizeof(S3551C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3551C6)");
    check_base_class_offset(lv, (S20677C3*)(S3551C7*), ABISELECT(1496,1044), "S3551C6");
    check_base_class_offset(lv, (S20677C3*)(S3551C4*)(S3551C7*), ABISELECT(1496,1044), "S3551C6");
    check_base_class_offset(lv, (S20677C3*)(S3551C8*), ABISELECT(1496,1044), "S3551C6");
    check_base_class_offset(lv, (S20677C3*)(S3551C10*), ABISELECT(1496,1044), "S3551C6");
    /*is_ambiguous_... S3551C6::S3551C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C4*), ABISELECT(1496,1044), "S3551C6");
    check_base_class_offset(lv, (S3551C4*)(S3551C7*), ABISELECT(1088,752), "S3551C6");
    check_base_class_offset(lv, (S3551C7*), ABISELECT(1088,752), "S3551C6");
    check_base_class_offset(lv, (S3551C7*)(S3551C8*), ABISELECT(1088,752), "S3551C6");
    check_base_class_offset(lv, (S3551C8*), ABISELECT(1544,1084), "S3551C6");
    check_base_class_offset(lv, (S3551C4*)(S3551C10*), ABISELECT(1888,1320), "S3551C6");
    check_base_class_offset(lv, (S3551C10*), ABISELECT(1648,1156), "S3551C6");
    check_field_offset(lv, s3551c6f0, ABISELECT(8,4), "S3551C6.s3551c6f0");
    check_field_offset(lv, s3551c6f1, ABISELECT(9,5), "S3551C6.s3551c6f1");
    check_field_offset(lv, s3551c6f2, ABISELECT(12,8), "S3551C6.s3551c6f2");
    check_field_offset(lv, s3551c6f3, ABISELECT(16,12), "S3551C6.s3551c6f3");
    check_field_offset(lv, s3551c6f4, ABISELECT(208,152), "S3551C6.s3551c6f4");
    check_field_offset(lv, s3551c6f5, ABISELECT(209,153), "S3551C6.s3551c6f5");
    check_field_offset(lv, s3551c6f6, ABISELECT(224,156), "S3551C6.s3551c6f6");
    check_field_offset(lv, s3551c6f7, ABISELECT(496,340), "S3551C6.s3551c6f7");
    check_field_offset(lv, s3551c6f8, ABISELECT(1072,744), "S3551C6.s3551c6f8");
    check_field_offset(lv, s3551c6f9, ABISELECT(1080,748), "S3551C6.s3551c6f9");
    test_class_info(&lv, &cd_S3551C6);
    dp->~S3551C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3551C6(Test_S3551C6, "S3551C6", ABISELECT(2032,1420));

#else // __cplusplus

extern void _ZN7S3551C6C1Ev();
extern void _ZN7S3551C6D1Ev();
Name_Map name_map_S3551C6[] = {
  NSPAIR(_ZN7S3551C6C1Ev),
  NSPAIR(_ZN7S3551C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C7;
extern VTBL_ENTRY _ZTI7S3551C7[];
extern  VTBL_ENTRY _ZTV7S3551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C7[];
extern Class_Descriptor cd_S3551C8;
extern VTBL_ENTRY _ZTI7S3551C8[];
extern  VTBL_ENTRY _ZTV7S3551C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C8[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C10;
extern VTBL_ENTRY _ZTI8S3551C10[];
extern  VTBL_ENTRY _ZTV8S3551C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3551C10[];
static Base_Class bases_S3551C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1496,1044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3551C4,    ABISELECT(1088,752), //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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3551C7,    ABISELECT(1088,752), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3551C8,    ABISELECT(1544,1084), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3551C4,    ABISELECT(1888,1320), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3551C10,    ABISELECT(1648,1156), //bcp->offset
    28, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S3551C6[];
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY vtc_S3551C6[] = {
  ABISELECT(1888,1320),
  ABISELECT(1648,1156),
  ABISELECT(1544,1084),
  ABISELECT(1496,1044),
  ABISELECT(1088,752),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  ABISELECT(-1544,-1084),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
  0,
  0,
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  ABISELECT(-1648,-1156),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
  ABISELECT(-392,-276),
  ABISELECT(-1888,-1320),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
};
extern VTBL_ENTRY _ZTV7S3551C6[];
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C6[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C7[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C47S3551C7__7S3551C6[] = {
  ABISELECT(408,292),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C6[] = {
  ABISELECT(-456,-332),
  ABISELECT(-48,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C8__7S3551C6[] = {
  0,
  0,
  0,
  ABISELECT(408,292),
  ABISELECT(456,332),
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C6[] = {
  ABISELECT(240,164),
  ABISELECT(-152,-112),
  0,
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__8S3551C10__7S3551C6[] = {
  ABISELECT(-392,-276),
  ABISELECT(-240,-164),
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__A1__7S3551C6[] = {
  ABISELECT(-392,-276),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
static  VTT_ENTRY vtt_S3551C6[] = {
  {&(_ZTV7S3551C6[7]),  7,39},
  {&(_ZTV7S3551C6[15]),  15,39},
  {&(_ZTV7S3551C6[25]),  25,39},
  {&(_ZTV7S3551C6[34]),  34,39},
  {&(_ZTV7S3551C6[39]),  39,39},
  {&(_tg__ZTV7S3551C7__7S3551C6[3]),  3,6},
  {&(_tg__ZTV7S3551C47S3551C7__7S3551C6[3]),  3,3},
  {&(_tg__ZTV7S3551C8__7S3551C6[4]),  4,7},
  {&(_tg__ZTV7S3551C7__7S3551C8__7S3551C6[6]),  6,9},
  {&(_tg__ZTV8S3551C10__7S3551C6[4]),  4,6},
  {&(_tg__ZTV7S3551C4__8S3551C10__7S3551C6[3]),  3,3},
  {&(_tg__ZTV7S3551C4__A1__7S3551C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3551C6[];
extern  VTBL_ENTRY _ZTV7S3551C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C6[];
Class_Descriptor cd_S3551C6 = {  "S3551C6", // class name
  bases_S3551C6, 6,
  &(vtc_S3551C6[0]), // expected_vtbl_contents
  &(vtt_S3551C6[0]), // expected_vtt_contents
  ABISELECT(2032,1420), // object size
  NSPAIRA(_ZTI7S3551C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3551C6),39, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3551C6),12, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3551C3  : virtual S3551C4 , S3551C6 , S3551C10 {
  int s3551c3f0;
  char s3551c3f1:2;
  ::S20677C6_nt s3551c3f2;
  int s3551c3f3;
  ~S3551C3(); // tgen
  S3551C3(); // tgen
};
//SIG(-1 S3551C3) C1{ VBC2{ VBC3{ m Fp FL[4] Fs} FD Fi FC3 FC3} BC4{ VBC5{ VBC3 BC2 v1 v2 v3 Fs FL Fc Fi[2] FC2 Fp FL Fi FL Fi} VBC6{ VBC3 VBC5 v4 v5 v6 FL FC7{} Fp Fc[2] FC3 Fl FC7} VBC8{ VBC3 VBC2 v7 v8 Fi FC2 FL Fi Fp} v9 v10 FC7 FC7 Fi FC2 FC7 FC7 FC9{ v11 FC7 FC10{ VBC3 FD Fi FC3 FC3} FC7 FL FC7 Fp FC7 Fp[2] FC7} FC6 Fp FC7} BC8 Fi Fc:2 FC7 Fi}


S3551C3 ::~S3551C3(){ note_dtor("S3551C3", this);} // tgen
S3551C3 ::S3551C3(){ note_ctor("S3551C3", this);} // tgen

static void Test_S3551C3()
{
  extern Class_Descriptor cd_S3551C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(144,400)];
    init_test(&cd_S3551C3, buf);
    S3551C3 *dp, &lv = *(dp=new (buf) S3551C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2288,1596), "sizeof(S3551C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3551C3)");
    /*is_ambiguous_... S3551C3::S3551C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C4*), ABISELECT(1480,1028), "S3551C3");
    check_base_class_offset(lv, (S20677C3*)(S3551C7*), ABISELECT(1480,1028), "S3551C3");
    check_base_class_offset(lv, (S20677C3*)(S3551C4*)(S3551C7*), ABISELECT(1480,1028), "S3551C3");
    check_base_class_offset(lv, (S20677C3*)(S3551C8*), ABISELECT(1480,1028), "S3551C3");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C10*), ABISELECT(1480,1028), "S3551C3");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C10*), ABISELECT(1480,1028), "S3551C3");
    /*is_ambiguous_... S3551C3::S3551C4 */ AMB_check_base_class_offset(lv, (S3551C4*), ABISELECT(1344,928), "S3551C3");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C4*)(S3551C10*), ABISELECT(1344,928), "S3551C3");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C4*)(S3551C10*), ABISELECT(1344,928), "S3551C3");
    check_base_class_offset(lv, (S3551C4*)(S3551C7*), ABISELECT(1536,1068), "S3551C3");
    check_base_class_offset(lv, (S3551C7*)(S3551C6*), ABISELECT(1536,1068), "S3551C3");
    check_base_class_offset(lv, (S3551C7*)(S3551C8*), ABISELECT(1536,1068), "S3551C3");
    check_base_class_offset(lv, (S3551C8*)(S3551C6*), ABISELECT(1944,1360), "S3551C3");
    check_base_class_offset(lv, (S3551C10*)(S3551C6*), ABISELECT(2048,1432), "S3551C3");
    check_base_class_offset(lv, (S3551C6*), 0, "S3551C3");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C10*), ABISELECT(1088,752), "S3551C3");
    check_field_offset(lv, s3551c3f0, ABISELECT(1320,916), "S3551C3.s3551c3f0");
    set_bf_and_test(lv, s3551c3f1, ABISELECT(1324,920), 0, 2, 1, "S3551C3");
    set_bf_and_test(lv, s3551c3f1, ABISELECT(1324,920), 0, 2, hide_sll(1LL<<1), "S3551C3");
    check_field_offset(lv, s3551c3f2, ABISELECT(1325,921), "S3551C3.s3551c3f2");
    check_field_offset(lv, s3551c3f3, ABISELECT(1328,924), "S3551C3.s3551c3f3");
    test_class_info(&lv, &cd_S3551C3);
    dp->~S3551C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3551C3(Test_S3551C3, "S3551C3", ABISELECT(2288,1596));

#else // __cplusplus

extern void _ZN7S3551C3C1Ev();
extern void _ZN7S3551C3D1Ev();
Name_Map name_map_S3551C3[] = {
  NSPAIR(_ZN7S3551C3C1Ev),
  NSPAIR(_ZN7S3551C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C7;
extern VTBL_ENTRY _ZTI7S3551C7[];
extern  VTBL_ENTRY _ZTV7S3551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C7[];
extern Class_Descriptor cd_S3551C8;
extern VTBL_ENTRY _ZTI7S3551C8[];
extern  VTBL_ENTRY _ZTV7S3551C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C8[];
extern Class_Descriptor cd_S3551C10;
extern VTBL_ENTRY _ZTI8S3551C10[];
extern  VTBL_ENTRY _ZTV8S3551C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3551C10[];
extern Class_Descriptor cd_S3551C6;
extern VTBL_ENTRY _ZTI7S3551C6[];
extern  VTBL_ENTRY _ZTV7S3551C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C6[];
extern Class_Descriptor cd_S3551C10;
extern VTBL_ENTRY _ZTI8S3551C10[];
extern  VTBL_ENTRY _ZTV8S3551C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3551C10[];
static Base_Class bases_S3551C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1480,1028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3551C4,    ABISELECT(1344,928), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3551C4,    ABISELECT(1536,1068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    3, //immediately_derived
  0, 0},
  {&cd_S3551C7,    ABISELECT(1536,1068), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3551C8,    ABISELECT(1944,1360), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3551C10,    ABISELECT(2048,1432), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3551C6,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3551C10,    ABISELECT(1088,752), //bcp->offset
    9, //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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3551C3[];
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY vtc_S3551C3[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
  ABISELECT(256,176),
  ABISELECT(392,276),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
extern VTBL_ENTRY _ZTV7S3551C3[];
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C6__7S3551C3[] = {
  ABISELECT(1344,928),
  ABISELECT(2048,1432),
  ABISELECT(1944,1360),
  ABISELECT(1480,1028),
  ABISELECT(1536,1068),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C6__7S3551C3[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1536,-1068),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C6__7S3551C3[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-1944,-1360),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C6__7S3551C3[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2048,-1432),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__A1__7S3551C6__7S3551C3[] = {
  ABISELECT(136,100),
  ABISELECT(-1344,-928),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__A__7S3551C3[] = {
  ABISELECT(256,176),
  ABISELECT(392,276),
  0,
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__8S3551C10__A__7S3551C3[] = {
  ABISELECT(136,100),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__7S3551C3[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C7[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C47S3551C7__A1__7S3551C3[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C3[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C8__7S3551C3[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C3[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__8S3551C10__7S3551C3[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
};
static  VTT_ENTRY vtt_S3551C3[] = {
  {&(_ZTV7S3551C3[7]),  7,45},
  {&(_tg__ZTV7S3551C6__7S3551C3[7]),  7,9},
  {&(_tg__ZTV7S3551C7__7S3551C6__7S3551C3[6]),  6,9},
  {&(_tg__ZTV7S3551C8__7S3551C6__7S3551C3[7]),  7,10},
  {&(_tg__ZTV8S3551C10__7S3551C6__7S3551C3[6]),  6,8},
  {&(_tg__ZTV7S3551C4__A1__7S3551C6__7S3551C3[3]),  3,3},
  {&(_tg__ZTV8S3551C10__A__7S3551C3[4]),  4,6},
  {&(_tg__ZTV7S3551C4__8S3551C10__A__7S3551C3[3]),  3,3},
  {&(_ZTV7S3551C3[18]),  18,45},
  {&(_ZTV7S3551C3[24]),  24,45},
  {&(_ZTV7S3551C3[34]),  34,45},
  {&(_ZTV7S3551C3[43]),  43,45},
  {&(_ZTV7S3551C3[13]),  13,45},
  {&(_tg__ZTV7S3551C4__7S3551C3[3]),  3,3},
  {&(_tg__ZTV7S3551C7__7S3551C3[3]),  3,6},
  {&(_tg__ZTV7S3551C47S3551C7__A1__7S3551C3[3]),  3,3},
  {&(_tg__ZTV7S3551C8__7S3551C3[4]),  4,7},
  {&(_tg__ZTV7S3551C7__7S3551C8__7S3551C3[6]),  6,9},
  {&(_tg__ZTV8S3551C10__7S3551C3[4]),  4,6},
  {&(_tg__ZTV7S3551C4__8S3551C10__7S3551C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3551C3[];
extern  VTBL_ENTRY _ZTV7S3551C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C3[];
Class_Descriptor cd_S3551C3 = {  "S3551C3", // class name
  bases_S3551C3, 8,
  &(vtc_S3551C3[0]), // expected_vtbl_contents
  &(vtt_S3551C3[0]), // expected_vtt_contents
  ABISELECT(2288,1596), // object size
  NSPAIRA(_ZTI7S3551C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3551C3),45, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3551C3),20, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3551C2  : S3551C3 {
  int s3551c2f0;
  ::S20677C6_nt s3551c2f1;
  short s3551c2f2;
  long s3551c2f3;
  ::S3551C4 s3551c2f4;
  long s3551c2f5;
  virtual void  v11(); // _ZN7S3551C23v11Ev
  ~S3551C2(); // tgen
  S3551C2(); // tgen
};
//SIG(-1 S3551C2) C1{ BC2{ VBC3{ VBC4{ m Fp FL[4] Fs} FD Fi FC4 FC4} BC5{ VBC6{ VBC4 BC3 v2 v3 v4 Fs FL Fc Fi[2] FC3 Fp FL Fi FL Fi} VBC7{ VBC4 VBC6 v5 v6 v7 FL FC8{} Fp Fc[2] FC4 Fl FC8} VBC9{ VBC4 VBC3 v8 v9 Fi FC3 FL Fi Fp} v10 v11 FC8 FC8 Fi FC3 FC8 FC8 FC10{ v12 FC8 FC11{ VBC4 FD Fi FC4 FC4} FC8 FL FC8 Fp FC8 Fp[2] FC8} FC7 Fp FC8} BC9 Fi Fc:2 FC8 Fi} v1 Fi FC8 Fs Fl FC3 Fl}


void  S3551C2 ::v11(){vfunc_called(this, "_ZN7S3551C23v11Ev");}
S3551C2 ::~S3551C2(){ note_dtor("S3551C2", this);} // tgen
S3551C2 ::S3551C2(){ note_ctor("S3551C2", this);} // tgen

static void Test_S3551C2()
{
  extern Class_Descriptor cd_S3551C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(158,439)];
    init_test(&cd_S3551C2, buf);
    S3551C2 *dp, &lv = *(dp=new (buf) S3551C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2512,1752), "sizeof(S3551C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3551C2)");
    /*is_ambiguous_... S3551C2::S3551C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C4*), ABISELECT(1704,1184), "S3551C2");
    check_base_class_offset(lv, (S20677C3*)(S3551C7*), ABISELECT(1704,1184), "S3551C2");
    check_base_class_offset(lv, (S20677C3*)(S3551C4*)(S3551C7*), ABISELECT(1704,1184), "S3551C2");
    check_base_class_offset(lv, (S20677C3*)(S3551C8*), ABISELECT(1704,1184), "S3551C2");
    /*is_ambiguous_... S3551C2::S3551C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C10*), ABISELECT(1704,1184), "S3551C2");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C10*)(S3551C3*), ABISELECT(1704,1184), "S3551C2");
    /*is_ambiguous_... S3551C3::S3551C4 */ AMB_check_base_class_offset(lv, (S3551C4*)(S3551C3*), ABISELECT(1568,1084), "S3551C2");
    /*is_ambiguous_... S3551C2::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C4*)(S3551C10*), ABISELECT(1568,1084), "S3551C2");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C4*)(S3551C10*)(S3551C3*), ABISELECT(1568,1084), "S3551C2");
    check_base_class_offset(lv, (S3551C4*)(S3551C7*), ABISELECT(1760,1224), "S3551C2");
    check_base_class_offset(lv, (S3551C7*)(S3551C6*)(S3551C3*), ABISELECT(1760,1224), "S3551C2");
    check_base_class_offset(lv, (S3551C7*)(S3551C8*), ABISELECT(1760,1224), "S3551C2");
    check_base_class_offset(lv, (S3551C8*)(S3551C6*)(S3551C3*), ABISELECT(2168,1516), "S3551C2");
    check_base_class_offset(lv, (S3551C10*)(S3551C6*)(S3551C3*), ABISELECT(2272,1588), "S3551C2");
    check_base_class_offset(lv, (S3551C6*)(S3551C3*), 0, "S3551C2");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C10*)(S3551C3*), ABISELECT(1088,752), "S3551C2");
    check_base_class_offset(lv, (S3551C3*), 0, "S3551C2");
    check_field_offset(lv, s3551c2f0, ABISELECT(1332,928), "S3551C2.s3551c2f0");
    check_field_offset(lv, s3551c2f1, ABISELECT(1336,932), "S3551C2.s3551c2f1");
    check_field_offset(lv, s3551c2f2, ABISELECT(1338,934), "S3551C2.s3551c2f2");
    check_field_offset(lv, s3551c2f3, ABISELECT(1344,936), "S3551C2.s3551c2f3");
    check_field_offset(lv, s3551c2f4, ABISELECT(1360,940), "S3551C2.s3551c2f4");
    check_field_offset(lv, s3551c2f5, ABISELECT(1552,1080), "S3551C2.s3551c2f5");
    test_class_info(&lv, &cd_S3551C2);
    dp->~S3551C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3551C2(Test_S3551C2, "S3551C2", ABISELECT(2512,1752));

#else // __cplusplus

extern void _ZN7S3551C2C1Ev();
extern void _ZN7S3551C2D1Ev();
Name_Map name_map_S3551C2[] = {
  NSPAIR(_ZN7S3551C2C1Ev),
  NSPAIR(_ZN7S3551C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C7;
extern VTBL_ENTRY _ZTI7S3551C7[];
extern  VTBL_ENTRY _ZTV7S3551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C7[];
extern Class_Descriptor cd_S3551C8;
extern VTBL_ENTRY _ZTI7S3551C8[];
extern  VTBL_ENTRY _ZTV7S3551C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C8[];
extern Class_Descriptor cd_S3551C10;
extern VTBL_ENTRY _ZTI8S3551C10[];
extern  VTBL_ENTRY _ZTV8S3551C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3551C10[];
extern Class_Descriptor cd_S3551C6;
extern VTBL_ENTRY _ZTI7S3551C6[];
extern  VTBL_ENTRY _ZTV7S3551C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C6[];
extern Class_Descriptor cd_S3551C10;
extern VTBL_ENTRY _ZTI8S3551C10[];
extern  VTBL_ENTRY _ZTV8S3551C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3551C10[];
extern Class_Descriptor cd_S3551C3;
extern VTBL_ENTRY _ZTI7S3551C3[];
extern  VTBL_ENTRY _ZTV7S3551C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C3[];
static Base_Class bases_S3551C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(1704,1184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3551C4,    ABISELECT(1568,1084), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3551C4,    ABISELECT(1760,1224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3551C7,    ABISELECT(1760,1224), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3551C8,    ABISELECT(2168,1516), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3551C10,    ABISELECT(2272,1588), //bcp->offset
    38, //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
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3551C6,    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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3551C10,    ABISELECT(1088,752), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3551C3,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3551C2[];
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
extern void _ZN7S3551C23v11Ev();
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY vtc_S3551C2[] = {
  ABISELECT(1568,1084),
  ABISELECT(2272,1588),
  ABISELECT(2168,1516),
  ABISELECT(1704,1184),
  ABISELECT(1760,1224),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3551C23v11Ev,
  ABISELECT(480,332),
  ABISELECT(616,432),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
  ABISELECT(136,100),
  ABISELECT(-1568,-1084),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1224),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1516),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1588),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
extern VTBL_ENTRY _ZTV7S3551C2[];
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C3__7S3551C2[] = {
  ABISELECT(1568,1084),
  ABISELECT(2272,1588),
  ABISELECT(2168,1516),
  ABISELECT(1704,1184),
  ABISELECT(1760,1224),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
};
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C67S3551C3__7S3551C2[] = {
  ABISELECT(1568,1084),
  ABISELECT(2272,1588),
  ABISELECT(2168,1516),
  ABISELECT(1704,1184),
  ABISELECT(1760,1224),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C67S3551C3__7S3551C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1224),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C67S3551C3__7S3551C2[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1516),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C67S3551C3__7S3551C2[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1588),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__A1__7S3551C67S3551C3__7S3551C2[] = {
  ABISELECT(136,100),
  ABISELECT(-1568,-1084),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C107S3551C3__A1__7S3551C2[] = {
  ABISELECT(480,332),
  ABISELECT(616,432),
  0,
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__8S3551C107S3551C3__A1__7S3551C2[] = {
  ABISELECT(136,100),
  ABISELECT(-480,-332),
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__7S3551C3__7S3551C2[] = {
  ABISELECT(136,100),
  ABISELECT(-1568,-1084),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C3__7S3551C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-1760,-1224),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C3__7S3551C2[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-2168,-1516),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C3__7S3551C2[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-2272,-1588),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__A__7S3551C3__7S3551C2[] = {
  ABISELECT(480,332),
  ABISELECT(616,432),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__7S3551C2[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C7[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C47S3551C7__A1__7S3551C2[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C2[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C8__7S3551C2[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C2[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__8S3551C10__7S3551C2[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
};
static  VTT_ENTRY vtt_S3551C2[] = {
  {&(_ZTV7S3551C2[7]),  7,46},
  {&(_tg__ZTV7S3551C3__7S3551C2[7]),  7,9},
  {&(_tg__ZTV7S3551C67S3551C3__7S3551C2[7]),  7,9},
  {&(_tg__ZTV7S3551C7__7S3551C67S3551C3__7S3551C2[6]),  6,9},
  {&(_tg__ZTV7S3551C8__7S3551C67S3551C3__7S3551C2[7]),  7,10},
  {&(_tg__ZTV8S3551C10__7S3551C67S3551C3__7S3551C2[6]),  6,8},
  {&(_tg__ZTV7S3551C4__A1__7S3551C67S3551C3__7S3551C2[3]),  3,3},
  {&(_tg__ZTV8S3551C107S3551C3__A1__7S3551C2[4]),  4,6},
  {&(_tg__ZTV7S3551C4__8S3551C107S3551C3__A1__7S3551C2[3]),  3,3},
  {&(_tg__ZTV7S3551C4__7S3551C3__7S3551C2[3]),  3,3},
  {&(_tg__ZTV7S3551C7__7S3551C3__7S3551C2[6]),  6,9},
  {&(_tg__ZTV7S3551C8__7S3551C3__7S3551C2[7]),  7,10},
  {&(_tg__ZTV8S3551C10__7S3551C3__7S3551C2[6]),  6,8},
  {&(_tg__ZTV8S3551C10__A__7S3551C3__7S3551C2[4]),  4,6},
  {&(_ZTV7S3551C2[19]),  19,46},
  {&(_ZTV7S3551C2[25]),  25,46},
  {&(_ZTV7S3551C2[35]),  35,46},
  {&(_ZTV7S3551C2[44]),  44,46},
  {&(_ZTV7S3551C2[14]),  14,46},
  {&(_tg__ZTV7S3551C4__7S3551C2[3]),  3,3},
  {&(_tg__ZTV7S3551C7__7S3551C2[3]),  3,6},
  {&(_tg__ZTV7S3551C47S3551C7__A1__7S3551C2[3]),  3,3},
  {&(_tg__ZTV7S3551C8__7S3551C2[4]),  4,7},
  {&(_tg__ZTV7S3551C7__7S3551C8__7S3551C2[6]),  6,9},
  {&(_tg__ZTV8S3551C10__7S3551C2[4]),  4,6},
  {&(_tg__ZTV7S3551C4__8S3551C10__7S3551C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3551C2[];
extern  VTBL_ENTRY _ZTV7S3551C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C2[];
Class_Descriptor cd_S3551C2 = {  "S3551C2", // class name
  bases_S3551C2, 9,
  &(vtc_S3551C2[0]), // expected_vtbl_contents
  &(vtt_S3551C2[0]), // expected_vtt_contents
  ABISELECT(2512,1752), // object size
  NSPAIRA(_ZTI7S3551C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3551C2),46, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3551C2),26, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3551C1  : S3551C2 {
  short s3551c1f0;
  void *s3551c1f1;
  __tsi64 s3551c1f2;
  int s3551c1f3[8];
  ::S20677C3 s3551c1f4;
  int s3551c1f5;
  __tsi64 s3551c1f6;
  long s3551c1f7;
  int s3551c1f8;
  void *s3551c1f9;
  ::S3551C6 s3551c1f10;
  ~S3551C1(); // tgen
  S3551C1(); // tgen
};
//SIG(1 S3551C1) C1{ BC2{ BC3{ VBC4{ VBC5{ m Fp FL[4] Fs} FD Fi FC5 FC5} BC6{ VBC7{ VBC5 BC4 v1 v2 v3 Fs FL Fc Fi[2] FC4 Fp FL Fi FL Fi} VBC8{ VBC5 VBC7 v4 v5 v6 FL FC9{} Fp Fc[2] FC5 Fl FC9} VBC10{ VBC5 VBC4 v7 v8 Fi FC4 FL Fi Fp} v9 v10 FC9 FC9 Fi FC4 FC9 FC9 FC11{ v12 FC9 FC12{ VBC5 FD Fi FC5 FC5} FC9 FL FC9 Fp FC9 Fp[2] FC9} FC8 Fp FC9} BC10 Fi Fc:2 FC9 Fi} v11 Fi FC9 Fs Fl FC4 Fl} Fs Fp FL Fi[8] FC5 Fi FL Fl Fi Fp FC6}


S3551C1 ::~S3551C1(){ note_dtor("S3551C1", this);} // tgen
S3551C1 ::S3551C1(){ note_ctor("S3551C1", this);} // tgen

static void Test_S3551C1()
{
  extern Class_Descriptor cd_S3551C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(294,822)];
    init_test(&cd_S3551C1, buf);
    S3551C1 *dp, &lv = *(dp=new (buf) S3551C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4688,3284), "sizeof(S3551C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3551C1)");
    /*is_ambiguous_... S3551C1::S3551C4 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C4*), ABISELECT(3880,2716), "S3551C1");
    check_base_class_offset(lv, (S20677C3*)(S3551C7*), ABISELECT(3880,2716), "S3551C1");
    check_base_class_offset(lv, (S20677C3*)(S3551C4*)(S3551C7*), ABISELECT(3880,2716), "S3551C1");
    check_base_class_offset(lv, (S20677C3*)(S3551C8*), ABISELECT(3880,2716), "S3551C1");
    /*is_ambiguous_... S3551C1::S3551C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C10*), ABISELECT(3880,2716), "S3551C1");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S20677C3*)(S3551C10*)(S3551C3*)(S3551C2*), ABISELECT(3880,2716), "S3551C1");
    /*is_ambiguous_... S3551C3::S3551C4 */ AMB_check_base_class_offset(lv, (S3551C4*)(S3551C3*)(S3551C2*), ABISELECT(3744,2616), "S3551C1");
    /*is_ambiguous_... S3551C1::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C4*)(S3551C10*), ABISELECT(3744,2616), "S3551C1");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C4*)(S3551C10*)(S3551C3*)(S3551C2*), ABISELECT(3744,2616), "S3551C1");
    check_base_class_offset(lv, (S3551C4*)(S3551C7*), ABISELECT(3936,2756), "S3551C1");
    check_base_class_offset(lv, (S3551C7*)(S3551C6*)(S3551C3*)(S3551C2*), ABISELECT(3936,2756), "S3551C1");
    check_base_class_offset(lv, (S3551C7*)(S3551C8*), ABISELECT(3936,2756), "S3551C1");
    check_base_class_offset(lv, (S3551C8*)(S3551C6*)(S3551C3*)(S3551C2*), ABISELECT(4344,3048), "S3551C1");
    check_base_class_offset(lv, (S3551C10*)(S3551C6*)(S3551C3*)(S3551C2*), ABISELECT(4448,3120), "S3551C1");
    check_base_class_offset(lv, (S3551C6*)(S3551C3*)(S3551C2*), 0, "S3551C1");
    /*is_ambiguous_... S3551C3::S3551C10 */ AMB_check_base_class_offset(lv, (S3551C10*)(S3551C3*)(S3551C2*), ABISELECT(1088,752), "S3551C1");
    check_base_class_offset(lv, (S3551C3*)(S3551C2*), 0, "S3551C1");
    check_base_class_offset(lv, (S3551C2*), 0, "S3551C1");
    check_field_offset(lv, s3551c1f0, ABISELECT(1560,1084), "S3551C1.s3551c1f0");
    check_field_offset(lv, s3551c1f1, ABISELECT(1568,1088), "S3551C1.s3551c1f1");
    check_field_offset(lv, s3551c1f2, ABISELECT(1576,1092), "S3551C1.s3551c1f2");
    check_field_offset(lv, s3551c1f3, ABISELECT(1584,1100), "S3551C1.s3551c1f3");
    check_field_offset(lv, s3551c1f4, ABISELECT(1616,1132), "S3551C1.s3551c1f4");
    check_field_offset(lv, s3551c1f5, ABISELECT(1664,1172), "S3551C1.s3551c1f5");
    check_field_offset(lv, s3551c1f6, ABISELECT(1672,1176), "S3551C1.s3551c1f6");
    check_field_offset(lv, s3551c1f7, ABISELECT(1680,1184), "S3551C1.s3551c1f7");
    check_field_offset(lv, s3551c1f8, ABISELECT(1688,1188), "S3551C1.s3551c1f8");
    check_field_offset(lv, s3551c1f9, ABISELECT(1696,1192), "S3551C1.s3551c1f9");
    check_field_offset(lv, s3551c1f10, ABISELECT(1712,1196), "S3551C1.s3551c1f10");
    test_class_info(&lv, &cd_S3551C1);
    dp->~S3551C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3551C1(Test_S3551C1, "S3551C1", ABISELECT(4688,3284));

#else // __cplusplus

extern void _ZN7S3551C1C1Ev();
extern void _ZN7S3551C1D1Ev();
Name_Map name_map_S3551C1[] = {
  NSPAIR(_ZN7S3551C1C1Ev),
  NSPAIR(_ZN7S3551C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20677C3;
extern VTBL_ENTRY _ZTI8S20677C3[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C4;
extern VTBL_ENTRY _ZTI7S3551C4[];
extern  VTBL_ENTRY _ZTV7S3551C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C4[];
extern Class_Descriptor cd_S3551C7;
extern VTBL_ENTRY _ZTI7S3551C7[];
extern  VTBL_ENTRY _ZTV7S3551C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C7[];
extern Class_Descriptor cd_S3551C8;
extern VTBL_ENTRY _ZTI7S3551C8[];
extern  VTBL_ENTRY _ZTV7S3551C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C8[];
extern Class_Descriptor cd_S3551C10;
extern VTBL_ENTRY _ZTI8S3551C10[];
extern  VTBL_ENTRY _ZTV8S3551C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3551C10[];
extern Class_Descriptor cd_S3551C6;
extern VTBL_ENTRY _ZTI7S3551C6[];
extern  VTBL_ENTRY _ZTV7S3551C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C6[];
extern Class_Descriptor cd_S3551C10;
extern VTBL_ENTRY _ZTI8S3551C10[];
extern  VTBL_ENTRY _ZTV8S3551C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3551C10[];
extern Class_Descriptor cd_S3551C3;
extern VTBL_ENTRY _ZTI7S3551C3[];
extern  VTBL_ENTRY _ZTV7S3551C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C3[];
extern Class_Descriptor cd_S3551C2;
extern VTBL_ENTRY _ZTI7S3551C2[];
extern  VTBL_ENTRY _ZTV7S3551C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C2[];
static Base_Class bases_S3551C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20677C3,    ABISELECT(3880,2716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3551C4,    ABISELECT(3744,2616), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3551C4,    ABISELECT(3936,2756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3551C7,    ABISELECT(3936,2756), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3551C8,    ABISELECT(4344,3048), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3551C10,    ABISELECT(4448,3120), //bcp->offset
    38, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3551C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3551C10,    ABISELECT(1088,752), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3551C3,    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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3551C2,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3551C1[];
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
extern void _ZN7S3551C23v11Ev();
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY vtc_S3551C1[] = {
  ABISELECT(3744,2616),
  ABISELECT(4448,3120),
  ABISELECT(4344,3048),
  ABISELECT(3880,2716),
  ABISELECT(3936,2756),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C1[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3551C23v11Ev,
  ABISELECT(2656,1864),
  ABISELECT(2792,1964),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3551C1[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
  ABISELECT(136,100),
  ABISELECT(-3744,-2616),
  (VTBL_ENTRY)&(_ZTI7S3551C1[0]),
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3936,-2756),
  (VTBL_ENTRY)&(_ZTI7S3551C1[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-4344,-3048),
  (VTBL_ENTRY)&(_ZTI7S3551C1[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-4448,-3120),
  (VTBL_ENTRY)&(_ZTI7S3551C1[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
extern VTBL_ENTRY _ZTV7S3551C1[];
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
extern void _ZN7S3551C23v11Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C2__7S3551C1[] = {
  ABISELECT(3744,2616),
  ABISELECT(4448,3120),
  ABISELECT(4344,3048),
  ABISELECT(3880,2716),
  ABISELECT(3936,2756),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3551C23v11Ev,
};
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C37S3551C2__7S3551C1[] = {
  ABISELECT(3744,2616),
  ABISELECT(4448,3120),
  ABISELECT(4344,3048),
  ABISELECT(3880,2716),
  ABISELECT(3936,2756),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
};
extern void _ZN7S3551C62v9Ev();
extern void _ZN7S3551C63v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C67S3551C37S3551C2__7S3551C1[] = {
  ABISELECT(3744,2616),
  ABISELECT(4448,3120),
  ABISELECT(4344,3048),
  ABISELECT(3880,2716),
  ABISELECT(3936,2756),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C62v9Ev,
  (VTBL_ENTRY)&_ZN7S3551C63v10Ev,
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C67S3551C37S3551C2__7S3551C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3936,-2756),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C67S3551C37S3551C2__7S3551C1[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-4344,-3048),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C67S3551C37S3551C2__7S3551C1[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-4448,-3120),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__A1__7S3551C67S3551C37S3551C2__7S3551C1[] = {
  ABISELECT(136,100),
  ABISELECT(-3744,-2616),
  (VTBL_ENTRY)&(_ZTI7S3551C6[0]),
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C107S3551C37S3551C2__A1__7S3551C1[] = {
  ABISELECT(2656,1864),
  ABISELECT(2792,1964),
  0,
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__8S3551C107S3551C37S3551C2__A1__7S3551C1[] = {
  ABISELECT(136,100),
  ABISELECT(-2656,-1864),
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__7S3551C37S3551C2__7S3551C1[] = {
  ABISELECT(136,100),
  ABISELECT(-3744,-2616),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C37S3551C2__7S3551C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3936,-2756),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C37S3551C2__7S3551C1[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-4344,-3048),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C37S3551C2__7S3551C1[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-4448,-3120),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__A__7S3551C37S3551C2__7S3551C1[] = {
  ABISELECT(2656,1864),
  ABISELECT(2792,1964),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3551C3[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__7S3551C2__7S3551C1[] = {
  ABISELECT(136,100),
  ABISELECT(-3744,-2616),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C2__7S3551C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(-3936,-2756),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C2__7S3551C1[] = {
  0,
  0,
  0,
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  ABISELECT(-4344,-3048),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C2__7S3551C1[] = {
  0,
  0,
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  ABISELECT(-4448,-3120),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C107S3551C3__A1__7S3551C2__7S3551C1[] = {
  ABISELECT(2656,1864),
  ABISELECT(2792,1964),
  ABISELECT(-1088,-752),
  (VTBL_ENTRY)&(_ZTI7S3551C2[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__7S3551C1[] = {
  ABISELECT(136,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C7[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C47S3551C7__A1__7S3551C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C4[0]),
};
extern void _ZN7S3551C82v4Ev();
extern void _ZN7S3551C82v5Ev();
extern void _ZN7S3551C82v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C8__7S3551C1[] = {
  ABISELECT(-408,-292),
  ABISELECT(-464,-332),
  0,
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v5Ev,
  (VTBL_ENTRY)&_ZN7S3551C82v6Ev,
};
extern void _ZN7S3551C72v1Ev();
extern void _ZN7S3551C72v2Ev();
extern void _ZN7S3551C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3551C7__7S3551C8__7S3551C1[] = {
  0,
  0,
  0,
  ABISELECT(-56,-40),
  ABISELECT(408,292),
  (VTBL_ENTRY)&(_ZTI7S3551C8[0]),
  (VTBL_ENTRY)&_ZN7S3551C72v1Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v2Ev,
  (VTBL_ENTRY)&_ZN7S3551C72v3Ev,
};
extern void _ZN8S3551C102v7Ev();
extern void _ZN8S3551C102v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3551C10__7S3551C1[] = {
  ABISELECT(-704,-504),
  ABISELECT(-568,-404),
  0,
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
  (VTBL_ENTRY)&_ZN8S3551C102v7Ev,
  (VTBL_ENTRY)&_ZN8S3551C102v8Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3551C4__8S3551C10__7S3551C1[] = {
  ABISELECT(136,100),
  ABISELECT(704,504),
  (VTBL_ENTRY)&(_ZTI8S3551C10[0]),
};
static  VTT_ENTRY vtt_S3551C1[] = {
  {&(_ZTV7S3551C1[7]),  7,46},
  {&(_tg__ZTV7S3551C2__7S3551C1[7]),  7,10},
  {&(_tg__ZTV7S3551C37S3551C2__7S3551C1[7]),  7,9},
  {&(_tg__ZTV7S3551C67S3551C37S3551C2__7S3551C1[7]),  7,9},
  {&(_tg__ZTV7S3551C7__7S3551C67S3551C37S3551C2__7S3551C1[6]),  6,9},
  {&(_tg__ZTV7S3551C8__7S3551C67S3551C37S3551C2__7S3551C1[7]),  7,10},
  {&(_tg__ZTV8S3551C10__7S3551C67S3551C37S3551C2__7S3551C1[6]),  6,8},
  {&(_tg__ZTV7S3551C4__A1__7S3551C67S3551C37S3551C2__7S3551C1[3]),  3,3},
  {&(_tg__ZTV8S3551C107S3551C37S3551C2__A1__7S3551C1[4]),  4,6},
  {&(_tg__ZTV7S3551C4__8S3551C107S3551C37S3551C2__A1__7S3551C1[3]),  3,3},
  {&(_tg__ZTV7S3551C4__7S3551C37S3551C2__7S3551C1[3]),  3,3},
  {&(_tg__ZTV7S3551C7__7S3551C37S3551C2__7S3551C1[6]),  6,9},
  {&(_tg__ZTV7S3551C8__7S3551C37S3551C2__7S3551C1[7]),  7,10},
  {&(_tg__ZTV8S3551C10__7S3551C37S3551C2__7S3551C1[6]),  6,8},
  {&(_tg__ZTV8S3551C10__A__7S3551C37S3551C2__7S3551C1[4]),  4,6},
  {&(_tg__ZTV7S3551C4__7S3551C2__7S3551C1[3]),  3,3},
  {&(_tg__ZTV7S3551C7__7S3551C2__7S3551C1[6]),  6,9},
  {&(_tg__ZTV7S3551C8__7S3551C2__7S3551C1[7]),  7,10},
  {&(_tg__ZTV8S3551C10__7S3551C2__7S3551C1[6]),  6,8},
  {&(_tg__ZTV8S3551C107S3551C3__A1__7S3551C2__7S3551C1[4]),  4,6},
  {&(_ZTV7S3551C1[19]),  19,46},
  {&(_ZTV7S3551C1[25]),  25,46},
  {&(_ZTV7S3551C1[35]),  35,46},
  {&(_ZTV7S3551C1[44]),  44,46},
  {&(_ZTV7S3551C1[14]),  14,46},
  {&(_tg__ZTV7S3551C4__7S3551C1[3]),  3,3},
  {&(_tg__ZTV7S3551C7__7S3551C1[3]),  3,6},
  {&(_tg__ZTV7S3551C47S3551C7__A1__7S3551C1[3]),  3,3},
  {&(_tg__ZTV7S3551C8__7S3551C1[4]),  4,7},
  {&(_tg__ZTV7S3551C7__7S3551C8__7S3551C1[6]),  6,9},
  {&(_tg__ZTV8S3551C10__7S3551C1[4]),  4,6},
  {&(_tg__ZTV7S3551C4__8S3551C10__7S3551C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S3551C1[];
extern  VTBL_ENTRY _ZTV7S3551C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3551C1[];
Class_Descriptor cd_S3551C1 = {  "S3551C1", // class name
  bases_S3551C1, 10,
  &(vtc_S3551C1[0]), // expected_vtbl_contents
  &(vtt_S3551C1[0]), // expected_vtt_contents
  ABISELECT(4688,3284), // object size
  NSPAIRA(_ZTI7S3551C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3551C1),46, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3551C1),32, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6705C2  {
  virtual void  v3(); // _ZN7S6705C22v3Ev
  virtual void  v4(); // _ZN7S6705C22v4Ev
  virtual void  v5(); // _ZN7S6705C22v5Ev
  ~S6705C2(); // tgen
  S6705C2(); // tgen
};
//SIG(-1 S6705C2) C1{ v1 v2 v3}


void  S6705C2 ::v3(){vfunc_called(this, "_ZN7S6705C22v3Ev");}
void  S6705C2 ::v4(){vfunc_called(this, "_ZN7S6705C22v4Ev");}
void  S6705C2 ::v5(){vfunc_called(this, "_ZN7S6705C22v5Ev");}
S6705C2 ::~S6705C2(){ note_dtor("S6705C2", this);} // tgen
S6705C2 ::S6705C2(){ note_ctor("S6705C2", this);} // tgen

static void Test_S6705C2()
{
  extern Class_Descriptor cd_S6705C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6705C2, buf);
    S6705C2 *dp, &lv = *(dp=new (buf) S6705C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6705C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C2)");
    test_class_info(&lv, &cd_S6705C2);
    dp->~S6705C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C2(Test_S6705C2, "S6705C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6705C2C1Ev();
extern void _ZN7S6705C2D1Ev();
Name_Map name_map_S6705C2[] = {
  NSPAIR(_ZN7S6705C2C1Ev),
  NSPAIR(_ZN7S6705C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6705C2[];
extern void _ZN7S6705C22v3Ev();
extern void _ZN7S6705C22v4Ev();
extern void _ZN7S6705C22v5Ev();
static  VTBL_ENTRY vtc_S6705C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C2[0]),
  (VTBL_ENTRY)&_ZN7S6705C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6705C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6705C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S6705C2[];
extern  VTBL_ENTRY _ZTV7S6705C2[];
Class_Descriptor cd_S6705C2 = {  "S6705C2", // class name
  0,0,//no base classes
  &(vtc_S6705C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6705C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6705C2),5, //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  S6705C4  {
  void *s6705c4f0[4];
  virtual void  v6(); // _ZN7S6705C42v6Ev
  virtual void  v7(); // _ZN7S6705C42v7Ev
  virtual void  v8(); // _ZN7S6705C42v8Ev
  virtual void  v9(); // _ZN7S6705C42v9Ev
  virtual void  v10(); // _ZN7S6705C43v10Ev
  virtual void  v11(); // _ZN7S6705C43v11Ev
  ~S6705C4(); // tgen
  S6705C4(); // tgen
};
//SIG(-1 S6705C4) C1{ v1 v2 v3 v4 v5 v6 Fp[4]}


void  S6705C4 ::v6(){vfunc_called(this, "_ZN7S6705C42v6Ev");}
void  S6705C4 ::v7(){vfunc_called(this, "_ZN7S6705C42v7Ev");}
void  S6705C4 ::v8(){vfunc_called(this, "_ZN7S6705C42v8Ev");}
void  S6705C4 ::v9(){vfunc_called(this, "_ZN7S6705C42v9Ev");}
void  S6705C4 ::v10(){vfunc_called(this, "_ZN7S6705C43v10Ev");}
void  S6705C4 ::v11(){vfunc_called(this, "_ZN7S6705C43v11Ev");}
S6705C4 ::~S6705C4(){ note_dtor("S6705C4", this);} // tgen
S6705C4 ::S6705C4(){ note_ctor("S6705C4", this);} // tgen

static void Test_S6705C4()
{
  extern Class_Descriptor cd_S6705C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6705C4, buf);
    S6705C4 *dp, &lv = *(dp=new (buf) S6705C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6705C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C4)");
    check_field_offset(lv, s6705c4f0, ABISELECT(8,4), "S6705C4.s6705c4f0");
    test_class_info(&lv, &cd_S6705C4);
    dp->~S6705C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C4(Test_S6705C4, "S6705C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6705C4C1Ev();
extern void _ZN7S6705C4D1Ev();
Name_Map name_map_S6705C4[] = {
  NSPAIR(_ZN7S6705C4C1Ev),
  NSPAIR(_ZN7S6705C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6705C4[];
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
static  VTBL_ENTRY vtc_S6705C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C4[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
};
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
Class_Descriptor cd_S6705C4 = {  "S6705C4", // class name
  0,0,//no base classes
  &(vtc_S6705C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6705C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6705C4),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  S6705C3  : S6705C4 {
  __tsi64 s6705c3f0;
  virtual  ~S6705C3(); // _ZN7S6705C3D1Ev
  virtual void  v12(); // _ZN7S6705C33v12Ev
  virtual void  v13(); // _ZN7S6705C33v13Ev
  S6705C3(); // tgen
};
//SIG(-1 S6705C3) C1{ BC2{ v3 v4 v5 v6 v7 v8 Fp[4]} vd v1 v2 FL}


 S6705C3 ::~S6705C3(){ note_dtor("S6705C3", this);}
void  S6705C3 ::v12(){vfunc_called(this, "_ZN7S6705C33v12Ev");}
void  S6705C3 ::v13(){vfunc_called(this, "_ZN7S6705C33v13Ev");}
S6705C3 ::S6705C3(){ note_ctor("S6705C3", this);} // tgen

static void Test_S6705C3()
{
  extern Class_Descriptor cd_S6705C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S6705C3, buf);
    S6705C3 *dp, &lv = *(dp=new (buf) S6705C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S6705C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C3)");
    check_base_class_offset(lv, (S6705C4*), 0, "S6705C3");
    check_field_offset(lv, s6705c3f0, ABISELECT(40,20), "S6705C3.s6705c3f0");
    test_class_info(&lv, &cd_S6705C3);
    dp->~S6705C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C3(Test_S6705C3, "S6705C3", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S6705C3C1Ev();
extern void _ZN7S6705C3D1Ev();
Name_Map name_map_S6705C3[] = {
  NSPAIR(_ZN7S6705C3C1Ev),
  NSPAIR(_ZN7S6705C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
static Base_Class bases_S6705C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6705C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S6705C3[];
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C3D1Ev();
extern void _ZN7S6705C3D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY vtc_S6705C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C3[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6705C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
Class_Descriptor cd_S6705C3 = {  "S6705C3", // class name
  bases_S6705C3, 1,
  &(vtc_S6705C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S6705C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6705C3),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  S6705C8  {
  int s6705c8f0;
  virtual void  v14(); // _ZN7S6705C83v14Ev
  ~S6705C8(); // tgen
  S6705C8(); // tgen
};
//SIG(-1 S6705C8) C1{ v1 Fi}


void  S6705C8 ::v14(){vfunc_called(this, "_ZN7S6705C83v14Ev");}
S6705C8 ::~S6705C8(){ note_dtor("S6705C8", this);} // tgen
S6705C8 ::S6705C8(){ note_ctor("S6705C8", this);} // tgen

static void Test_S6705C8()
{
  extern Class_Descriptor cd_S6705C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6705C8, buf);
    S6705C8 *dp, &lv = *(dp=new (buf) S6705C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6705C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C8)");
    check_field_offset(lv, s6705c8f0, ABISELECT(8,4), "S6705C8.s6705c8f0");
    test_class_info(&lv, &cd_S6705C8);
    dp->~S6705C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C8(Test_S6705C8, "S6705C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6705C8C1Ev();
extern void _ZN7S6705C8D1Ev();
Name_Map name_map_S6705C8[] = {
  NSPAIR(_ZN7S6705C8C1Ev),
  NSPAIR(_ZN7S6705C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6705C8[];
extern void _ZN7S6705C83v14Ev();
static  VTBL_ENTRY vtc_S6705C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C8[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
};
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
Class_Descriptor cd_S6705C8 = {  "S6705C8", // class name
  0,0,//no base classes
  &(vtc_S6705C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6705C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6705C8),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  S6705C9  {
  short s6705c9f0:16;
  __tsi64 s6705c9f1;
  void *s6705c9f2[8];
  virtual void  v15(); // _ZN7S6705C93v15Ev
  virtual void  v16(); // _ZN7S6705C93v16Ev
  ~S6705C9(); // tgen
  S6705C9(); // tgen
};
//SIG(-1 S6705C9) C1{ v1 v2 Fs:16 FL Fp[8]}


void  S6705C9 ::v15(){vfunc_called(this, "_ZN7S6705C93v15Ev");}
void  S6705C9 ::v16(){vfunc_called(this, "_ZN7S6705C93v16Ev");}
S6705C9 ::~S6705C9(){ note_dtor("S6705C9", this);} // tgen
S6705C9 ::S6705C9(){ note_ctor("S6705C9", this);} // tgen

static void Test_S6705C9()
{
  extern Class_Descriptor cd_S6705C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S6705C9, buf);
    S6705C9 *dp, &lv = *(dp=new (buf) S6705C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S6705C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C9)");
    set_bf_and_test(lv, s6705c9f0, ABISELECT(8,4), 0, 16, 1, "S6705C9");
    set_bf_and_test(lv, s6705c9f0, ABISELECT(8,4), 0, 16, hide_sll(1LL<<15), "S6705C9");
    check_field_offset(lv, s6705c9f1, ABISELECT(16,8), "S6705C9.s6705c9f1");
    check_field_offset(lv, s6705c9f2, ABISELECT(24,16), "S6705C9.s6705c9f2");
    test_class_info(&lv, &cd_S6705C9);
    dp->~S6705C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C9(Test_S6705C9, "S6705C9", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN7S6705C9C1Ev();
extern void _ZN7S6705C9D1Ev();
Name_Map name_map_S6705C9[] = {
  NSPAIR(_ZN7S6705C9C1Ev),
  NSPAIR(_ZN7S6705C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6705C9[];
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
static  VTBL_ENTRY vtc_S6705C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C9[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
};
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
Class_Descriptor cd_S6705C9 = {  "S6705C9", // class name
  0,0,//no base classes
  &(vtc_S6705C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI7S6705C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6705C9),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  S6705C10  {
  virtual void  v17(); // _ZN8S6705C103v17Ev
  ~S6705C10(); // tgen
  S6705C10(); // tgen
};
//SIG(-1 S6705C10) C1{ v1}


void  S6705C10 ::v17(){vfunc_called(this, "_ZN8S6705C103v17Ev");}
S6705C10 ::~S6705C10(){ note_dtor("S6705C10", this);} // tgen
S6705C10 ::S6705C10(){ note_ctor("S6705C10", this);} // tgen

static void Test_S6705C10()
{
  extern Class_Descriptor cd_S6705C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6705C10, buf);
    S6705C10 *dp, &lv = *(dp=new (buf) S6705C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6705C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C10)");
    test_class_info(&lv, &cd_S6705C10);
    dp->~S6705C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C10(Test_S6705C10, "S6705C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S6705C10C1Ev();
extern void _ZN8S6705C10D1Ev();
Name_Map name_map_S6705C10[] = {
  NSPAIR(_ZN8S6705C10C1Ev),
  NSPAIR(_ZN8S6705C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S6705C10[];
extern void _ZN8S6705C103v17Ev();
static  VTBL_ENTRY vtc_S6705C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6705C10[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
};
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
Class_Descriptor cd_S6705C10 = {  "S6705C10", // class name
  0,0,//no base classes
  &(vtc_S6705C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S6705C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S6705C10),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  S6705C7  : S6705C8 , S6705C9 , S6705C10 , virtual S6705C3 , S6705C4 {
  int s6705c7f0;
  virtual  ~S6705C7(); // _ZN7S6705C7D2Ev
  virtual void  v18(); // _ZN7S6705C73v18Ev
  virtual void  v19(); // _ZN7S6705C73v19Ev
  virtual void  v20(); // _ZN7S6705C73v20Ev
  S6705C7(); // tgen
};
//SIG(-1 S6705C7) C1{ BC2{ v4 Fi} BC3{ v5 v6 Fs:16 FL Fp[8]} BC4{ v7} VBC5{ BC6{ v8 v9 v10 v11 v12 v13 Fp[4]} vd v14 v15 FL} BC6 vd v1 v2 v3 Fi}


 S6705C7 ::~S6705C7(){ note_dtor("S6705C7", this);}
void  S6705C7 ::v18(){vfunc_called(this, "_ZN7S6705C73v18Ev");}
void  S6705C7 ::v19(){vfunc_called(this, "_ZN7S6705C73v19Ev");}
void  S6705C7 ::v20(){vfunc_called(this, "_ZN7S6705C73v20Ev");}
S6705C7 ::S6705C7(){ note_ctor("S6705C7", this);} // tgen

static void Test_S6705C7()
{
  extern Class_Descriptor cd_S6705C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,29)];
    init_test(&cd_S6705C7, buf);
    S6705C7 *dp, &lv = *(dp=new (buf) S6705C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,112), "sizeof(S6705C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C7)");
    check_base_class_offset(lv, (S6705C8*), 0, "S6705C7");
    check_base_class_offset(lv, (S6705C9*), ABISELECT(16,8), "S6705C7");
    check_base_class_offset(lv, (S6705C10*), ABISELECT(104,56), "S6705C7");
    check_base_class_offset(lv, (S6705C4*)(S6705C3*), ABISELECT(160,84), "S6705C7");
    check_base_class_offset(lv, (S6705C3*), ABISELECT(160,84), "S6705C7");
    /*is_ambiguous_... S6705C7::S6705C4 */ AMB_check_base_class_offset(lv, (S6705C4*), ABISELECT(112,60), "S6705C7");
    check_field_offset(lv, s6705c7f0, ABISELECT(152,80), "S6705C7.s6705c7f0");
    test_class_info(&lv, &cd_S6705C7);
    dp->~S6705C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C7(Test_S6705C7, "S6705C7", ABISELECT(208,112));

#else // __cplusplus

extern void _ZN7S6705C7C1Ev();
extern void _ZN7S6705C7D2Ev();
Name_Map name_map_S6705C7[] = {
  NSPAIR(_ZN7S6705C7C1Ev),
  NSPAIR(_ZN7S6705C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
static Base_Class bases_S6705C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6705C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6705C9,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_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_S6705C10,    ABISELECT(104,56), //bcp->offset
    13, //bcp->virtual_function_table_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_S6705C4,    ABISELECT(160,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6705C3,    ABISELECT(160,84), //bcp->offset
    24, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6705C4,    ABISELECT(112,60), //bcp->offset
    16, //bcp->virtual_function_table_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 _ZTI7S6705C7[];
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZThn160_N7S6705C7D1Ev,_ZThn84_N7S6705C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void ABISELECT(_ZThn160_N7S6705C7D0Ev,_ZThn84_N7S6705C7D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY vtc_S6705C7[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern VTBL_ENTRY _ZTV7S6705C7[];
static  VTT_ENTRY vtt_S6705C7[] = {
  {&(_ZTV7S6705C7[3]),  3,45},
  {&(_ZTV7S6705C7[35]),  35,45},
};
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S6705C7D0Ev,_ZThn84_N7S6705C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S6705C7D1Ev,_ZThn84_N7S6705C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6705C7 = {  "S6705C7", // class name
  bases_S6705C7, 6,
  &(vtc_S6705C7[0]), // expected_vtbl_contents
  &(vtt_S6705C7[0]), // expected_vtt_contents
  ABISELECT(208,112), // object size
  NSPAIRA(_ZTI7S6705C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6705C7),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6705C7),2, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6705C6  : S6705C7 {
  int s6705c6f0[7];
  virtual void  v21(); // _ZN7S6705C63v21Ev
  virtual void  v22(); // _ZN7S6705C63v22Ev
  virtual void  v23(); // _ZN7S6705C63v23Ev
  virtual void  v24(); // _ZN7S6705C63v24Ev
  ~S6705C6(); // tgen
  S6705C6(); // tgen
};
//SIG(-1 S6705C6) C1{ BC2{ BC3{ v5 Fi} BC4{ v6 v7 Fs:16 FL Fp[8]} BC5{ v8} VBC6{ BC7{ v9 v10 v11 v12 v13 v14 Fp[4]} vd v15 v16 FL} BC7 vd v17 v18 v19 Fi} v1 v2 v3 v4 Fi[7]}


void  S6705C6 ::v21(){vfunc_called(this, "_ZN7S6705C63v21Ev");}
void  S6705C6 ::v22(){vfunc_called(this, "_ZN7S6705C63v22Ev");}
void  S6705C6 ::v23(){vfunc_called(this, "_ZN7S6705C63v23Ev");}
void  S6705C6 ::v24(){vfunc_called(this, "_ZN7S6705C63v24Ev");}
S6705C6 ::~S6705C6(){ note_dtor("S6705C6", this);} // tgen
S6705C6 ::S6705C6(){ note_ctor("S6705C6", this);} // tgen

static void Test_S6705C6()
{
  extern Class_Descriptor cd_S6705C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,36)];
    init_test(&cd_S6705C6, buf);
    S6705C6 *dp, &lv = *(dp=new (buf) S6705C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,140), "sizeof(S6705C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C6)");
    check_base_class_offset(lv, (S6705C8*)(S6705C7*), 0, "S6705C6");
    check_base_class_offset(lv, (S6705C9*)(S6705C7*), ABISELECT(16,8), "S6705C6");
    check_base_class_offset(lv, (S6705C10*)(S6705C7*), ABISELECT(104,56), "S6705C6");
    check_base_class_offset(lv, (S6705C4*)(S6705C3*), ABISELECT(184,112), "S6705C6");
    check_base_class_offset(lv, (S6705C3*)(S6705C7*), ABISELECT(184,112), "S6705C6");
    /*is_ambiguous_... S6705C7::S6705C4 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C7*), ABISELECT(112,60), "S6705C6");
    check_base_class_offset(lv, (S6705C7*), 0, "S6705C6");
    check_field_offset(lv, s6705c6f0, ABISELECT(156,84), "S6705C6.s6705c6f0");
    test_class_info(&lv, &cd_S6705C6);
    dp->~S6705C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C6(Test_S6705C6, "S6705C6", ABISELECT(232,140));

#else // __cplusplus

extern void _ZN7S6705C6C1Ev();
extern void _ZN7S6705C6D1Ev();
Name_Map name_map_S6705C6[] = {
  NSPAIR(_ZN7S6705C6C1Ev),
  NSPAIR(_ZN7S6705C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C7;
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
static Base_Class bases_S6705C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6705C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S6705C9,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_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_S6705C10,    ABISELECT(104,56), //bcp->offset
    17, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S6705C4,    ABISELECT(184,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
    4, //immediately_derived
  0, 0},
  {&cd_S6705C3,    ABISELECT(184,112), //bcp->offset
    28, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6705C4,    ABISELECT(112,60), //bcp->offset
    20, //bcp->virtual_function_table_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_S6705C7,    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 _ZTI7S6705C6[];
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C6D1Ev();
extern void _ZN7S6705C6D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev)();
extern void ABISELECT(_ZThn184_N7S6705C6D1Ev,_ZThn112_N7S6705C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev)();
extern void ABISELECT(_ZThn184_N7S6705C6D0Ev,_ZThn112_N7S6705C6D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY vtc_S6705C6[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern VTBL_ENTRY _ZTV7S6705C6[];
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C7__7S6705C6[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZThn184_N7S6705C7D1Ev,_ZThn112_N7S6705C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void ABISELECT(_ZThn184_N7S6705C7D0Ev,_ZThn112_N7S6705C7D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C7__7S6705C6[] = {
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
static  VTT_ENTRY vtt_S6705C6[] = {
  {&(_ZTV7S6705C6[3]),  3,49},
  {&(_tg__ZTV7S6705C7__7S6705C6[3]),  3,9},
  {&(_tg__ZTV7S6705C3__7S6705C7__7S6705C6[11]),  11,21},
  {&(_ZTV7S6705C6[39]),  39,49},
};
extern VTBL_ENTRY _ZTI7S6705C6[];
extern  VTBL_ENTRY _ZTV7S6705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C6[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C7D0Ev,_ZThn112_N7S6705C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C7D1Ev,_ZThn112_N7S6705C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C6D0Ev,_ZThn112_N7S6705C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C6D1Ev,_ZThn112_N7S6705C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6705C6 = {  "S6705C6", // class name
  bases_S6705C6, 7,
  &(vtc_S6705C6[0]), // expected_vtbl_contents
  &(vtt_S6705C6[0]), // expected_vtt_contents
  ABISELECT(232,140), // object size
  NSPAIRA(_ZTI7S6705C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6705C6),49, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6705C6),4, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6705C12  {
  ::S6705C10 s6705c12f0;
  int s6705c12f1;
  ::S1400C6 s6705c12f2[6];
  virtual void  v25(); // _ZN8S6705C123v25Ev
  virtual void  v26(); // _ZN8S6705C123v26Ev
  virtual void  v27(); // _ZN8S6705C123v27Ev
  virtual void  v28(); // _ZN8S6705C123v28Ev
  ~S6705C12(); // tgen
  S6705C12(); // tgen
};
//SIG(-1 S6705C12) C1{ v1 v2 v3 v4 FC2{ v5} Fi FU3{ m FL[4] FL}[6]}


void  S6705C12 ::v25(){vfunc_called(this, "_ZN8S6705C123v25Ev");}
void  S6705C12 ::v26(){vfunc_called(this, "_ZN8S6705C123v26Ev");}
void  S6705C12 ::v27(){vfunc_called(this, "_ZN8S6705C123v27Ev");}
void  S6705C12 ::v28(){vfunc_called(this, "_ZN8S6705C123v28Ev");}
S6705C12 ::~S6705C12(){ note_dtor("S6705C12", this);} // tgen
S6705C12 ::S6705C12(){ note_ctor("S6705C12", this);} // tgen

static void Test_S6705C12()
{
  extern Class_Descriptor cd_S6705C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,52)];
    init_test(&cd_S6705C12, buf);
    S6705C12 *dp, &lv = *(dp=new (buf) S6705C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,204), "sizeof(S6705C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C12)");
    check_field_offset(lv, s6705c12f0, ABISELECT(8,4), "S6705C12.s6705c12f0");
    check_field_offset(lv, s6705c12f1, ABISELECT(16,8), "S6705C12.s6705c12f1");
    check_field_offset(lv, s6705c12f2, ABISELECT(24,12), "S6705C12.s6705c12f2");
    test_class_info(&lv, &cd_S6705C12);
    dp->~S6705C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C12(Test_S6705C12, "S6705C12", ABISELECT(216,204));

#else // __cplusplus

extern void _ZN8S6705C12C1Ev();
extern void _ZN8S6705C12D1Ev();
Name_Map name_map_S6705C12[] = {
  NSPAIR(_ZN8S6705C12C1Ev),
  NSPAIR(_ZN8S6705C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S6705C12[];
extern void _ZN8S6705C123v25Ev();
extern void _ZN8S6705C123v26Ev();
extern void _ZN8S6705C123v27Ev();
extern void _ZN8S6705C123v28Ev();
static  VTBL_ENTRY vtc_S6705C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6705C12[0]),
  (VTBL_ENTRY)&_ZN8S6705C123v25Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v26Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v27Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v28Ev,
};
extern VTBL_ENTRY _ZTI8S6705C12[];
extern  VTBL_ENTRY _ZTV8S6705C12[];
Class_Descriptor cd_S6705C12 = {  "S6705C12", // class name
  0,0,//no base classes
  &(vtc_S6705C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,204), // object size
  NSPAIRA(_ZTI8S6705C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S6705C12),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6705C11  : virtual S6705C7 , virtual S6705C12 , S6705C3 , S6705C10 {
  virtual void  v29(); // _ZN8S6705C113v29Ev
  virtual void  v30(); // _ZN8S6705C113v30Ev
  virtual void  v31(); // _ZN8S6705C113v31Ev
  ~S6705C11(); // tgen
  S6705C11(); // tgen
};
//SIG(-1 S6705C11) C1{ VBC2{ BC3{ v4 Fi} BC4{ v5 v6 Fs:16 FL Fp[8]} BC5{ v7} VBC6{ BC7{ v8 v9 v10 v11 v12 v13 Fp[4]} vd v14 v15 FL} BC7 vd v16 v17 v18 Fi} VBC8{ v19 v20 v21 v22 FC5 Fi FU9{ m FL[4] FL}[6]} BC6 BC5 v1 v2 v3}


void  S6705C11 ::v29(){vfunc_called(this, "_ZN8S6705C113v29Ev");}
void  S6705C11 ::v30(){vfunc_called(this, "_ZN8S6705C113v30Ev");}
void  S6705C11 ::v31(){vfunc_called(this, "_ZN8S6705C113v31Ev");}
S6705C11 ::~S6705C11(){ note_dtor("S6705C11", this);} // tgen
S6705C11 ::S6705C11(){ note_ctor("S6705C11", this);} // tgen

static void Test_S6705C11()
{
  extern Class_Descriptor cd_S6705C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(61,88)];
    init_test(&cd_S6705C11, buf);
    S6705C11 *dp, &lv = *(dp=new (buf) S6705C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(480,348), "sizeof(S6705C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C11)");
    check_base_class_offset(lv, (S6705C8*)(S6705C7*), ABISELECT(56,32), "S6705C11");
    check_base_class_offset(lv, (S6705C9*)(S6705C7*), ABISELECT(72,40), "S6705C11");
    check_base_class_offset(lv, (S6705C10*)(S6705C7*), ABISELECT(160,88), "S6705C11");
    /*is_ambiguous_... S6705C11::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C3*), ABISELECT(216,116), "S6705C11");
    check_base_class_offset(lv, (S6705C3*)(S6705C7*), ABISELECT(216,116), "S6705C11");
    /*is_ambiguous_... S6705C7::S6705C4 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C7*), ABISELECT(168,92), "S6705C11");
    check_base_class_offset(lv, (S6705C7*), ABISELECT(56,32), "S6705C11");
    check_base_class_offset(lv, (S6705C12*), ABISELECT(264,144), "S6705C11");
    /*is_ambiguous_... S6705C11::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C3*), 0, "S6705C11");
    /*is_ambiguous_... S6705C11::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C3*), 0, "S6705C11");
    /*is_ambiguous_... S6705C11::S6705C10 */ AMB_check_base_class_offset(lv, (S6705C10*), ABISELECT(48,28), "S6705C11");
    test_class_info(&lv, &cd_S6705C11);
    dp->~S6705C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C11(Test_S6705C11, "S6705C11", ABISELECT(480,348));

#else // __cplusplus

extern void _ZN8S6705C11C1Ev();
extern void _ZN8S6705C11D1Ev();
Name_Map name_map_S6705C11[] = {
  NSPAIR(_ZN8S6705C11C1Ev),
  NSPAIR(_ZN8S6705C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C7;
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
extern Class_Descriptor cd_S6705C12;
extern VTBL_ENTRY _ZTI8S6705C12[];
extern  VTBL_ENTRY _ZTV8S6705C12[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
static Base_Class bases_S6705C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6705C8,    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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C9,    ABISELECT(72,40), //bcp->offset
    44, //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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(160,88), //bcp->offset
    48, //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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C4,    ABISELECT(216,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6705C3,    ABISELECT(216,116), //bcp->offset
    59, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6705C4,    ABISELECT(168,92), //bcp->offset
    51, //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C7,    ABISELECT(56,32), //bcp->offset
    21, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6705C12,    ABISELECT(264,144), //bcp->offset
    80, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6705C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6705C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S6705C10,    ABISELECT(48,28), //bcp->offset
    18, //bcp->virtual_function_table_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},
  {0}};
extern VTBL_ENTRY _ZTI8S6705C11[];
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C11D1Ev();
extern void _ZN8S6705C11D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C113v29Ev();
extern void _ZN8S6705C113v30Ev();
extern void _ZN8S6705C113v31Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev)();
extern void ABISELECT(_ZThn56_N8S6705C11D1Ev,_ZThn32_N8S6705C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev)();
extern void ABISELECT(_ZThn56_N8S6705C11D0Ev,_ZThn32_N8S6705C11D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev)();
extern void ABISELECT(_ZThn216_N8S6705C11D1Ev,_ZThn116_N8S6705C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev)();
extern void ABISELECT(_ZThn216_N8S6705C11D0Ev,_ZThn116_N8S6705C11D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C123v25Ev();
extern void _ZN8S6705C123v26Ev();
extern void _ZN8S6705C123v27Ev();
extern void _ZN8S6705C123v28Ev();
static  VTBL_ENTRY vtc_S6705C11[] = {
  ABISELECT(264,144),
  ABISELECT(216,116),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN8S6705C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6705C11D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v29Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v30Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v31Ev,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-56,-32),
  0,
  ABISELECT(160,84),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  0,
  ABISELECT(-216,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-216,-116),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-264,-144),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN8S6705C123v25Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v26Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v27Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v28Ev,
};
extern VTBL_ENTRY _ZTV8S6705C11[];
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C7__8S6705C11[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZThn160_N7S6705C7D1Ev,_ZThn84_N7S6705C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void ABISELECT(_ZThn160_N7S6705C7D0Ev,_ZThn84_N7S6705C7D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C7__8S6705C11[] = {
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
static  VTT_ENTRY vtt_S6705C11[] = {
  {&(_ZTV8S6705C11[5]),  5,90},
  {&(_ZTV8S6705C11[38]),  38,90},
  {&(_ZTV8S6705C11[46]),  46,90},
  {&(_ZTV8S6705C11[50]),  50,90},
  {&(_ZTV8S6705C11[70]),  70,90},
  {&(_ZTV8S6705C11[53]),  53,90},
  {&(_ZTV8S6705C11[86]),  86,90},
  {&(_tg__ZTV7S6705C7__8S6705C11[3]),  3,9},
  {&(_tg__ZTV7S6705C3__7S6705C7__8S6705C11[11]),  11,21},
};
extern VTBL_ENTRY _ZTI8S6705C11[];
extern  VTBL_ENTRY _ZTV8S6705C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6705C11[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S6705C7D0Ev,_ZThn84_N7S6705C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S6705C7D1Ev,_ZThn84_N7S6705C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S6705C11D0Ev,_ZThn116_N8S6705C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S6705C11D1Ev,_ZThn116_N8S6705C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S6705C11D0Ev,_ZThn32_N8S6705C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S6705C11D1Ev,_ZThn32_N8S6705C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6705C11 = {  "S6705C11", // class name
  bases_S6705C11, 11,
  &(vtc_S6705C11[0]), // expected_vtbl_contents
  &(vtt_S6705C11[0]), // expected_vtt_contents
  ABISELECT(480,348), // object size
  NSPAIRA(_ZTI8S6705C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6705C11),90, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6705C11),9, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6705C5  : virtual S6705C6 , S6705C11 {
  virtual  ~S6705C5(); // _ZN7S6705C5D2Ev
  virtual void  v32(); // _ZN7S6705C53v32Ev
  virtual void  v33(); // _ZN7S6705C53v33Ev
  virtual void  v34(); // _ZN7S6705C53v34Ev
  virtual void  v35(); // _ZN7S6705C53v35Ev
  virtual void  v36(); // _ZN7S6705C53v36Ev
  virtual void  v37(); // _ZN7S6705C53v37Ev
  S6705C5(); // tgen
};
//SIG(-1 S6705C5) C1{ VBC2{ BC3{ BC4{ v7 Fi} BC5{ v8 v9 Fs:16 FL Fp[8]} BC6{ v10} VBC7{ BC8{ v11 v12 v13 v14 v15 v16 Fp[4]} vd v17 v18 FL} BC8 vd v19 v20 v21 Fi} v22 v23 v24 v25 Fi[7]} BC9{ VBC3 VBC10{ v26 v27 v28 v29 FC6 Fi FU11{ m FL[4] FL}[6]} BC7 BC6 v30 v31 v32} vd v1 v2 v3 v4 v5 v6}


 S6705C5 ::~S6705C5(){ note_dtor("S6705C5", this);}
void  S6705C5 ::v32(){vfunc_called(this, "_ZN7S6705C53v32Ev");}
void  S6705C5 ::v33(){vfunc_called(this, "_ZN7S6705C53v33Ev");}
void  S6705C5 ::v34(){vfunc_called(this, "_ZN7S6705C53v34Ev");}
void  S6705C5 ::v35(){vfunc_called(this, "_ZN7S6705C53v35Ev");}
void  S6705C5 ::v36(){vfunc_called(this, "_ZN7S6705C53v36Ev");}
void  S6705C5 ::v37(){vfunc_called(this, "_ZN7S6705C53v37Ev");}
S6705C5 ::S6705C5(){ note_ctor("S6705C5", this);} // tgen

static void Test_S6705C5()
{
  extern Class_Descriptor cd_S6705C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(84,116)];
    init_test(&cd_S6705C5, buf);
    S6705C5 *dp, &lv = *(dp=new (buf) S6705C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(664,460), "sizeof(S6705C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C5)");
    check_base_class_offset(lv, (S6705C8*)(S6705C7*)(S6705C6*), ABISELECT(56,32), "S6705C5");
    check_base_class_offset(lv, (S6705C9*)(S6705C7*)(S6705C6*), ABISELECT(72,40), "S6705C5");
    check_base_class_offset(lv, (S6705C10*)(S6705C7*)(S6705C6*), ABISELECT(160,88), "S6705C5");
    /*is_ambiguous_... S6705C5::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C3*), ABISELECT(240,144), "S6705C5");
    check_base_class_offset(lv, (S6705C3*)(S6705C7*)(S6705C6*), ABISELECT(240,144), "S6705C5");
    /*is_ambiguous_... S6705C5::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C3*)(S6705C7*), ABISELECT(240,144), "S6705C5");
    /*is_ambiguous_... S6705C7::S6705C4 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C7*)(S6705C6*), ABISELECT(168,92), "S6705C5");
    check_base_class_offset(lv, (S6705C7*)(S6705C6*), ABISELECT(56,32), "S6705C5");
    check_base_class_offset(lv, (S6705C6*), ABISELECT(56,32), "S6705C5");
    /*is_ambiguous_... S6705C5::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C8*)(S6705C7*), ABISELECT(288,172), "S6705C5");
    /*is_ambiguous_... S6705C5::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C9*)(S6705C7*), ABISELECT(304,180), "S6705C5");
    /*is_ambiguous_... S6705C5::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C10*)(S6705C7*), ABISELECT(392,228), "S6705C5");
    /*is_ambiguous_... S6705C5::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C7*), ABISELECT(400,232), "S6705C5");
    check_base_class_offset(lv, (S6705C7*)(S6705C11*), ABISELECT(288,172), "S6705C5");
    check_base_class_offset(lv, (S6705C12*)(S6705C11*), ABISELECT(448,256), "S6705C5");
    /*is_ambiguous_... S6705C11::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C3*)(S6705C11*), 0, "S6705C5");
    /*is_ambiguous_... S6705C11::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C3*)(S6705C11*), 0, "S6705C5");
    /*is_ambiguous_... S6705C11::S6705C10 */ AMB_check_base_class_offset(lv, (S6705C10*)(S6705C11*), ABISELECT(48,28), "S6705C5");
    check_base_class_offset(lv, (S6705C11*), 0, "S6705C5");
    test_class_info(&lv, &cd_S6705C5);
    dp->~S6705C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C5(Test_S6705C5, "S6705C5", ABISELECT(664,460));

#else // __cplusplus

extern void _ZN7S6705C5C1Ev();
extern void _ZN7S6705C5D2Ev();
Name_Map name_map_S6705C5[] = {
  NSPAIR(_ZN7S6705C5C1Ev),
  NSPAIR(_ZN7S6705C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C7;
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
extern Class_Descriptor cd_S6705C6;
extern VTBL_ENTRY _ZTI7S6705C6[];
extern  VTBL_ENTRY _ZTV7S6705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C6[];
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C7;
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
extern Class_Descriptor cd_S6705C12;
extern VTBL_ENTRY _ZTI8S6705C12[];
extern  VTBL_ENTRY _ZTV8S6705C12[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C11;
extern VTBL_ENTRY _ZTI8S6705C11[];
extern  VTBL_ENTRY _ZTV8S6705C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6705C11[];
static Base_Class bases_S6705C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6705C8,    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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C9,    ABISELECT(72,40), //bcp->offset
    59, //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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(160,88), //bcp->offset
    63, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C4,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6705C3,    ABISELECT(240,144), //bcp->offset
    74, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S6705C4,    ABISELECT(168,92), //bcp->offset
    66, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S6705C7,    ABISELECT(56,32), //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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6705C6,    ABISELECT(56,32), //bcp->offset
    28, //bcp->virtual_function_table_offset
    21, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6705C8,    ABISELECT(288,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6705C9,    ABISELECT(304,180), //bcp->offset
    118, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(392,228), //bcp->offset
    122, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6705C4,    ABISELECT(400,232), //bcp->offset
    125, //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
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6705C7,    ABISELECT(288,172), //bcp->offset
    95, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S6705C12,    ABISELECT(448,256), //bcp->offset
    133, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S6705C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S6705C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(48,28), //bcp->offset
    25, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S6705C11,    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
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6705C5[];
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C5D1Ev();
extern void _ZN7S6705C5D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C113v29Ev();
extern void _ZN8S6705C113v30Ev();
extern void _ZN8S6705C113v31Ev();
extern void _ZN7S6705C53v32Ev();
extern void _ZN7S6705C53v33Ev();
extern void _ZN7S6705C53v34Ev();
extern void _ZN7S6705C53v35Ev();
extern void _ZN7S6705C53v36Ev();
extern void _ZN7S6705C53v37Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev)();
extern void ABISELECT(_ZThn56_N7S6705C5D1Ev,_ZThn32_N7S6705C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev)();
extern void ABISELECT(_ZThn56_N7S6705C5D0Ev,_ZThn32_N7S6705C5D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C5D1Ev,_ZTv0_n36_N7S6705C5D1Ev)();
extern void ABISELECT(_ZThn240_N7S6705C5D1Ev,_ZThn144_N7S6705C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C5D0Ev,_ZTv0_n36_N7S6705C5D0Ev)();
extern void ABISELECT(_ZThn240_N7S6705C5D0Ev,_ZThn144_N7S6705C5D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev)();
extern void ABISELECT(_ZThn288_N7S6705C5D1Ev,_ZThn172_N7S6705C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev)();
extern void ABISELECT(_ZThn288_N7S6705C5D0Ev,_ZThn172_N7S6705C5D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C123v25Ev();
extern void _ZN8S6705C123v26Ev();
extern void _ZN8S6705C123v27Ev();
extern void _ZN8S6705C123v28Ev();
static  VTBL_ENTRY vtc_S6705C5[] = {
  ABISELECT(56,32),
  ABISELECT(448,256),
  ABISELECT(240,144),
  ABISELECT(288,172),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6705C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v29Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v30Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v31Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v32Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v33Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v34Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v35Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v36Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v37Ev,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-56,-32),
  0,
  ABISELECT(184,112),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  0,
  ABISELECT(-240,-144),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C5D1Ev,_ZTv0_n36_N7S6705C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C5D0Ev,_ZTv0_n36_N7S6705C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-288,-172),
  0,
  ABISELECT(-48,-28),
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-392,-228),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-400,-232),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-448,-256),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN8S6705C123v25Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v26Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v27Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v28Ev,
};
extern VTBL_ENTRY _ZTV7S6705C5[];
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C11D1Ev();
extern void _ZN8S6705C11D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C113v29Ev();
extern void _ZN8S6705C113v30Ev();
extern void _ZN8S6705C113v31Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C11__7S6705C5[] = {
  ABISELECT(448,256),
  ABISELECT(240,144),
  ABISELECT(288,172),
  0,
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN8S6705C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6705C11D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v29Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v30Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v31Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev)();
extern void ABISELECT(_ZThn288_N8S6705C11D1Ev,_ZThn172_N8S6705C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev)();
extern void ABISELECT(_ZThn288_N8S6705C11D0Ev,_ZThn172_N8S6705C11D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C7__8S6705C11__7S6705C5[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-288,-172),
  0,
  ABISELECT(-48,-28),
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C97S6705C7__8S6705C11__7S6705C5[] = {
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
};
extern void _ZN8S6705C103v17Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C107S6705C7__8S6705C11__7S6705C5[] = {
  ABISELECT(-392,-228),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev)();
extern void ABISELECT(_ZThn240_N8S6705C11D1Ev,_ZThn144_N8S6705C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev)();
extern void ABISELECT(_ZThn240_N8S6705C11D0Ev,_ZThn144_N8S6705C11D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__8S6705C11__7S6705C5[] = {
  0,
  0,
  ABISELECT(-240,-144),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C47S6705C7__A1__8S6705C11__7S6705C5[] = {
  ABISELECT(-400,-232),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
};
extern void _ZN8S6705C123v25Ev();
extern void _ZN8S6705C123v26Ev();
extern void _ZN8S6705C123v27Ev();
extern void _ZN8S6705C123v28Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C12__8S6705C11__7S6705C5[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-448,-256),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN8S6705C123v25Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v26Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v27Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v28Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C6D1Ev();
extern void _ZN7S6705C6D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C6__7S6705C5[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C77S6705C6__7S6705C5[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZThn184_N7S6705C7D1Ev,_ZThn112_N7S6705C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void ABISELECT(_ZThn184_N7S6705C7D0Ev,_ZThn112_N7S6705C7D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C77S6705C6__7S6705C5[] = {
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev)();
extern void ABISELECT(_ZThn184_N7S6705C6D1Ev,_ZThn112_N7S6705C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev)();
extern void ABISELECT(_ZThn184_N7S6705C6D0Ev,_ZThn112_N7S6705C6D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C6__7S6705C5[] = {
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C7__A1__7S6705C5[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C7__A1__7S6705C5[] = {
  0,
  0,
  ABISELECT(48,28),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
static  VTT_ENTRY vtt_S6705C5[] = {
  {&(_ZTV7S6705C5[6]),  6,143},
  {&(_tg__ZTV8S6705C11__7S6705C5[5]),  5,18},
  {&(_tg__ZTV7S6705C7__8S6705C11__7S6705C5[17]),  17,23},
  {&(_tg__ZTV7S6705C97S6705C7__8S6705C11__7S6705C5[2]),  2,4},
  {&(_tg__ZTV8S6705C107S6705C7__8S6705C11__7S6705C5[2]),  2,3},
  {&(_tg__ZTV7S6705C3__8S6705C11__7S6705C5[11]),  11,21},
  {&(_tg__ZTV7S6705C47S6705C7__A1__8S6705C11__7S6705C5[2]),  2,8},
  {&(_tg__ZTV8S6705C12__8S6705C11__7S6705C5[6]),  6,10},
  {&(_ZTV7S6705C5[49]),  49,143},
  {&(_ZTV7S6705C5[61]),  61,143},
  {&(_ZTV7S6705C5[65]),  65,143},
  {&(_ZTV7S6705C5[85]),  85,143},
  {&(_ZTV7S6705C5[68]),  68,143},
  {&(_ZTV7S6705C5[112]),  112,143},
  {&(_ZTV7S6705C5[120]),  120,143},
  {&(_ZTV7S6705C5[124]),  124,143},
  {&(_ZTV7S6705C5[127]),  127,143},
  {&(_ZTV7S6705C5[139]),  139,143},
  {&(_tg__ZTV7S6705C6__7S6705C5[3]),  3,13},
  {&(_tg__ZTV7S6705C77S6705C6__7S6705C5[3]),  3,9},
  {&(_tg__ZTV7S6705C3__7S6705C77S6705C6__7S6705C5[11]),  11,21},
  {&(_tg__ZTV7S6705C3__7S6705C6__7S6705C5[11]),  11,21},
  {&(_tg__ZTV7S6705C7__A1__7S6705C5[3]),  3,9},
  {&(_tg__ZTV7S6705C3__7S6705C7__A1__7S6705C5[11]),  11,21},
};
extern VTBL_ENTRY _ZTI7S6705C5[];
extern  VTBL_ENTRY _ZTV7S6705C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C5[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C6D0Ev,_ZThn112_N7S6705C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C6D1Ev,_ZThn112_N7S6705C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C7D0Ev,_ZThn112_N7S6705C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C7D1Ev,_ZThn112_N7S6705C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S6705C11D0Ev,_ZThn144_N8S6705C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S6705C11D1Ev,_ZThn144_N8S6705C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S6705C11D0Ev,_ZThn172_N8S6705C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S6705C11D1Ev,_ZThn172_N8S6705C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C5D0Ev,_ZTv0_n36_N7S6705C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S6705C5D0Ev,_ZThn144_N7S6705C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C5D1Ev,_ZTv0_n36_N7S6705C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S6705C5D1Ev,_ZThn144_N7S6705C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S6705C5D0Ev,_ZThn172_N7S6705C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S6705C5D0Ev,_ZThn32_N7S6705C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S6705C5D1Ev,_ZThn172_N7S6705C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S6705C5D1Ev,_ZThn32_N7S6705C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6705C5 = {  "S6705C5", // class name
  bases_S6705C5, 18,
  &(vtc_S6705C5[0]), // expected_vtbl_contents
  &(vtt_S6705C5[0]), // expected_vtt_contents
  ABISELECT(664,460), // object size
  NSPAIRA(_ZTI7S6705C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6705C5),143, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6705C5),24, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6705C15  : S6705C3 {
  virtual void  v38(); // _ZN8S6705C153v38Ev
  virtual void  v39(); // _ZN8S6705C153v39Ev
  virtual void  v40(); // _ZN8S6705C153v40Ev
  virtual void  v41(); // _ZN8S6705C153v41Ev
  virtual void  v42(); // _ZN8S6705C153v42Ev
  virtual void  v43(); // _ZN8S6705C153v43Ev
  virtual void  v44(); // _ZN8S6705C153v44Ev
  ~S6705C15(); // tgen
  S6705C15(); // tgen
};
//SIG(-1 S6705C15) C1{ BC2{ BC3{ v8 v9 v10 v11 v12 v13 Fp[4]} vd v14 v15 FL} v1 v2 v3 v4 v5 v6 v7}


void  S6705C15 ::v38(){vfunc_called(this, "_ZN8S6705C153v38Ev");}
void  S6705C15 ::v39(){vfunc_called(this, "_ZN8S6705C153v39Ev");}
void  S6705C15 ::v40(){vfunc_called(this, "_ZN8S6705C153v40Ev");}
void  S6705C15 ::v41(){vfunc_called(this, "_ZN8S6705C153v41Ev");}
void  S6705C15 ::v42(){vfunc_called(this, "_ZN8S6705C153v42Ev");}
void  S6705C15 ::v43(){vfunc_called(this, "_ZN8S6705C153v43Ev");}
void  S6705C15 ::v44(){vfunc_called(this, "_ZN8S6705C153v44Ev");}
S6705C15 ::~S6705C15(){ note_dtor("S6705C15", this);} // tgen
S6705C15 ::S6705C15(){ note_ctor("S6705C15", this);} // tgen

static void Test_S6705C15()
{
  extern Class_Descriptor cd_S6705C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S6705C15, buf);
    S6705C15 *dp, &lv = *(dp=new (buf) S6705C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S6705C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C15)");
    check_base_class_offset(lv, (S6705C4*)(S6705C3*), 0, "S6705C15");
    check_base_class_offset(lv, (S6705C3*), 0, "S6705C15");
    test_class_info(&lv, &cd_S6705C15);
    dp->~S6705C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C15(Test_S6705C15, "S6705C15", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S6705C15C1Ev();
extern void _ZN8S6705C15D1Ev();
Name_Map name_map_S6705C15[] = {
  NSPAIR(_ZN8S6705C15C1Ev),
  NSPAIR(_ZN8S6705C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
static Base_Class bases_S6705C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6705C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6705C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S6705C15[];
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C15D1Ev();
extern void _ZN8S6705C15D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C153v38Ev();
extern void _ZN8S6705C153v39Ev();
extern void _ZN8S6705C153v40Ev();
extern void _ZN8S6705C153v41Ev();
extern void _ZN8S6705C153v42Ev();
extern void _ZN8S6705C153v43Ev();
extern void _ZN8S6705C153v44Ev();
static  VTBL_ENTRY vtc_S6705C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S6705C15[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN8S6705C15D1Ev,
  (VTBL_ENTRY)&_ZN8S6705C15D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v38Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v39Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v40Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v41Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v42Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v43Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v44Ev,
};
extern VTBL_ENTRY _ZTI8S6705C15[];
extern  VTBL_ENTRY _ZTV8S6705C15[];
Class_Descriptor cd_S6705C15 = {  "S6705C15", // class name
  bases_S6705C15, 2,
  &(vtc_S6705C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S6705C15),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S6705C15),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6705C14  : S6705C15 , S6705C6 {
  virtual void  v45(); // _ZN8S6705C143v45Ev
  virtual void  v46(); // _ZN8S6705C143v46Ev
  virtual void  v47(); // _ZN8S6705C143v47Ev
  virtual void  v48(); // _ZN8S6705C143v48Ev
  virtual void  v49(); // _ZN8S6705C143v49Ev
  ~S6705C14(); // tgen
  S6705C14(); // tgen
};
//SIG(-1 S6705C14) C1{ BC2{ BC3{ BC4{ v6 v7 v8 v9 v10 v11 Fp[4]} vd v12 v13 FL} v14 v15 v16 v17 v18 v19 v20} BC5{ BC6{ BC7{ v21 Fi} BC8{ v22 v23 Fs:16 FL Fp[8]} BC9{ v24} VBC3 BC4 vd v25 v26 v27 Fi} v28 v29 v30 v31 Fi[7]} v1 v2 v3 v4 v5}


void  S6705C14 ::v45(){vfunc_called(this, "_ZN8S6705C143v45Ev");}
void  S6705C14 ::v46(){vfunc_called(this, "_ZN8S6705C143v46Ev");}
void  S6705C14 ::v47(){vfunc_called(this, "_ZN8S6705C143v47Ev");}
void  S6705C14 ::v48(){vfunc_called(this, "_ZN8S6705C143v48Ev");}
void  S6705C14 ::v49(){vfunc_called(this, "_ZN8S6705C143v49Ev");}
S6705C14 ::~S6705C14(){ note_dtor("S6705C14", this);} // tgen
S6705C14 ::S6705C14(){ note_ctor("S6705C14", this);} // tgen

static void Test_S6705C14()
{
  extern Class_Descriptor cd_S6705C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,43)];
    init_test(&cd_S6705C14, buf);
    S6705C14 *dp, &lv = *(dp=new (buf) S6705C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,168), "sizeof(S6705C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C14)");
    check_base_class_offset(lv, (S6705C4*)(S6705C3*)(S6705C15*), 0, "S6705C14");
    check_base_class_offset(lv, (S6705C3*)(S6705C15*), 0, "S6705C14");
    check_base_class_offset(lv, (S6705C15*), 0, "S6705C14");
    check_base_class_offset(lv, (S6705C8*)(S6705C7*)(S6705C6*), ABISELECT(48,28), "S6705C14");
    check_base_class_offset(lv, (S6705C9*)(S6705C7*)(S6705C6*), ABISELECT(64,36), "S6705C14");
    check_base_class_offset(lv, (S6705C10*)(S6705C7*)(S6705C6*), ABISELECT(152,84), "S6705C14");
    /*is_ambiguous_... S6705C14::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C3*), ABISELECT(232,140), "S6705C14");
    check_base_class_offset(lv, (S6705C3*)(S6705C7*)(S6705C6*), ABISELECT(232,140), "S6705C14");
    /*is_ambiguous_... S6705C7::S6705C4 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C7*)(S6705C6*), ABISELECT(160,88), "S6705C14");
    check_base_class_offset(lv, (S6705C7*)(S6705C6*), ABISELECT(48,28), "S6705C14");
    check_base_class_offset(lv, (S6705C6*), ABISELECT(48,28), "S6705C14");
    test_class_info(&lv, &cd_S6705C14);
    dp->~S6705C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C14(Test_S6705C14, "S6705C14", ABISELECT(280,168));

#else // __cplusplus

extern void _ZN8S6705C14C1Ev();
extern void _ZN8S6705C14D1Ev();
Name_Map name_map_S6705C14[] = {
  NSPAIR(_ZN8S6705C14C1Ev),
  NSPAIR(_ZN8S6705C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C15;
extern VTBL_ENTRY _ZTI8S6705C15[];
extern  VTBL_ENTRY _ZTV8S6705C15[];
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C7;
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
extern Class_Descriptor cd_S6705C6;
extern VTBL_ENTRY _ZTI7S6705C6[];
extern  VTBL_ENTRY _ZTV7S6705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C6[];
static Base_Class bases_S6705C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6705C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S6705C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S6705C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6705C8,    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
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6705C9,    ABISELECT(64,36), //bcp->offset
    38, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(152,84), //bcp->offset
    42, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S6705C4,    ABISELECT(232,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
    7, //immediately_derived
  0, 0},
  {&cd_S6705C3,    ABISELECT(232,140), //bcp->offset
    53, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6705C4,    ABISELECT(160,88), //bcp->offset
    45, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6705C7,    ABISELECT(48,28), //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
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6705C6,    ABISELECT(48,28), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6705C14[];
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C14D1Ev();
extern void _ZN8S6705C14D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C153v38Ev();
extern void _ZN8S6705C153v39Ev();
extern void _ZN8S6705C153v40Ev();
extern void _ZN8S6705C153v41Ev();
extern void _ZN8S6705C153v42Ev();
extern void _ZN8S6705C153v43Ev();
extern void _ZN8S6705C153v44Ev();
extern void _ZN8S6705C143v45Ev();
extern void _ZN8S6705C143v46Ev();
extern void _ZN8S6705C143v47Ev();
extern void _ZN8S6705C143v48Ev();
extern void _ZN8S6705C143v49Ev();
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZThn48_N8S6705C14D1Ev,_ZThn28_N8S6705C14D1Ev)();
extern void ABISELECT(_ZThn48_N8S6705C14D0Ev,_ZThn28_N8S6705C14D0Ev)();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S6705C14D1Ev,_ZTv0_n36_N8S6705C14D1Ev)();
extern void ABISELECT(_ZThn232_N8S6705C14D1Ev,_ZThn140_N8S6705C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6705C14D0Ev,_ZTv0_n36_N8S6705C14D0Ev)();
extern void ABISELECT(_ZThn232_N8S6705C14D0Ev,_ZThn140_N8S6705C14D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY vtc_S6705C14[] = {
  ABISELECT(232,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN8S6705C14D1Ev,
  (VTBL_ENTRY)&_ZN8S6705C14D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v38Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v39Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v40Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v41Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v42Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v43Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v44Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v45Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v46Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v47Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v48Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v49Ev,
  ABISELECT(184,112),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S6705C14D1Ev,_ZThn28_N8S6705C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S6705C14D0Ev,_ZThn28_N8S6705C14D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  0,
  ABISELECT(-232,-140),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-232,-140),
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C14D1Ev,_ZTv0_n36_N8S6705C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C14D0Ev,_ZTv0_n36_N8S6705C14D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern VTBL_ENTRY _ZTV8S6705C14[];
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C6D1Ev();
extern void _ZN7S6705C6D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C6__8S6705C14[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C77S6705C6__8S6705C14[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZThn184_N7S6705C7D1Ev,_ZThn112_N7S6705C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void ABISELECT(_ZThn184_N7S6705C7D0Ev,_ZThn112_N7S6705C7D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C77S6705C6__8S6705C14[] = {
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev)();
extern void ABISELECT(_ZThn184_N7S6705C6D1Ev,_ZThn112_N7S6705C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev)();
extern void ABISELECT(_ZThn184_N7S6705C6D0Ev,_ZThn112_N7S6705C6D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C6__8S6705C14[] = {
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
static  VTT_ENTRY vtt_S6705C14[] = {
  {&(_ZTV8S6705C14[3]),  3,74},
  {&(_tg__ZTV7S6705C6__8S6705C14[3]),  3,13},
  {&(_tg__ZTV7S6705C77S6705C6__8S6705C14[3]),  3,9},
  {&(_tg__ZTV7S6705C3__7S6705C77S6705C6__8S6705C14[11]),  11,21},
  {&(_tg__ZTV7S6705C3__7S6705C6__8S6705C14[11]),  11,21},
  {&(_ZTV8S6705C14[28]),  28,74},
  {&(_ZTV8S6705C14[64]),  64,74},
};
extern VTBL_ENTRY _ZTI8S6705C14[];
extern  VTBL_ENTRY _ZTV8S6705C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6705C14[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C6D0Ev,_ZThn112_N7S6705C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C6D1Ev,_ZThn112_N7S6705C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C7D0Ev,_ZThn112_N7S6705C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C7D1Ev,_ZThn112_N7S6705C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6705C14D0Ev,_ZTv0_n36_N8S6705C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6705C14D0Ev,_ZThn140_N8S6705C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6705C14D1Ev,_ZTv0_n36_N8S6705C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S6705C14D1Ev,_ZThn140_N8S6705C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6705C14 = {  "S6705C14", // class name
  bases_S6705C14, 11,
  &(vtc_S6705C14[0]), // expected_vtbl_contents
  &(vtt_S6705C14[0]), // expected_vtt_contents
  ABISELECT(280,168), // object size
  NSPAIRA(_ZTI8S6705C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6705C14),74, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6705C14),7, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6705C1  : S6705C2 , S6705C3 , virtual S6705C5 , virtual S6705C14 , virtual S6705C10 {
  int s6705c1f0;
  virtual void  v1(); // _ZN7S6705C12v1Ev
  virtual void  v2(); // _ZN7S6705C12v2Ev
  ~S6705C1(); // tgen
  S6705C1(); // tgen
};
//SIG(1 S6705C1) C1{ BC2{ v3 v4 v5} BC3{ BC4{ v6 v7 v8 v9 v10 v11 Fp[4]} vd v12 v13 FL} VBC5{ VBC6{ BC7{ BC8{ v14 Fi} BC9{ v15 v16 Fs:16 FL Fp[8]} BC10{ v17} VBC3 BC4 vd v18 v19 v20 Fi} v21 v22 v23 v24 Fi[7]} BC11{ VBC7 VBC12{ v25 v26 v27 v28 FC10 Fi FU13{ m FL[4] FL}[6]} BC3 BC10 v29 v30 v31} vd v32 v33 v34 v35 v36 v37} VBC14{ BC15{ BC3 v38 v39 v40 v41 v42 v43 v44} BC6 v45 v46 v47 v48 v49} VBC10 v1 v2 Fi}


void  S6705C1 ::v1(){vfunc_called(this, "_ZN7S6705C12v1Ev");}
void  S6705C1 ::v2(){vfunc_called(this, "_ZN7S6705C12v2Ev");}
S6705C1 ::~S6705C1(){ note_dtor("S6705C1", this);} // tgen
S6705C1 ::S6705C1(){ note_ctor("S6705C1", this);} // tgen

static void Test_S6705C1()
{
  extern Class_Descriptor cd_S6705C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(122,161)];
    init_test(&cd_S6705C1, buf);
    S6705C1 *dp, &lv = *(dp=new (buf) S6705C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(968,640), "sizeof(S6705C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6705C1)");
    check_base_class_offset(lv, (S6705C2*), 0, "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C3*), ABISELECT(8,4), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C3*), ABISELECT(8,4), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C6 */ AMB_check_base_class_offset(lv, (S6705C8*)(S6705C7*)(S6705C6*), ABISELECT(120,68), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C6 */ AMB_check_base_class_offset(lv, (S6705C9*)(S6705C7*)(S6705C6*), ABISELECT(136,76), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C6 */ AMB_check_base_class_offset(lv, (S6705C10*)(S6705C7*)(S6705C6*), ABISELECT(224,124), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C3*), ABISELECT(304,180), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C6 */ AMB_check_base_class_offset(lv, (S6705C3*)(S6705C7*)(S6705C6*), ABISELECT(304,180), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C3*)(S6705C7*), ABISELECT(304,180), "S6705C1");
    check_base_class_offset(lv, (S6705C3*)(S6705C7*)(S6705C6*)(S6705C14*), ABISELECT(304,180), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C6 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C7*)(S6705C6*), ABISELECT(232,128), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C6 */ AMB_check_base_class_offset(lv, (S6705C7*)(S6705C6*), ABISELECT(120,68), "S6705C1");
    check_base_class_offset(lv, (S6705C6*)(S6705C5*), ABISELECT(120,68), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C8*)(S6705C7*), ABISELECT(352,208), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C9*)(S6705C7*), ABISELECT(368,216), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C10*)(S6705C7*), ABISELECT(456,264), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C7 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C7*), ABISELECT(464,268), "S6705C1");
    check_base_class_offset(lv, (S6705C7*)(S6705C11*)(S6705C5*), ABISELECT(352,208), "S6705C1");
    check_base_class_offset(lv, (S6705C12*)(S6705C11*)(S6705C5*), ABISELECT(512,292), "S6705C1");
    /*is_ambiguous_... S6705C11::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C3*)(S6705C11*)(S6705C5*), ABISELECT(64,36), "S6705C1");
    /*is_ambiguous_... S6705C11::S6705C3 */ AMB_check_base_class_offset(lv, (S6705C3*)(S6705C11*)(S6705C5*), ABISELECT(64,36), "S6705C1");
    /*is_ambiguous_... S6705C11::S6705C10 */ AMB_check_base_class_offset(lv, (S6705C10*)(S6705C11*)(S6705C5*), ABISELECT(112,64), "S6705C1");
    check_base_class_offset(lv, (S6705C11*)(S6705C5*), ABISELECT(64,36), "S6705C1");
    check_base_class_offset(lv, (S6705C5*), ABISELECT(64,36), "S6705C1");
    check_base_class_offset(lv, (S6705C4*)(S6705C3*)(S6705C15*)(S6705C14*), ABISELECT(728,496), "S6705C1");
    check_base_class_offset(lv, (S6705C3*)(S6705C15*)(S6705C14*), ABISELECT(728,496), "S6705C1");
    check_base_class_offset(lv, (S6705C15*)(S6705C14*), ABISELECT(728,496), "S6705C1");
    check_base_class_offset(lv, (S6705C8*)(S6705C7*)(S6705C6*)(S6705C14*), ABISELECT(776,524), "S6705C1");
    check_base_class_offset(lv, (S6705C9*)(S6705C7*)(S6705C6*)(S6705C14*), ABISELECT(792,532), "S6705C1");
    check_base_class_offset(lv, (S6705C10*)(S6705C7*)(S6705C6*)(S6705C14*), ABISELECT(880,580), "S6705C1");
    /*is_ambiguous_... S6705C7::S6705C4 */ AMB_check_base_class_offset(lv, (S6705C4*)(S6705C7*)(S6705C6*)(S6705C14*), ABISELECT(888,584), "S6705C1");
    check_base_class_offset(lv, (S6705C7*)(S6705C6*)(S6705C14*), ABISELECT(776,524), "S6705C1");
    check_base_class_offset(lv, (S6705C6*)(S6705C14*), ABISELECT(776,524), "S6705C1");
    check_base_class_offset(lv, (S6705C14*), ABISELECT(728,496), "S6705C1");
    /*is_ambiguous_... S6705C1::S6705C10 */ AMB_check_base_class_offset(lv, (S6705C10*), ABISELECT(960,636), "S6705C1");
    check_field_offset(lv, s6705c1f0, ABISELECT(56,32), "S6705C1.s6705c1f0");
    test_class_info(&lv, &cd_S6705C1);
    dp->~S6705C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6705C1(Test_S6705C1, "S6705C1", ABISELECT(968,640));

#else // __cplusplus

extern void _ZN7S6705C1C1Ev();
extern void _ZN7S6705C1D1Ev();
Name_Map name_map_S6705C1[] = {
  NSPAIR(_ZN7S6705C1C1Ev),
  NSPAIR(_ZN7S6705C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6705C2;
extern VTBL_ENTRY _ZTI7S6705C2[];
extern  VTBL_ENTRY _ZTV7S6705C2[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C7;
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
extern Class_Descriptor cd_S6705C6;
extern VTBL_ENTRY _ZTI7S6705C6[];
extern  VTBL_ENTRY _ZTV7S6705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C6[];
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C7;
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
extern Class_Descriptor cd_S6705C12;
extern VTBL_ENTRY _ZTI8S6705C12[];
extern  VTBL_ENTRY _ZTV8S6705C12[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C11;
extern VTBL_ENTRY _ZTI8S6705C11[];
extern  VTBL_ENTRY _ZTV8S6705C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6705C11[];
extern Class_Descriptor cd_S6705C5;
extern VTBL_ENTRY _ZTI7S6705C5[];
extern  VTBL_ENTRY _ZTV7S6705C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C5[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C3;
extern VTBL_ENTRY _ZTI7S6705C3[];
extern  VTBL_ENTRY _ZTV7S6705C3[];
extern Class_Descriptor cd_S6705C15;
extern VTBL_ENTRY _ZTI8S6705C15[];
extern  VTBL_ENTRY _ZTV8S6705C15[];
extern Class_Descriptor cd_S6705C8;
extern VTBL_ENTRY _ZTI7S6705C8[];
extern  VTBL_ENTRY _ZTV7S6705C8[];
extern Class_Descriptor cd_S6705C9;
extern VTBL_ENTRY _ZTI7S6705C9[];
extern  VTBL_ENTRY _ZTV7S6705C9[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
extern Class_Descriptor cd_S6705C4;
extern VTBL_ENTRY _ZTI7S6705C4[];
extern  VTBL_ENTRY _ZTV7S6705C4[];
extern Class_Descriptor cd_S6705C7;
extern VTBL_ENTRY _ZTI7S6705C7[];
extern  VTBL_ENTRY _ZTV7S6705C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C7[];
extern Class_Descriptor cd_S6705C6;
extern VTBL_ENTRY _ZTI7S6705C6[];
extern  VTBL_ENTRY _ZTV7S6705C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C6[];
extern Class_Descriptor cd_S6705C14;
extern VTBL_ENTRY _ZTI8S6705C14[];
extern  VTBL_ENTRY _ZTV8S6705C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6705C14[];
extern Class_Descriptor cd_S6705C10;
extern VTBL_ENTRY _ZTI8S6705C10[];
extern  VTBL_ENTRY _ZTV8S6705C10[];
static Base_Class bases_S6705C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6705C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6705C4,    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
    32, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6705C3,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6705C8,    ABISELECT(120,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
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6705C9,    ABISELECT(136,76), //bcp->offset
    106, //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
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(224,124), //bcp->offset
    110, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6705C4,    ABISELECT(304,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6705C3,    ABISELECT(304,180), //bcp->offset
    121, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S6705C4,    ABISELECT(232,128), //bcp->offset
    113, //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
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S6705C7,    ABISELECT(120,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6705C6,    ABISELECT(120,68), //bcp->offset
    75, //bcp->virtual_function_table_offset
    21, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S6705C8,    ABISELECT(352,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
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6705C9,    ABISELECT(368,216), //bcp->offset
    165, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(456,264), //bcp->offset
    169, //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
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6705C4,    ABISELECT(464,268), //bcp->offset
    172, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S6705C7,    ABISELECT(352,208), //bcp->offset
    142, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6705C12,    ABISELECT(512,292), //bcp->offset
    180, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6705C4,    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
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6705C3,    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
    16, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(112,64), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S6705C11,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6705C5,    ABISELECT(64,36), //bcp->offset
    28, //bcp->virtual_function_table_offset
    25, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6705C4,    ABISELECT(728,496), //bcp->offset
    -1, //bcp->virtual_function_table_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
    23, //immediately_derived
  0, 0},
  {&cd_S6705C3,    ABISELECT(728,496), //bcp->offset
    -1, //bcp->virtual_function_table_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
    24, //immediately_derived
  0, 0},
  {&cd_S6705C15,    ABISELECT(728,496), //bcp->offset
    -1, //bcp->virtual_function_table_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
    31, //immediately_derived
  0, 0},
  {&cd_S6705C8,    ABISELECT(776,524), //bcp->offset
    -1, //bcp->virtual_function_table_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
    29, //immediately_derived
  0, 0},
  {&cd_S6705C9,    ABISELECT(792,532), //bcp->offset
    260, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6705C10,    ABISELECT(880,580), //bcp->offset
    264, //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
    25, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6705C4,    ABISELECT(888,584), //bcp->offset
    267, //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
    26, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S6705C7,    ABISELECT(776,524), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S6705C6,    ABISELECT(776,524), //bcp->offset
    247, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S6705C14,    ABISELECT(728,496), //bcp->offset
    190, //bcp->virtual_function_table_offset
    35, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6705C10,    ABISELECT(960,636), //bcp->offset
    275, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6705C1[];
extern void _ZN7S6705C22v3Ev();
extern void _ZN7S6705C22v4Ev();
extern void _ZN7S6705C22v5Ev();
extern void _ZN7S6705C12v1Ev();
extern void _ZN7S6705C12v2Ev();
extern void _ZN7S6705C1D1Ev();
extern void _ZN7S6705C1D0Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZThn8_N7S6705C1D1Ev,_ZThn4_N7S6705C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S6705C1D0Ev,_ZThn4_N7S6705C1D0Ev)();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n104_N7S6705C1D1Ev,_ZTv0_n52_N7S6705C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S6705C1D1Ev,_ZThn36_N7S6705C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S6705C1D0Ev,_ZTv0_n52_N7S6705C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S6705C1D0Ev,_ZThn36_N7S6705C1D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C113v29Ev();
extern void _ZN8S6705C113v30Ev();
extern void _ZN8S6705C113v31Ev();
extern void _ZN7S6705C53v32Ev();
extern void _ZN7S6705C53v33Ev();
extern void _ZN7S6705C53v34Ev();
extern void _ZN7S6705C53v35Ev();
extern void _ZN7S6705C53v36Ev();
extern void _ZN7S6705C53v37Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N7S6705C1D1Ev,_ZTv0_n20_N7S6705C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S6705C1D1Ev,_ZThn68_N7S6705C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6705C1D0Ev,_ZTv0_n20_N7S6705C1D0Ev)();
extern void ABISELECT(_ZThn120_N7S6705C1D0Ev,_ZThn68_N7S6705C1D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C1D1Ev,_ZTv0_n36_N7S6705C1D1Ev)();
extern void ABISELECT(_ZThn304_N7S6705C1D1Ev,_ZThn180_N7S6705C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C1D0Ev,_ZTv0_n36_N7S6705C1D0Ev)();
extern void ABISELECT(_ZThn304_N7S6705C1D0Ev,_ZThn180_N7S6705C1D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N7S6705C1D1Ev,_ZTv0_n20_N7S6705C1D1Ev)();
extern void ABISELECT(_ZThn352_N7S6705C1D1Ev,_ZThn208_N7S6705C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6705C1D0Ev,_ZTv0_n20_N7S6705C1D0Ev)();
extern void ABISELECT(_ZThn352_N7S6705C1D0Ev,_ZThn208_N7S6705C1D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C123v25Ev();
extern void _ZN8S6705C123v26Ev();
extern void _ZN8S6705C123v27Ev();
extern void _ZN8S6705C123v28Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n80_N7S6705C1D1Ev,_ZTv0_n40_N7S6705C1D1Ev)();
extern void ABISELECT(_ZThn728_N7S6705C1D1Ev,_ZThn496_N7S6705C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S6705C1D0Ev,_ZTv0_n40_N7S6705C1D0Ev)();
extern void ABISELECT(_ZThn728_N7S6705C1D0Ev,_ZThn496_N7S6705C1D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C153v38Ev();
extern void _ZN8S6705C153v39Ev();
extern void _ZN8S6705C153v40Ev();
extern void _ZN8S6705C153v41Ev();
extern void _ZN8S6705C153v42Ev();
extern void _ZN8S6705C153v43Ev();
extern void _ZN8S6705C153v44Ev();
extern void _ZN8S6705C143v45Ev();
extern void _ZN8S6705C143v46Ev();
extern void _ZN8S6705C143v47Ev();
extern void _ZN8S6705C143v48Ev();
extern void _ZN8S6705C143v49Ev();
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTvn48_n80_N7S6705C1D1Ev,_ZTvn28_n40_N7S6705C1D1Ev)();
extern void ABISELECT(_ZTvn48_n80_N7S6705C1D0Ev,_ZTvn28_n40_N7S6705C1D0Ev)();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
extern void _ZN8S6705C103v17Ev();
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C103v17Ev();
static  VTBL_ENTRY vtc_S6705C1[] = {
  ABISELECT(960,636),
  ABISELECT(728,496),
  ABISELECT(512,292),
  ABISELECT(352,208),
  ABISELECT(304,180),
  ABISELECT(120,68),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6705C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6705C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6705C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6705C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6705C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C1D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S6705C1D1Ev,_ZThn4_N7S6705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S6705C1D0Ev,_ZThn4_N7S6705C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,28),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,32),
  ABISELECT(448,256),
  ABISELECT(240,144),
  ABISELECT(288,172),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S6705C1D1Ev,_ZTv0_n52_N7S6705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S6705C1D0Ev,_ZTv0_n52_N7S6705C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v29Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v30Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v31Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v32Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v33Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v34Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v35Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v36Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v37Ev,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  0,
  0,
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-120,-68),
  0,
  ABISELECT(184,112),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C1D1Ev,_ZTv0_n20_N7S6705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C1D0Ev,_ZTv0_n20_N7S6705C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-232,-128),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  0,
  ABISELECT(-304,-180),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C1D1Ev,_ZTv0_n36_N7S6705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C1D0Ev,_ZTv0_n36_N7S6705C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-352,-208),
  0,
  ABISELECT(-48,-28),
  ABISELECT(-352,-208),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C1D1Ev,_ZTv0_n20_N7S6705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C1D0Ev,_ZTv0_n20_N7S6705C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  ABISELECT(-368,-216),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-456,-264),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-464,-268),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-512,-292),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN8S6705C123v25Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v26Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v27Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v28Ev,
  ABISELECT(48,28),
  ABISELECT(48,28),
  ABISELECT(48,28),
  ABISELECT(48,28),
  ABISELECT(152,84),
  ABISELECT(64,36),
  ABISELECT(64,36),
  ABISELECT(48,28),
  ABISELECT(48,28),
  ABISELECT(48,28),
  ABISELECT(48,28),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-728,-496),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-424,-316),
  ABISELECT(-728,-496),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6705C1D1Ev,_ZTv0_n40_N7S6705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S6705C1D0Ev,_ZTv0_n40_N7S6705C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v38Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v39Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v40Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v41Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v42Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v43Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v44Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v45Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v46Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v47Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v48Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v49Ev,
  ABISELECT(-472,-344),
  ABISELECT(-776,-524),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n80_N7S6705C1D1Ev,_ZTvn28_n40_N7S6705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n80_N7S6705C1D0Ev,_ZTvn28_n40_N7S6705C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
  ABISELECT(-792,-532),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
  ABISELECT(-880,-580),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
  ABISELECT(-888,-584),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  0,
  ABISELECT(-960,-636),
  (VTBL_ENTRY)&(_ZTI7S6705C1[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
};
extern VTBL_ENTRY _ZTV7S6705C1[];
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN7S6705C5D1Ev();
extern void _ZN7S6705C5D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C113v29Ev();
extern void _ZN8S6705C113v30Ev();
extern void _ZN8S6705C113v31Ev();
extern void _ZN7S6705C53v32Ev();
extern void _ZN7S6705C53v33Ev();
extern void _ZN7S6705C53v34Ev();
extern void _ZN7S6705C53v35Ev();
extern void _ZN7S6705C53v36Ev();
extern void _ZN7S6705C53v37Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C5__7S6705C1[] = {
  ABISELECT(56,32),
  ABISELECT(448,256),
  ABISELECT(240,144),
  ABISELECT(288,172),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN7S6705C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v29Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v30Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v31Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v32Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v33Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v34Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v35Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v36Ev,
  (VTBL_ENTRY)&_ZN7S6705C53v37Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C11D1Ev();
extern void _ZN8S6705C11D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C113v29Ev();
extern void _ZN8S6705C113v30Ev();
extern void _ZN8S6705C113v31Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C117S6705C5__7S6705C1[] = {
  ABISELECT(448,256),
  ABISELECT(240,144),
  ABISELECT(288,172),
  0,
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN8S6705C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6705C11D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v29Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v30Ev,
  (VTBL_ENTRY)&_ZN8S6705C113v31Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev)();
extern void ABISELECT(_ZThn288_N8S6705C11D1Ev,_ZThn172_N8S6705C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev)();
extern void ABISELECT(_ZThn288_N8S6705C11D0Ev,_ZThn172_N8S6705C11D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C7__8S6705C117S6705C5__7S6705C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-288,-172),
  0,
  ABISELECT(-48,-28),
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C97S6705C7__8S6705C117S6705C5__7S6705C1[] = {
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
};
extern void _ZN8S6705C103v17Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C107S6705C7__8S6705C117S6705C5__7S6705C1[] = {
  ABISELECT(-392,-228),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev)();
extern void ABISELECT(_ZThn240_N8S6705C11D1Ev,_ZThn144_N8S6705C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev)();
extern void ABISELECT(_ZThn240_N8S6705C11D0Ev,_ZThn144_N8S6705C11D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__8S6705C117S6705C5__7S6705C1[] = {
  0,
  0,
  ABISELECT(-240,-144),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C47S6705C7__A1__8S6705C117S6705C5__7S6705C1[] = {
  ABISELECT(-400,-232),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
};
extern void _ZN8S6705C123v25Ev();
extern void _ZN8S6705C123v26Ev();
extern void _ZN8S6705C123v27Ev();
extern void _ZN8S6705C123v28Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C12__8S6705C117S6705C5__7S6705C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-448,-256),
  (VTBL_ENTRY)&(_ZTI8S6705C11[0]),
  (VTBL_ENTRY)&_ZN8S6705C123v25Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v26Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v27Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v28Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev)();
extern void ABISELECT(_ZThn56_N7S6705C5D1Ev,_ZThn32_N7S6705C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev)();
extern void ABISELECT(_ZThn56_N7S6705C5D0Ev,_ZThn32_N7S6705C5D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C6__7S6705C5__7S6705C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-56,-32),
  0,
  ABISELECT(184,112),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
};
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C97S6705C77S6705C6__7S6705C5__7S6705C1[] = {
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
};
extern void _ZN8S6705C103v17Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C107S6705C77S6705C6__7S6705C5__7S6705C1[] = {
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C5D1Ev,_ZTv0_n36_N7S6705C5D1Ev)();
extern void ABISELECT(_ZThn240_N7S6705C5D1Ev,_ZThn144_N7S6705C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C5D0Ev,_ZTv0_n36_N7S6705C5D0Ev)();
extern void ABISELECT(_ZThn240_N7S6705C5D0Ev,_ZThn144_N7S6705C5D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C5__7S6705C1[] = {
  0,
  0,
  ABISELECT(-240,-144),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C5D1Ev,_ZTv0_n36_N7S6705C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C5D0Ev,_ZTv0_n36_N7S6705C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C47S6705C77S6705C6__A1__7S6705C5__7S6705C1[] = {
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev)();
extern void ABISELECT(_ZThn288_N7S6705C5D1Ev,_ZThn172_N7S6705C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev)();
extern void ABISELECT(_ZThn288_N7S6705C5D0Ev,_ZThn172_N7S6705C5D0Ev)() __attribute__((weak));
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C7__A1__7S6705C5__7S6705C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(104,56),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  0,
  ABISELECT(-288,-172),
  0,
  ABISELECT(-48,-28),
  ABISELECT(-288,-172),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C93v15Ev();
extern void _ZN7S6705C93v16Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C97S6705C7__A1__7S6705C5__7S6705C1[] = {
  ABISELECT(-304,-180),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C93v15Ev,
  (VTBL_ENTRY)&_ZN7S6705C93v16Ev,
};
extern void _ZN8S6705C103v17Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C107S6705C7__A1__7S6705C5__7S6705C1[] = {
  ABISELECT(-392,-228),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN8S6705C103v17Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C47S6705C7__A2__7S6705C5__7S6705C1[] = {
  ABISELECT(-400,-232),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
};
extern void _ZN8S6705C123v25Ev();
extern void _ZN8S6705C123v26Ev();
extern void _ZN8S6705C123v27Ev();
extern void _ZN8S6705C123v28Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C12__7S6705C5__7S6705C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-448,-256),
  (VTBL_ENTRY)&(_ZTI7S6705C5[0]),
  (VTBL_ENTRY)&_ZN8S6705C123v25Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v26Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v27Ev,
  (VTBL_ENTRY)&_ZN8S6705C123v28Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C6D1Ev();
extern void _ZN7S6705C6D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C6__7S6705C1[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C77S6705C6__7S6705C1[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZThn184_N7S6705C7D1Ev,_ZThn112_N7S6705C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void ABISELECT(_ZThn184_N7S6705C7D0Ev,_ZThn112_N7S6705C7D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C77S6705C6__7S6705C1[] = {
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev)();
extern void ABISELECT(_ZThn184_N7S6705C6D1Ev,_ZThn112_N7S6705C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev)();
extern void ABISELECT(_ZThn184_N7S6705C6D0Ev,_ZThn112_N7S6705C6D0Ev)() __attribute__((weak));
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C6__7S6705C1[] = {
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C7__A1__7S6705C1[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C7__A1__7S6705C1[] = {
  0,
  0,
  ABISELECT(48,28),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void _ZN8S6705C14D1Ev();
extern void _ZN8S6705C14D0Ev();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
extern void _ZN8S6705C153v38Ev();
extern void _ZN8S6705C153v39Ev();
extern void _ZN8S6705C153v40Ev();
extern void _ZN8S6705C153v41Ev();
extern void _ZN8S6705C153v42Ev();
extern void _ZN8S6705C153v43Ev();
extern void _ZN8S6705C153v44Ev();
extern void _ZN8S6705C143v45Ev();
extern void _ZN8S6705C143v46Ev();
extern void _ZN8S6705C143v47Ev();
extern void _ZN8S6705C143v48Ev();
extern void _ZN8S6705C143v49Ev();
static  VTBL_ENTRY _tg__ZTV8S6705C14__7S6705C1[] = {
  ABISELECT(-424,-316),
  0,
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&_ZN8S6705C14D1Ev,
  (VTBL_ENTRY)&_ZN8S6705C14D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v38Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v39Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v40Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v41Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v42Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v43Ev,
  (VTBL_ENTRY)&_ZN8S6705C153v44Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v45Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v46Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v47Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v48Ev,
  (VTBL_ENTRY)&_ZN8S6705C143v49Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C6D1Ev();
extern void _ZN7S6705C6D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C68S6705C14__A1__7S6705C1[] = {
  ABISELECT(-472,-344),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C6D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void _ZN7S6705C7D1Ev();
extern void _ZN7S6705C7D0Ev();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C77S6705C68S6705C14__A2__7S6705C1[] = {
  ABISELECT(-472,-344),
  0,
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6705C7D0Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev)();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C77S6705C68S6705C14__A2__7S6705C1[] = {
  0,
  0,
  ABISELECT(472,344),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(472,344),
  (VTBL_ENTRY)&(_ZTI7S6705C7[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev)();
extern void ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev)();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__7S6705C68S6705C14__A1__7S6705C1[] = {
  0,
  0,
  ABISELECT(472,344),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(472,344),
  (VTBL_ENTRY)&(_ZTI7S6705C6[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
extern void _ZN7S6705C83v14Ev();
extern void ABISELECT(_ZThn48_N8S6705C14D1Ev,_ZThn28_N8S6705C14D1Ev)();
extern void ABISELECT(_ZThn48_N8S6705C14D0Ev,_ZThn28_N8S6705C14D0Ev)();
extern void _ZN7S6705C73v18Ev();
extern void _ZN7S6705C73v19Ev();
extern void _ZN7S6705C73v20Ev();
extern void _ZN7S6705C63v21Ev();
extern void _ZN7S6705C63v22Ev();
extern void _ZN7S6705C63v23Ev();
extern void _ZN7S6705C63v24Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C6__8S6705C14__7S6705C1[] = {
  ABISELECT(-472,-344),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN7S6705C83v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S6705C14D1Ev,_ZThn28_N8S6705C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S6705C14D0Ev,_ZThn28_N8S6705C14D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C73v18Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v19Ev,
  (VTBL_ENTRY)&_ZN7S6705C73v20Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v21Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v22Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v23Ev,
  (VTBL_ENTRY)&_ZN7S6705C63v24Ev,
};
extern void _ZN7S6705C42v6Ev();
extern void _ZN7S6705C42v7Ev();
extern void _ZN7S6705C42v8Ev();
extern void _ZN7S6705C42v9Ev();
extern void _ZN7S6705C43v10Ev();
extern void _ZN7S6705C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S6705C14D1Ev,_ZTv0_n36_N8S6705C14D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S6705C14D0Ev,_ZTv0_n36_N8S6705C14D0Ev)();
extern void _ZN7S6705C33v12Ev();
extern void _ZN7S6705C33v13Ev();
static  VTBL_ENTRY _tg__ZTV7S6705C3__A1__8S6705C14__7S6705C1[] = {
  0,
  0,
  ABISELECT(424,316),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(424,316),
  (VTBL_ENTRY)&(_ZTI8S6705C14[0]),
  (VTBL_ENTRY)&_ZN7S6705C42v6Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v7Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v8Ev,
  (VTBL_ENTRY)&_ZN7S6705C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v10Ev,
  (VTBL_ENTRY)&_ZN7S6705C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C14D1Ev,_ZTv0_n36_N8S6705C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S6705C14D0Ev,_ZTv0_n36_N8S6705C14D0Ev),
  (VTBL_ENTRY)&_ZN7S6705C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6705C33v13Ev,
};
static  VTT_ENTRY vtt_S6705C1[] = {
  {&(_ZTV7S6705C1[9]),  9,279},
  {&(_ZTV7S6705C1[53]),  53,279},
  {&(_ZTV7S6705C1[96]),  96,279},
  {&(_ZTV7S6705C1[108]),  108,279},
  {&(_ZTV7S6705C1[112]),  112,279},
  {&(_ZTV7S6705C1[132]),  132,279},
  {&(_ZTV7S6705C1[115]),  115,279},
  {&(_ZTV7S6705C1[159]),  159,279},
  {&(_ZTV7S6705C1[167]),  167,279},
  {&(_ZTV7S6705C1[171]),  171,279},
  {&(_ZTV7S6705C1[174]),  174,279},
  {&(_ZTV7S6705C1[186]),  186,279},
  {&(_ZTV7S6705C1[74]),  74,279},
  {&(_ZTV7S6705C1[225]),  225,279},
  {&(_ZTV7S6705C1[250]),  250,279},
  {&(_ZTV7S6705C1[262]),  262,279},
  {&(_ZTV7S6705C1[266]),  266,279},
  {&(_ZTV7S6705C1[269]),  269,279},
  {&(_ZTV7S6705C1[278]),  278,279},
  {&(_tg__ZTV7S6705C5__7S6705C1[6]),  6,25},
  {&(_tg__ZTV8S6705C117S6705C5__7S6705C1[5]),  5,18},
  {&(_tg__ZTV7S6705C7__8S6705C117S6705C5__7S6705C1[17]),  17,23},
  {&(_tg__ZTV7S6705C97S6705C7__8S6705C117S6705C5__7S6705C1[2]),  2,4},
  {&(_tg__ZTV8S6705C107S6705C7__8S6705C117S6705C5__7S6705C1[2]),  2,3},
  {&(_tg__ZTV7S6705C3__8S6705C117S6705C5__7S6705C1[11]),  11,21},
  {&(_tg__ZTV7S6705C47S6705C7__A1__8S6705C117S6705C5__7S6705C1[2]),  2,8},
  {&(_tg__ZTV8S6705C12__8S6705C117S6705C5__7S6705C1[6]),  6,10},
  {&(_tg__ZTV7S6705C6__7S6705C5__7S6705C1[21]),  21,31},
  {&(_tg__ZTV7S6705C97S6705C77S6705C6__7S6705C5__7S6705C1[2]),  2,4},
  {&(_tg__ZTV8S6705C107S6705C77S6705C6__7S6705C5__7S6705C1[2]),  2,3},
  {&(_tg__ZTV7S6705C3__7S6705C5__7S6705C1[11]),  11,21},
  {&(_tg__ZTV7S6705C47S6705C77S6705C6__A1__7S6705C5__7S6705C1[2]),  2,8},
  {&(_tg__ZTV7S6705C7__A1__7S6705C5__7S6705C1[17]),  17,23},
  {&(_tg__ZTV7S6705C97S6705C7__A1__7S6705C5__7S6705C1[2]),  2,4},
  {&(_tg__ZTV8S6705C107S6705C7__A1__7S6705C5__7S6705C1[2]),  2,3},
  {&(_tg__ZTV7S6705C47S6705C7__A2__7S6705C5__7S6705C1[2]),  2,8},
  {&(_tg__ZTV8S6705C12__7S6705C5__7S6705C1[6]),  6,10},
  {&(_tg__ZTV7S6705C6__7S6705C1[3]),  3,13},
  {&(_tg__ZTV7S6705C77S6705C6__7S6705C1[3]),  3,9},
  {&(_tg__ZTV7S6705C3__7S6705C77S6705C6__7S6705C1[11]),  11,21},
  {&(_tg__ZTV7S6705C3__7S6705C6__7S6705C1[11]),  11,21},
  {&(_tg__ZTV7S6705C7__A1__7S6705C1[3]),  3,9},
  {&(_tg__ZTV7S6705C3__7S6705C7__A1__7S6705C1[11]),  11,21},
  {&(_tg__ZTV8S6705C14__7S6705C1[3]),  3,25},
  {&(_tg__ZTV7S6705C68S6705C14__A1__7S6705C1[3]),  3,13},
  {&(_tg__ZTV7S6705C77S6705C68S6705C14__A2__7S6705C1[3]),  3,9},
  {&(_tg__ZTV7S6705C3__7S6705C77S6705C68S6705C14__A2__7S6705C1[11]),  11,21},
  {&(_tg__ZTV7S6705C3__7S6705C68S6705C14__A1__7S6705C1[11]),  11,21},
  {&(_tg__ZTV7S6705C6__8S6705C14__7S6705C1[3]),  3,13},
  {&(_tg__ZTV7S6705C3__A1__8S6705C14__7S6705C1[11]),  11,21},
};
extern VTBL_ENTRY _ZTI7S6705C1[];
extern  VTBL_ENTRY _ZTV7S6705C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6705C1[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C6D0Ev,_ZTv0_n36_N7S6705C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C6D0Ev,_ZThn112_N7S6705C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C6D1Ev,_ZTv0_n36_N7S6705C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C6D1Ev,_ZThn112_N7S6705C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D0Ev,_ZTv0_n36_N7S6705C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C7D0Ev,_ZThn112_N7S6705C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C7D1Ev,_ZTv0_n36_N7S6705C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S6705C7D1Ev,_ZThn112_N7S6705C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C5D0Ev,_ZTv0_n36_N7S6705C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S6705C5D0Ev,_ZThn144_N7S6705C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C5D1Ev,_ZTv0_n36_N7S6705C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S6705C5D1Ev,_ZThn144_N7S6705C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6705C5D0Ev,_ZTv0_n20_N7S6705C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S6705C5D0Ev,_ZThn172_N7S6705C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S6705C5D0Ev,_ZThn32_N7S6705C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6705C5D1Ev,_ZTv0_n20_N7S6705C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S6705C5D1Ev,_ZThn172_N7S6705C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S6705C5D1Ev,_ZThn32_N7S6705C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6705C11D0Ev,_ZTv0_n36_N8S6705C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S6705C11D0Ev,_ZThn144_N8S6705C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S6705C11D1Ev,_ZTv0_n36_N8S6705C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N8S6705C11D1Ev,_ZThn144_N8S6705C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6705C11D0Ev,_ZTv0_n20_N8S6705C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S6705C11D0Ev,_ZThn172_N8S6705C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S6705C11D1Ev,_ZTv0_n20_N8S6705C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N8S6705C11D1Ev,_ZThn172_N8S6705C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6705C1D0Ev,_ZTv0_n40_N7S6705C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn728_N7S6705C1D0Ev,_ZThn496_N7S6705C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S6705C1D1Ev,_ZTv0_n40_N7S6705C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn728_N7S6705C1D1Ev,_ZThn496_N7S6705C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C1D0Ev,_ZTv0_n36_N7S6705C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S6705C1D0Ev,_ZThn180_N7S6705C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6705C1D1Ev,_ZTv0_n36_N7S6705C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S6705C1D1Ev,_ZThn180_N7S6705C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6705C1D0Ev,_ZTv0_n20_N7S6705C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S6705C1D0Ev,_ZThn208_N7S6705C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S6705C1D0Ev,_ZThn68_N7S6705C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6705C1D1Ev,_ZTv0_n20_N7S6705C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N7S6705C1D1Ev,_ZThn208_N7S6705C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S6705C1D1Ev,_ZThn68_N7S6705C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S6705C1D0Ev,_ZTv0_n52_N7S6705C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6705C1D0Ev,_ZThn36_N7S6705C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S6705C1D1Ev,_ZTv0_n52_N7S6705C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6705C1D1Ev,_ZThn36_N7S6705C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6705C1 = {  "S6705C1", // class name
  bases_S6705C1, 33,
  &(vtc_S6705C1[0]), // expected_vtbl_contents
  &(vtt_S6705C1[0]), // expected_vtt_contents
  ABISELECT(968,640), // object size
  NSPAIRA(_ZTI7S6705C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6705C1),279, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6705C1),50, //virtual table table var
  33, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7059C2  {
  int s7059c2f0;
  __tsi64 s7059c2f1;
  void *s7059c2f2[4];
  int s7059c2f3[2];
  void *s7059c2f4;
  ::S2366C14_nt s7059c2f5;
  void *s7059c2f6[2];
  virtual  ~S7059C2(); // _ZN7S7059C2D1Ev
  virtual void  v6(); // _ZN7S7059C22v6Ev
  virtual void  v7(); // _ZN7S7059C22v7Ev
  virtual void  v8(); // _ZN7S7059C22v8Ev
  virtual void  v9(); // _ZN7S7059C22v9Ev
  virtual void  v10(); // _ZN7S7059C23v10Ev
  virtual void  v11(); // _ZN7S7059C23v11Ev
  virtual void  v12(); // _ZN7S7059C23v12Ev
  virtual void  v13(); // _ZN7S7059C23v13Ev
  virtual void  v14(); // _ZN7S7059C23v14Ev
  virtual void  v15(); // _ZN7S7059C23v15Ev
  virtual void  v16(); // _ZN7S7059C23v16Ev
  virtual void  v17(); // _ZN7S7059C23v17Ev
  virtual void  v18(); // _ZN7S7059C23v18Ev
  virtual void  v19(); // _ZN7S7059C23v19Ev
  virtual void  v20(); // _ZN7S7059C23v20Ev
  virtual void  v21(); // _ZN7S7059C23v21Ev
  virtual void  v22(); // _ZN7S7059C23v22Ev
  virtual void  v23(); // _ZN7S7059C23v23Ev
  virtual void  v24(); // _ZN7S7059C23v24Ev
  virtual void  v25(); // _ZN7S7059C23v25Ev
  virtual void  v26(); // _ZN7S7059C23v26Ev
  virtual void  v27(); // _ZN7S7059C23v27Ev
  virtual void  v28(); // _ZN7S7059C23v28Ev
  virtual void  v29(); // _ZN7S7059C23v29Ev
  virtual void  v30(); // _ZN7S7059C23v30Ev
  virtual void  v31(); // _ZN7S7059C23v31Ev
  virtual void  v32(); // _ZN7S7059C23v32Ev
  virtual void  v33(); // _ZN7S7059C23v33Ev
  virtual void  v34(); // _ZN7S7059C23v34Ev
  virtual void  v35(); // _ZN7S7059C23v35Ev
  virtual void  v36(); // _ZN7S7059C23v36Ev
  virtual void  v37(); // _ZN7S7059C23v37Ev
  virtual void  v38(); // _ZN7S7059C23v38Ev
  virtual void  v39(); // _ZN7S7059C23v39Ev
  virtual void  v40(); // _ZN7S7059C23v40Ev
  virtual void  v41(); // _ZN7S7059C23v41Ev
  virtual void  v42(); // _ZN7S7059C23v42Ev
  virtual void  v43(); // _ZN7S7059C23v43Ev
  virtual void  v44(); // _ZN7S7059C23v44Ev
  virtual void  v45(); // _ZN7S7059C23v45Ev
  virtual void  v46(); // _ZN7S7059C23v46Ev
  virtual void  v47(); // _ZN7S7059C23v47Ev
  virtual void  v48(); // _ZN7S7059C23v48Ev
  virtual void  v49(); // _ZN7S7059C23v49Ev
  virtual void  v50(); // _ZN7S7059C23v50Ev
  virtual void  v51(); // _ZN7S7059C23v51Ev
  virtual void  v52(); // _ZN7S7059C23v52Ev
  virtual void  v53(); // _ZN7S7059C23v53Ev
  virtual void  v54(); // _ZN7S7059C23v54Ev
  virtual void  v55(); // _ZN7S7059C23v55Ev
  virtual void  v56(); // _ZN7S7059C23v56Ev
  virtual void  v57(); // _ZN7S7059C23v57Ev
  virtual void  v58(); // _ZN7S7059C23v58Ev
  virtual void  v59(); // _ZN7S7059C23v59Ev
  virtual void  v60(); // _ZN7S7059C23v60Ev
  virtual void  v61(); // _ZN7S7059C23v61Ev
  virtual void  v62(); // _ZN7S7059C23v62Ev
  virtual void  v63(); // _ZN7S7059C23v63Ev
  virtual void  v64(); // _ZN7S7059C23v64Ev
  virtual void  v65(); // _ZN7S7059C23v65Ev
  virtual void  v66(); // _ZN7S7059C23v66Ev
  virtual void  v67(); // _ZN7S7059C23v67Ev
  virtual void  v68(); // _ZN7S7059C23v68Ev
  virtual void  v69(); // _ZN7S7059C23v69Ev
  S7059C2(); // tgen
};
//SIG(-1 S7059C2) 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]}


 S7059C2 ::~S7059C2(){ note_dtor("S7059C2", this);}
void  S7059C2 ::v6(){vfunc_called(this, "_ZN7S7059C22v6Ev");}
void  S7059C2 ::v7(){vfunc_called(this, "_ZN7S7059C22v7Ev");}
void  S7059C2 ::v8(){vfunc_called(this, "_ZN7S7059C22v8Ev");}
void  S7059C2 ::v9(){vfunc_called(this, "_ZN7S7059C22v9Ev");}
void  S7059C2 ::v10(){vfunc_called(this, "_ZN7S7059C23v10Ev");}
void  S7059C2 ::v11(){vfunc_called(this, "_ZN7S7059C23v11Ev");}
void  S7059C2 ::v12(){vfunc_called(this, "_ZN7S7059C23v12Ev");}
void  S7059C2 ::v13(){vfunc_called(this, "_ZN7S7059C23v13Ev");}
void  S7059C2 ::v14(){vfunc_called(this, "_ZN7S7059C23v14Ev");}
void  S7059C2 ::v15(){vfunc_called(this, "_ZN7S7059C23v15Ev");}
void  S7059C2 ::v16(){vfunc_called(this, "_ZN7S7059C23v16Ev");}
void  S7059C2 ::v17(){vfunc_called(this, "_ZN7S7059C23v17Ev");}
void  S7059C2 ::v18(){vfunc_called(this, "_ZN7S7059C23v18Ev");}
void  S7059C2 ::v19(){vfunc_called(this, "_ZN7S7059C23v19Ev");}
void  S7059C2 ::v20(){vfunc_called(this, "_ZN7S7059C23v20Ev");}
void  S7059C2 ::v21(){vfunc_called(this, "_ZN7S7059C23v21Ev");}
void  S7059C2 ::v22(){vfunc_called(this, "_ZN7S7059C23v22Ev");}
void  S7059C2 ::v23(){vfunc_called(this, "_ZN7S7059C23v23Ev");}
void  S7059C2 ::v24(){vfunc_called(this, "_ZN7S7059C23v24Ev");}
void  S7059C2 ::v25(){vfunc_called(this, "_ZN7S7059C23v25Ev");}
void  S7059C2 ::v26(){vfunc_called(this, "_ZN7S7059C23v26Ev");}
void  S7059C2 ::v27(){vfunc_called(this, "_ZN7S7059C23v27Ev");}
void  S7059C2 ::v28(){vfunc_called(this, "_ZN7S7059C23v28Ev");}
void  S7059C2 ::v29(){vfunc_called(this, "_ZN7S7059C23v29Ev");}
void  S7059C2 ::v30(){vfunc_called(this, "_ZN7S7059C23v30Ev");}
void  S7059C2 ::v31(){vfunc_called(this, "_ZN7S7059C23v31Ev");}
void  S7059C2 ::v32(){vfunc_called(this, "_ZN7S7059C23v32Ev");}
void  S7059C2 ::v33(){vfunc_called(this, "_ZN7S7059C23v33Ev");}
void  S7059C2 ::v34(){vfunc_called(this, "_ZN7S7059C23v34Ev");}
void  S7059C2 ::v35(){vfunc_called(this, "_ZN7S7059C23v35Ev");}
void  S7059C2 ::v36(){vfunc_called(this, "_ZN7S7059C23v36Ev");}
void  S7059C2 ::v37(){vfunc_called(this, "_ZN7S7059C23v37Ev");}
void  S7059C2 ::v38(){vfunc_called(this, "_ZN7S7059C23v38Ev");}
void  S7059C2 ::v39(){vfunc_called(this, "_ZN7S7059C23v39Ev");}
void  S7059C2 ::v40(){vfunc_called(this, "_ZN7S7059C23v40Ev");}
void  S7059C2 ::v41(){vfunc_called(this, "_ZN7S7059C23v41Ev");}
void  S7059C2 ::v42(){vfunc_called(this, "_ZN7S7059C23v42Ev");}
void  S7059C2 ::v43(){vfunc_called(this, "_ZN7S7059C23v43Ev");}
void  S7059C2 ::v44(){vfunc_called(this, "_ZN7S7059C23v44Ev");}
void  S7059C2 ::v45(){vfunc_called(this, "_ZN7S7059C23v45Ev");}
void  S7059C2 ::v46(){vfunc_called(this, "_ZN7S7059C23v46Ev");}
void  S7059C2 ::v47(){vfunc_called(this, "_ZN7S7059C23v47Ev");}
void  S7059C2 ::v48(){vfunc_called(this, "_ZN7S7059C23v48Ev");}
void  S7059C2 ::v49(){vfunc_called(this, "_ZN7S7059C23v49Ev");}
void  S7059C2 ::v50(){vfunc_called(this, "_ZN7S7059C23v50Ev");}
void  S7059C2 ::v51(){vfunc_called(this, "_ZN7S7059C23v51Ev");}
void  S7059C2 ::v52(){vfunc_called(this, "_ZN7S7059C23v52Ev");}
void  S7059C2 ::v53(){vfunc_called(this, "_ZN7S7059C23v53Ev");}
void  S7059C2 ::v54(){vfunc_called(this, "_ZN7S7059C23v54Ev");}
void  S7059C2 ::v55(){vfunc_called(this, "_ZN7S7059C23v55Ev");}
void  S7059C2 ::v56(){vfunc_called(this, "_ZN7S7059C23v56Ev");}
void  S7059C2 ::v57(){vfunc_called(this, "_ZN7S7059C23v57Ev");}
void  S7059C2 ::v58(){vfunc_called(this, "_ZN7S7059C23v58Ev");}
void  S7059C2 ::v59(){vfunc_called(this, "_ZN7S7059C23v59Ev");}
void  S7059C2 ::v60(){vfunc_called(this, "_ZN7S7059C23v60Ev");}
void  S7059C2 ::v61(){vfunc_called(this, "_ZN7S7059C23v61Ev");}
void  S7059C2 ::v62(){vfunc_called(this, "_ZN7S7059C23v62Ev");}
void  S7059C2 ::v63(){vfunc_called(this, "_ZN7S7059C23v63Ev");}
void  S7059C2 ::v64(){vfunc_called(this, "_ZN7S7059C23v64Ev");}
void  S7059C2 ::v65(){vfunc_called(this, "_ZN7S7059C23v65Ev");}
void  S7059C2 ::v66(){vfunc_called(this, "_ZN7S7059C23v66Ev");}
void  S7059C2 ::v67(){vfunc_called(this, "_ZN7S7059C23v67Ev");}
void  S7059C2 ::v68(){vfunc_called(this, "_ZN7S7059C23v68Ev");}
void  S7059C2 ::v69(){vfunc_called(this, "_ZN7S7059C23v69Ev");}
S7059C2 ::S7059C2(){ note_ctor("S7059C2", this);} // tgen

static void Test_S7059C2()
{
  extern Class_Descriptor cd_S7059C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S7059C2, buf);
    S7059C2 *dp, &lv = *(dp=new (buf) S7059C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S7059C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7059C2)");
    check_field_offset(lv, s7059c2f0, ABISELECT(8,4), "S7059C2.s7059c2f0");
    check_field_offset(lv, s7059c2f1, ABISELECT(16,8), "S7059C2.s7059c2f1");
    check_field_offset(lv, s7059c2f2, ABISELECT(24,16), "S7059C2.s7059c2f2");
    check_field_offset(lv, s7059c2f3, ABISELECT(56,32), "S7059C2.s7059c2f3");
    check_field_offset(lv, s7059c2f4, ABISELECT(64,40), "S7059C2.s7059c2f4");
    check_field_offset(lv, s7059c2f5, ABISELECT(72,44), "S7059C2.s7059c2f5");
    check_field_offset(lv, s7059c2f6, ABISELECT(80,52), "S7059C2.s7059c2f6");
    test_class_info(&lv, &cd_S7059C2);
    dp->~S7059C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7059C2(Test_S7059C2, "S7059C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S7059C2C1Ev();
extern void _ZN7S7059C2D1Ev();
Name_Map name_map_S7059C2[] = {
  NSPAIR(_ZN7S7059C2C1Ev),
  NSPAIR(_ZN7S7059C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7059C2[];
extern void _ZN7S7059C2D1Ev();
extern void _ZN7S7059C2D0Ev();
extern void _ZN7S7059C22v6Ev();
extern void _ZN7S7059C22v7Ev();
extern void _ZN7S7059C22v8Ev();
extern void _ZN7S7059C22v9Ev();
extern void _ZN7S7059C23v10Ev();
extern void _ZN7S7059C23v11Ev();
extern void _ZN7S7059C23v12Ev();
extern void _ZN7S7059C23v13Ev();
extern void _ZN7S7059C23v14Ev();
extern void _ZN7S7059C23v15Ev();
extern void _ZN7S7059C23v16Ev();
extern void _ZN7S7059C23v17Ev();
extern void _ZN7S7059C23v18Ev();
extern void _ZN7S7059C23v19Ev();
extern void _ZN7S7059C23v20Ev();
extern void _ZN7S7059C23v21Ev();
extern void _ZN7S7059C23v22Ev();
extern void _ZN7S7059C23v23Ev();
extern void _ZN7S7059C23v24Ev();
extern void _ZN7S7059C23v25Ev();
extern void _ZN7S7059C23v26Ev();
extern void _ZN7S7059C23v27Ev();
extern void _ZN7S7059C23v28Ev();
extern void _ZN7S7059C23v29Ev();
extern void _ZN7S7059C23v30Ev();
extern void _ZN7S7059C23v31Ev();
extern void _ZN7S7059C23v32Ev();
extern void _ZN7S7059C23v33Ev();
extern void _ZN7S7059C23v34Ev();
extern void _ZN7S7059C23v35Ev();
extern void _ZN7S7059C23v36Ev();
extern void _ZN7S7059C23v37Ev();
extern void _ZN7S7059C23v38Ev();
extern void _ZN7S7059C23v39Ev();
extern void _ZN7S7059C23v40Ev();
extern void _ZN7S7059C23v41Ev();
extern void _ZN7S7059C23v42Ev();
extern void _ZN7S7059C23v43Ev();
extern void _ZN7S7059C23v44Ev();
extern void _ZN7S7059C23v45Ev();
extern void _ZN7S7059C23v46Ev();
extern void _ZN7S7059C23v47Ev();
extern void _ZN7S7059C23v48Ev();
extern void _ZN7S7059C23v49Ev();
extern void _ZN7S7059C23v50Ev();
extern void _ZN7S7059C23v51Ev();
extern void _ZN7S7059C23v52Ev();
extern void _ZN7S7059C23v53Ev();
extern void _ZN7S7059C23v54Ev();
extern void _ZN7S7059C23v55Ev();
extern void _ZN7S7059C23v56Ev();
extern void _ZN7S7059C23v57Ev();
extern void _ZN7S7059C23v58Ev();
extern void _ZN7S7059C23v59Ev();
extern void _ZN7S7059C23v60Ev();
extern void _ZN7S7059C23v61Ev();
extern void _ZN7S7059C23v62Ev();
extern void _ZN7S7059C23v63Ev();
extern void _ZN7S7059C23v64Ev();
extern void _ZN7S7059C23v65Ev();
extern void _ZN7S7059C23v66Ev();
extern void _ZN7S7059C23v67Ev();
extern void _ZN7S7059C23v68Ev();
extern void _ZN7S7059C23v69Ev();
static  VTBL_ENTRY vtc_S7059C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7059C2[0]),
  (VTBL_ENTRY)&_ZN7S7059C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7059C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7059C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7059C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7059C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7059C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v33Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v34Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v35Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v36Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v37Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v38Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v39Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v40Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v41Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v42Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v43Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v44Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v50Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v51Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v52Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v53Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v54Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v55Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v56Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v57Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v58Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v59Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v60Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v61Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v62Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v63Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v64Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v65Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v66Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v67Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v68Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v69Ev,
};
extern VTBL_ENTRY _ZTI7S7059C2[];
extern  VTBL_ENTRY _ZTV7S7059C2[];
Class_Descriptor cd_S7059C2 = {  "S7059C2", // class name
  0,0,//no base classes
  &(vtc_S7059C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S7059C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7059C2),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  S7059C1  : S7059C2 {
  ::S1503C29 s7059c1f0;
  virtual  ~S7059C1(); // _ZN7S7059C1D1Ev
  virtual void  v1(); // _ZN7S7059C12v1Ev
  virtual void  v2(); // _ZN7S7059C12v2Ev
  virtual void  v3(); // _ZN7S7059C12v3Ev
  virtual void  v4(); // _ZN7S7059C12v4Ev
  virtual void  v5(); // _ZN7S7059C12v5Ev
  S7059C1(); // tgen
};
//SIG(1 S7059C1) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 FC4{ BC5{ m Fp Fi[2]}}}


 S7059C1 ::~S7059C1(){ note_dtor("S7059C1", this);}
void  S7059C1 ::v1(){vfunc_called(this, "_ZN7S7059C12v1Ev");}
void  S7059C1 ::v2(){vfunc_called(this, "_ZN7S7059C12v2Ev");}
void  S7059C1 ::v3(){vfunc_called(this, "_ZN7S7059C12v3Ev");}
void  S7059C1 ::v4(){vfunc_called(this, "_ZN7S7059C12v4Ev");}
void  S7059C1 ::v5(){vfunc_called(this, "_ZN7S7059C12v5Ev");}
S7059C1 ::S7059C1(){ note_ctor("S7059C1", this);} // tgen

static void Test_S7059C1()
{
  extern Class_Descriptor cd_S7059C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S7059C1, buf);
    S7059C1 *dp, &lv = *(dp=new (buf) S7059C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S7059C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7059C1)");
    check_base_class_offset(lv, (S7059C2*), 0, "S7059C1");
    check_field_offset(lv, s7059c1f0, ABISELECT(96,60), "S7059C1.s7059c1f0");
    test_class_info(&lv, &cd_S7059C1);
    dp->~S7059C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7059C1(Test_S7059C1, "S7059C1", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S7059C1C1Ev();
extern void _ZN7S7059C1D1Ev();
Name_Map name_map_S7059C1[] = {
  NSPAIR(_ZN7S7059C1C1Ev),
  NSPAIR(_ZN7S7059C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7059C2;
extern VTBL_ENTRY _ZTI7S7059C2[];
extern  VTBL_ENTRY _ZTV7S7059C2[];
static Base_Class bases_S7059C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7059C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7059C1[];
extern void _ZN7S7059C1D1Ev();
extern void _ZN7S7059C1D0Ev();
extern void _ZN7S7059C22v6Ev();
extern void _ZN7S7059C22v7Ev();
extern void _ZN7S7059C22v8Ev();
extern void _ZN7S7059C22v9Ev();
extern void _ZN7S7059C23v10Ev();
extern void _ZN7S7059C23v11Ev();
extern void _ZN7S7059C23v12Ev();
extern void _ZN7S7059C23v13Ev();
extern void _ZN7S7059C23v14Ev();
extern void _ZN7S7059C23v15Ev();
extern void _ZN7S7059C23v16Ev();
extern void _ZN7S7059C23v17Ev();
extern void _ZN7S7059C23v18Ev();
extern void _ZN7S7059C23v19Ev();
extern void _ZN7S7059C23v20Ev();
extern void _ZN7S7059C23v21Ev();
extern void _ZN7S7059C23v22Ev();
extern void _ZN7S7059C23v23Ev();
extern void _ZN7S7059C23v24Ev();
extern void _ZN7S7059C23v25Ev();
extern void _ZN7S7059C23v26Ev();
extern void _ZN7S7059C23v27Ev();
extern void _ZN7S7059C23v28Ev();
extern void _ZN7S7059C23v29Ev();
extern void _ZN7S7059C23v30Ev();
extern void _ZN7S7059C23v31Ev();
extern void _ZN7S7059C23v32Ev();
extern void _ZN7S7059C23v33Ev();
extern void _ZN7S7059C23v34Ev();
extern void _ZN7S7059C23v35Ev();
extern void _ZN7S7059C23v36Ev();
extern void _ZN7S7059C23v37Ev();
extern void _ZN7S7059C23v38Ev();
extern void _ZN7S7059C23v39Ev();
extern void _ZN7S7059C23v40Ev();
extern void _ZN7S7059C23v41Ev();
extern void _ZN7S7059C23v42Ev();
extern void _ZN7S7059C23v43Ev();
extern void _ZN7S7059C23v44Ev();
extern void _ZN7S7059C23v45Ev();
extern void _ZN7S7059C23v46Ev();
extern void _ZN7S7059C23v47Ev();
extern void _ZN7S7059C23v48Ev();
extern void _ZN7S7059C23v49Ev();
extern void _ZN7S7059C23v50Ev();
extern void _ZN7S7059C23v51Ev();
extern void _ZN7S7059C23v52Ev();
extern void _ZN7S7059C23v53Ev();
extern void _ZN7S7059C23v54Ev();
extern void _ZN7S7059C23v55Ev();
extern void _ZN7S7059C23v56Ev();
extern void _ZN7S7059C23v57Ev();
extern void _ZN7S7059C23v58Ev();
extern void _ZN7S7059C23v59Ev();
extern void _ZN7S7059C23v60Ev();
extern void _ZN7S7059C23v61Ev();
extern void _ZN7S7059C23v62Ev();
extern void _ZN7S7059C23v63Ev();
extern void _ZN7S7059C23v64Ev();
extern void _ZN7S7059C23v65Ev();
extern void _ZN7S7059C23v66Ev();
extern void _ZN7S7059C23v67Ev();
extern void _ZN7S7059C23v68Ev();
extern void _ZN7S7059C23v69Ev();
extern void _ZN7S7059C12v1Ev();
extern void _ZN7S7059C12v2Ev();
extern void _ZN7S7059C12v3Ev();
extern void _ZN7S7059C12v4Ev();
extern void _ZN7S7059C12v5Ev();
static  VTBL_ENTRY vtc_S7059C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7059C1[0]),
  (VTBL_ENTRY)&_ZN7S7059C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7059C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7059C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7059C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7059C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7059C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v24Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v25Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v26Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v27Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v28Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v29Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v30Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v31Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v32Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v33Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v34Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v35Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v36Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v37Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v38Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v39Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v40Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v41Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v42Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v43Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v44Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v50Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v51Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v52Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v53Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v54Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v55Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v56Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v57Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v58Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v59Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v60Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v61Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v62Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v63Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v64Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v65Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v66Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v67Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v68Ev,
  (VTBL_ENTRY)&_ZN7S7059C23v69Ev,
  (VTBL_ENTRY)&_ZN7S7059C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7059C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7059C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7059C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7059C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7059C1[];
extern  VTBL_ENTRY _ZTV7S7059C1[];
Class_Descriptor cd_S7059C1 = {  "S7059C1", // class name
  bases_S7059C1, 1,
  &(vtc_S7059C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S7059C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7059C1),73, //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  S19934C2  {
  short s19934c2f0;
  __tsi64 s19934c2f1[4];
  void *s19934c2f2;
  char s19934c2f3;
  void *s19934c2f4;
  __tsi64 s19934c2f5;
  int s19934c2f6[10];
  virtual void  v1(); // _ZN8S19934C22v1Ev
  ~S19934C2(); // tgen
  S19934C2(); // tgen
};
//SIG(-1 S19934C2) C1{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]}


void  S19934C2 ::v1(){vfunc_called(this, "_ZN8S19934C22v1Ev");}
S19934C2 ::~S19934C2(){ note_dtor("S19934C2", this);} // tgen
S19934C2 ::S19934C2(){ note_ctor("S19934C2", this);} // tgen

static void Test_S19934C2()
{
  extern Class_Descriptor cd_S19934C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,26)];
    init_test(&cd_S19934C2, buf);
    S19934C2 *dp, &lv = *(dp=new (buf) S19934C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,100), "sizeof(S19934C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19934C2)");
    check_field_offset(lv, s19934c2f0, ABISELECT(8,4), "S19934C2.s19934c2f0");
    check_field_offset(lv, s19934c2f1, ABISELECT(16,8), "S19934C2.s19934c2f1");
    check_field_offset(lv, s19934c2f2, ABISELECT(48,40), "S19934C2.s19934c2f2");
    check_field_offset(lv, s19934c2f3, ABISELECT(56,44), "S19934C2.s19934c2f3");
    check_field_offset(lv, s19934c2f4, ABISELECT(64,48), "S19934C2.s19934c2f4");
    check_field_offset(lv, s19934c2f5, ABISELECT(72,52), "S19934C2.s19934c2f5");
    check_field_offset(lv, s19934c2f6, ABISELECT(80,60), "S19934C2.s19934c2f6");
    test_class_info(&lv, &cd_S19934C2);
    dp->~S19934C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C2(Test_S19934C2, "S19934C2", ABISELECT(120,100));

#else // __cplusplus

extern void _ZN8S19934C2C1Ev();
extern void _ZN8S19934C2D1Ev();
Name_Map name_map_S19934C2[] = {
  NSPAIR(_ZN8S19934C2C1Ev),
  NSPAIR(_ZN8S19934C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19934C2[];
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C2[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
Class_Descriptor cd_S19934C2 = {  "S19934C2", // class name
  0,0,//no base classes
  &(vtc_S19934C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,100), // object size
  NSPAIRA(_ZTI8S19934C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19934C2),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  S19934C6  : virtual S19934C2 {
  ::S19934C2 s19934c6f0[8];
  int s19934c6f1;
  char s19934c6f2;
  ::S19934C2 s19934c6f3;
  int s19934c6f4;
  ~S19934C6(); // tgen
  S19934C6(); // tgen
};
//SIG(-1 S19934C6) C1{ VBC2{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} FC2[8] Fi Fc FC2 Fi}


S19934C6 ::~S19934C6(){ note_dtor("S19934C6", this);} // tgen
S19934C6 ::S19934C6(){ note_ctor("S19934C6", this);} // tgen

static void Test_S19934C6()
{
  extern Class_Descriptor cd_S19934C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(154,255)];
    init_test(&cd_S19934C6, buf);
    S19934C6 *dp, &lv = *(dp=new (buf) S19934C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1224,1016), "sizeof(S19934C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19934C6)");
    check_base_class_offset(lv, (S19934C2*), ABISELECT(1104,916), "S19934C6");
    check_field_offset(lv, s19934c6f0, ABISELECT(8,4), "S19934C6.s19934c6f0");
    check_field_offset(lv, s19934c6f1, ABISELECT(968,804), "S19934C6.s19934c6f1");
    check_field_offset(lv, s19934c6f2, ABISELECT(972,808), "S19934C6.s19934c6f2");
    check_field_offset(lv, s19934c6f3, ABISELECT(976,812), "S19934C6.s19934c6f3");
    check_field_offset(lv, s19934c6f4, ABISELECT(1096,912), "S19934C6.s19934c6f4");
    test_class_info(&lv, &cd_S19934C6);
    dp->~S19934C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C6(Test_S19934C6, "S19934C6", ABISELECT(1224,1016));

#else // __cplusplus

extern void _ZN8S19934C6C1Ev();
extern void _ZN8S19934C6D1Ev();
Name_Map name_map_S19934C6[] = {
  NSPAIR(_ZN8S19934C6C1Ev),
  NSPAIR(_ZN8S19934C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
static Base_Class bases_S19934C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C2,    ABISELECT(1104,916), //bcp->offset
    3, //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 _ZTI8S19934C6[];
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C6[] = {
  ABISELECT(1104,916),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  0,
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19934C6[];
static  VTT_ENTRY vtt_S19934C6[] = {
  {&(_ZTV8S19934C6[3]),  3,7},
  {&(_ZTV8S19934C6[6]),  6,7},
};
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
Class_Descriptor cd_S19934C6 = {  "S19934C6", // class name
  bases_S19934C6, 1,
  &(vtc_S19934C6[0]), // expected_vtbl_contents
  &(vtt_S19934C6[0]), // expected_vtt_contents
  ABISELECT(1224,1016), // object size
  NSPAIRA(_ZTI8S19934C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19934C6),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19934C6),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  S19934C7  : virtual S19934C2 , virtual S19934C6 {
  void *s19934c7f0;
  int s19934c7f1[6];
  char s19934c7f2;
  ::S19934C2 s19934c7f3;
  void *s19934c7f4;
  virtual  ~S19934C7(); // _ZN8S19934C7D2Ev
  S19934C7(); // tgen
};
//SIG(-1 S19934C7) C1{ VBC2{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} VBC3{ VBC2 FC2[8] Fi Fc FC2 Fi} vd Fp Fi[6] Fc FC2 Fp}


 S19934C7 ::~S19934C7(){ note_dtor("S19934C7", this);}
S19934C7 ::S19934C7(){ note_ctor("S19934C7", this);} // tgen

static void Test_S19934C7()
{
  extern Class_Descriptor cd_S19934C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(176,290)];
    init_test(&cd_S19934C7, buf);
    S19934C7 *dp, &lv = *(dp=new (buf) S19934C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1400,1156), "sizeof(S19934C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19934C7)");
    check_base_class_offset(lv, (S19934C2*), ABISELECT(176,140), "S19934C7");
    check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(176,140), "S19934C7");
    check_base_class_offset(lv, (S19934C6*), ABISELECT(296,240), "S19934C7");
    check_field_offset(lv, s19934c7f0, ABISELECT(8,4), "S19934C7.s19934c7f0");
    check_field_offset(lv, s19934c7f1, ABISELECT(16,8), "S19934C7.s19934c7f1");
    check_field_offset(lv, s19934c7f2, ABISELECT(40,32), "S19934C7.s19934c7f2");
    check_field_offset(lv, s19934c7f3, ABISELECT(48,36), "S19934C7.s19934c7f3");
    check_field_offset(lv, s19934c7f4, ABISELECT(168,136), "S19934C7.s19934c7f4");
    test_class_info(&lv, &cd_S19934C7);
    dp->~S19934C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C7(Test_S19934C7, "S19934C7", ABISELECT(1400,1156));

#else // __cplusplus

extern void _ZN8S19934C7C1Ev();
extern void _ZN8S19934C7D2Ev();
Name_Map name_map_S19934C7[] = {
  NSPAIR(_ZN8S19934C7C1Ev),
  NSPAIR(_ZN8S19934C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
static Base_Class bases_S19934C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C2,    ABISELECT(176,140), //bcp->offset
    6, //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_S19934C6,    ABISELECT(296,240), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //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 _ZTI8S19934C7[];
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C7[] = {
  ABISELECT(296,240),
  ABISELECT(176,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
  0,
  ABISELECT(-176,-140),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  ABISELECT(-120,-100),
  ABISELECT(-296,-240),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern VTBL_ENTRY _ZTV8S19934C7[];
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C7[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__8S19934C7[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTT_ENTRY vtt_S19934C7[] = {
  {&(_ZTV8S19934C7[4]),  4,13},
  {&(_ZTV8S19934C7[9]),  9,13},
  {&(_ZTV8S19934C7[13]),  13,13},
  {&(_tg__ZTV8S19934C6__8S19934C7[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__8S19934C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
Class_Descriptor cd_S19934C7 = {  "S19934C7", // class name
  bases_S19934C7, 2,
  &(vtc_S19934C7[0]), // expected_vtbl_contents
  &(vtt_S19934C7[0]), // expected_vtt_contents
  ABISELECT(1400,1156), // object size
  NSPAIRA(_ZTI8S19934C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19934C7),13, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19934C7),5, //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  S19934C5  : virtual S19934C2 , S19934C6 , S19934C7 {
  __tsi64 s19934c5f0;
  void *s19934c5f1[2];
  virtual  ~S19934C5(); // _ZN8S19934C5D2Ev
  virtual void  v2(); // _ZN8S19934C52v2Ev
  S19934C5(); // tgen
};
//SIG(-1 S19934C5) C1{ VBC2{ v2 Fs FL[4] Fp Fc Fp FL Fi[10]} BC3{ VBC2 FC2[8] Fi Fc FC2 Fi} BC4{ VBC2 VBC3 vd Fp Fi[6] Fc FC2 Fp} vd v1 FL Fp[2]}


 S19934C5 ::~S19934C5(){ note_dtor("S19934C5", this);}
void  S19934C5 ::v2(){vfunc_called(this, "_ZN8S19934C52v2Ev");}
S19934C5 ::S19934C5(){ note_ctor("S19934C5", this);} // tgen

static void Test_S19934C5()
{
  extern Class_Descriptor cd_S19934C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(317,523)];
    init_test(&cd_S19934C5, buf);
    S19934C5 *dp, &lv = *(dp=new (buf) S19934C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2528,2088), "sizeof(S19934C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19934C5)");
    check_base_class_offset(lv, (S19934C2*), ABISELECT(1304,1072), "S19934C5");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(1304,1072), "S19934C5");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*), ABISELECT(1304,1072), "S19934C5");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(1304,1072), "S19934C5");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*), 0, "S19934C5");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*), ABISELECT(1424,1172), "S19934C5");
    check_base_class_offset(lv, (S19934C7*), ABISELECT(1104,916), "S19934C5");
    check_field_offset(lv, s19934c5f0, ABISELECT(1280,1056), "S19934C5.s19934c5f0");
    check_field_offset(lv, s19934c5f1, ABISELECT(1288,1064), "S19934C5.s19934c5f1");
    test_class_info(&lv, &cd_S19934C5);
    dp->~S19934C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C5(Test_S19934C5, "S19934C5", ABISELECT(2528,2088));

#else // __cplusplus

extern void _ZN8S19934C5C1Ev();
extern void _ZN8S19934C5D2Ev();
Name_Map name_map_S19934C5[] = {
  NSPAIR(_ZN8S19934C5C1Ev),
  NSPAIR(_ZN8S19934C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
static Base_Class bases_S19934C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C2,    ABISELECT(1304,1072), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //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
  1, 1},
  {&cd_S19934C6,    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_S19934C6,    ABISELECT(1424,1172), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19934C7,    ABISELECT(1104,916), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19934C5[];
extern void _ZN8S19934C5D1Ev();
extern void _ZN8S19934C5D0Ev();
extern void _ZN8S19934C52v2Ev();
extern void ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev)();
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C5[] = {
  ABISELECT(1424,1172),
  ABISELECT(1304,1072),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  ABISELECT(320,256),
  ABISELECT(200,156),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev),
  0,
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  ABISELECT(-120,-100),
  ABISELECT(-1424,-1172),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
};
extern VTBL_ENTRY _ZTV8S19934C5[];
static  VTBL_ENTRY _tg__ZTV8S19934C6__A__8S19934C5[] = {
  ABISELECT(1304,1072),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A__8S19934C5[] = {
  0,
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C7__8S19934C5[] = {
  ABISELECT(320,256),
  ABISELECT(200,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C7__8S19934C5[] = {
  0,
  ABISELECT(-200,-156),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C7__8S19934C5[] = {
  ABISELECT(-120,-100),
  ABISELECT(-320,-256),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C5[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A1__8S19934C5[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTT_ENTRY vtt_S19934C5[] = {
  {&(_ZTV8S19934C5[4]),  4,20},
  {&(_tg__ZTV8S19934C6__A__8S19934C5[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A__8S19934C5[3]),  3,4},
  {&(_tg__ZTV8S19934C7__8S19934C5[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C7__8S19934C5[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C7__8S19934C5[3]),  3,3},
  {&(_ZTV8S19934C5[16]),  16,20},
  {&(_ZTV8S19934C5[11]),  11,20},
  {&(_ZTV8S19934C5[20]),  20,20},
  {&(_tg__ZTV8S19934C6__A1__8S19934C5[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A1__8S19934C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19934C5[];
extern  VTBL_ENTRY _ZTV8S19934C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C5[];
Class_Descriptor cd_S19934C5 = {  "S19934C5", // class name
  bases_S19934C5, 4,
  &(vtc_S19934C5[0]), // expected_vtbl_contents
  &(vtt_S19934C5[0]), // expected_vtt_contents
  ABISELECT(2528,2088), // object size
  NSPAIRA(_ZTI8S19934C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19934C5),20, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19934C5),11, //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  S19934C4  : virtual S19934C2 , S19934C5 , S19934C6 , S19934C7 {
  __tsi64 s19934c4f0;
  ::S19934C7 s19934c4f1[2];
  __tsi64 s19934c4f2;
  int s19934c4f3;
  ::S20677C6_nt s19934c4f4;
  virtual  ~S19934C4(); // _ZN8S19934C4D2Ev
  S19934C4(); // tgen
};
//SIG(-1 S19934C4) C1{ VBC2{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} BC3{ VBC2 BC4{ VBC2 FC2[8] Fi Fc FC2 Fi} BC5{ VBC2 VBC4 vd Fp Fi[6] Fc FC2 Fp} vd v2 FL Fp[2]} BC4 BC5 vd FL FC5[2] FL Fi FC6{}}


 S19934C4 ::~S19934C4(){ note_dtor("S19934C4", this);}
S19934C4 ::S19934C4(){ note_ctor("S19934C4", this);} // tgen

static void Test_S19934C4()
{
  extern Class_Descriptor cd_S19934C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(830,1371)];
    init_test(&cd_S19934C4, buf);
    S19934C4 *dp, &lv = *(dp=new (buf) S19934C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6632,5480), "sizeof(S19934C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19934C4)");
    check_base_class_offset(lv, (S19934C2*), ABISELECT(5408,4464), "S19934C4");
    check_base_class_offset(lv, (S19934C2*)(S19934C5*), ABISELECT(5408,4464), "S19934C4");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C5*), ABISELECT(5408,4464), "S19934C4");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C5*), ABISELECT(5408,4464), "S19934C4");
    /*is_ambiguous_... S19934C4::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(5408,4464), "S19934C4");
    /*is_ambiguous_... S19934C4::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(5408,4464), "S19934C4");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C7*), ABISELECT(5408,4464), "S19934C4");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C5*), 0, "S19934C4");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C5*), ABISELECT(5528,4564), "S19934C4");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C7*), ABISELECT(5528,4564), "S19934C4");
    check_base_class_offset(lv, (S19934C7*)(S19934C5*), ABISELECT(1104,916), "S19934C4");
    check_base_class_offset(lv, (S19934C5*), 0, "S19934C4");
    /*is_ambiguous_... S19934C4::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*), ABISELECT(1304,1072), "S19934C4");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C7*), ABISELECT(2408,1988), "S19934C4");
    check_field_offset(lv, s19934c4f0, ABISELECT(2584,2128), "S19934C4.s19934c4f0");
    check_field_offset(lv, s19934c4f1, ABISELECT(2592,2136), "S19934C4.s19934c4f1");
    check_field_offset(lv, s19934c4f2, ABISELECT(5392,4448), "S19934C4.s19934c4f2");
    check_field_offset(lv, s19934c4f3, ABISELECT(5400,4456), "S19934C4.s19934c4f3");
    check_field_offset(lv, s19934c4f4, ABISELECT(5404,4460), "S19934C4.s19934c4f4");
    test_class_info(&lv, &cd_S19934C4);
    dp->~S19934C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C4(Test_S19934C4, "S19934C4", ABISELECT(6632,5480));

#else // __cplusplus

extern void _ZN8S19934C4C1Ev();
extern void _ZN8S19934C4D2Ev();
Name_Map name_map_S19934C4[] = {
  NSPAIR(_ZN8S19934C4C1Ev),
  NSPAIR(_ZN8S19934C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C5;
extern VTBL_ENTRY _ZTI8S19934C5[];
extern  VTBL_ENTRY _ZTV8S19934C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C5[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
static Base_Class bases_S19934C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C2,    ABISELECT(5408,4464), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19934C6,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19934C6,    ABISELECT(5528,4564), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19934C7,    ABISELECT(1104,916), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19934C5,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19934C6,    ABISELECT(1304,1072), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19934C7,    ABISELECT(2408,1988), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19934C4[];
extern void _ZN8S19934C4D1Ev();
extern void _ZN8S19934C4D0Ev();
extern void _ZN8S19934C52v2Ev();
extern void ABISELECT(_ZThn1104_N8S19934C4D1Ev,_ZThn916_N8S19934C4D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C4D0Ev,_ZThn916_N8S19934C4D0Ev)();
extern void ABISELECT(_ZThn2408_N8S19934C4D1Ev,_ZThn1988_N8S19934C4D1Ev)();
extern void ABISELECT(_ZThn2408_N8S19934C4D0Ev,_ZThn1988_N8S19934C4D0Ev)();
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C4[] = {
  ABISELECT(5528,4564),
  ABISELECT(5408,4464),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&_ZN8S19934C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  ABISELECT(4424,3648),
  ABISELECT(4304,3548),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C4D1Ev,_ZThn916_N8S19934C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C4D0Ev,_ZThn916_N8S19934C4D0Ev),
  ABISELECT(4104,3392),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  ABISELECT(3120,2576),
  ABISELECT(3000,2476),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C4D1Ev,_ZThn1988_N8S19934C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C4D0Ev,_ZThn1988_N8S19934C4D0Ev),
  0,
  ABISELECT(-5408,-4464),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  ABISELECT(-120,-100),
  ABISELECT(-5528,-4564),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
};
extern VTBL_ENTRY _ZTV8S19934C4[];
extern void _ZN8S19934C5D1Ev();
extern void _ZN8S19934C5D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__8S19934C4[] = {
  ABISELECT(5528,4564),
  ABISELECT(5408,4464),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C5__8S19934C4[] = {
  ABISELECT(5408,4464),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C5__8S19934C4[] = {
  0,
  ABISELECT(-5408,-4464),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__8S19934C4[] = {
  ABISELECT(4424,3648),
  ABISELECT(4304,3548),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C5__8S19934C4[] = {
  0,
  ABISELECT(-4304,-3548),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C5__8S19934C4[] = {
  ABISELECT(-120,-100),
  ABISELECT(-4424,-3648),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C5__8S19934C4[] = {
  0,
  ABISELECT(-5408,-4464),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__8S19934C5__8S19934C4[] = {
  ABISELECT(4424,3648),
  ABISELECT(4304,3548),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C5__8S19934C4[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5528,-4564),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A__8S19934C4[] = {
  ABISELECT(4104,3392),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A__8S19934C4[] = {
  0,
  ABISELECT(-4104,-3392),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C7__A1__8S19934C4[] = {
  ABISELECT(3120,2576),
  ABISELECT(3000,2476),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C7__A1__8S19934C4[] = {
  0,
  ABISELECT(-3000,-2476),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C7__A1__8S19934C4[] = {
  ABISELECT(-120,-100),
  ABISELECT(-3120,-2576),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C4[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A1__8S19934C4[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTT_ENTRY vtt_S19934C4[] = {
  {&(_ZTV8S19934C4[4]),  4,29},
  {&(_tg__ZTV8S19934C5__8S19934C4[4]),  4,7},
  {&(_tg__ZTV8S19934C68S19934C5__8S19934C4[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C5__8S19934C4[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__8S19934C4[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C5__8S19934C4[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C5__8S19934C4[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C5__8S19934C4[3]),  3,4},
  {&(_tg__ZTV8S19934C7__8S19934C5__8S19934C4[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C5__8S19934C4[3]),  3,3},
  {&(_tg__ZTV8S19934C6__A__8S19934C4[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A__8S19934C4[3]),  3,4},
  {&(_tg__ZTV8S19934C7__A1__8S19934C4[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C7__A1__8S19934C4[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C7__A1__8S19934C4[3]),  3,3},
  {&(_ZTV8S19934C4[25]),  25,29},
  {&(_ZTV8S19934C4[11]),  11,29},
  {&(_ZTV8S19934C4[29]),  29,29},
  {&(_ZTV8S19934C4[16]),  16,29},
  {&(_ZTV8S19934C4[20]),  20,29},
  {&(_tg__ZTV8S19934C6__A1__8S19934C4[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A1__8S19934C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19934C4[];
extern  VTBL_ENTRY _ZTV8S19934C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C4[];
Class_Descriptor cd_S19934C4 = {  "S19934C4", // class name
  bases_S19934C4, 7,
  &(vtc_S19934C4[0]), // expected_vtbl_contents
  &(vtt_S19934C4[0]), // expected_vtt_contents
  ABISELECT(6632,5480), // object size
  NSPAIRA(_ZTI8S19934C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19934C4),29, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19934C4),22, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19934C10  {
  __tsi64 s19934c10f0;
  ::S19934C5 s19934c10f1;
  void *s19934c10f2[8];
  long s19934c10f3;
  void  mf19934c10(); // _ZN9S19934C1010mf19934c10Ev
};
//SIG(-1 S19934C10) C1{ m FL FC2{ VBC3{ v2 Fs FL[4] Fp Fc Fp FL Fi[10]} BC4{ VBC3 FC3[8] Fi Fc FC3 Fi} BC5{ VBC3 VBC4 vd Fp Fi[6] Fc FC3 Fp} vd v1 FL Fp[2]} Fp[8] Fl}


void  S19934C10 ::mf19934c10(){}

static void Test_S19934C10()
{
  {
    init_simple_test("S19934C10");
    S19934C10 lv;
    check2(sizeof(lv), ABISELECT(2608,2132), "sizeof(S19934C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19934C10)");
    check_field_offset(lv, s19934c10f0, 0, "S19934C10.s19934c10f0");
    check_field_offset(lv, s19934c10f1, 8, "S19934C10.s19934c10f1");
    check_field_offset(lv, s19934c10f2, ABISELECT(2536,2096), "S19934C10.s19934c10f2");
    check_field_offset(lv, s19934c10f3, ABISELECT(2600,2128), "S19934C10.s19934c10f3");
  }
}
static Arrange_To_Call_Me vS19934C10(Test_S19934C10, "S19934C10", ABISELECT(2608,2132));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S19934C10[];
VTBL_ENTRY *P__ZTI9S19934C10 = _ZTI9S19934C10; 
Class_Descriptor cd_S19934C10 = {  "S19934C10", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(2608,2132), // object size
  NSPAIRA(_ZTI9S19934C10),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19934C11  : S19934C6 , virtual S19934C10 , S19934C7 , S19934C2 {
  void *s19934c11f0;
  int s19934c11f1[3];
  ~S19934C11(); // tgen
  S19934C11(); // tgen
};
//SIG(-1 S19934C11) C1{ BC2{ VBC3{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} FC3[8] Fi Fc FC3 Fi} VBC4{ m FL FC5{ VBC3 BC2 BC6{ VBC3 VBC2 vd Fp Fi[6] Fc FC3 Fp} vd v2 FL Fp[2]} Fp[8] Fl} BC6 BC3 Fp Fi[3]}


S19934C11 ::~S19934C11(){ note_dtor("S19934C11", this);} // tgen
S19934C11 ::S19934C11(){ note_ctor("S19934C11", this);} // tgen

static void Test_S19934C11()
{
  extern Class_Descriptor cd_S19934C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(658,1081)];
    init_test(&cd_S19934C11, buf);
    S19934C11 *dp, &lv = *(dp=new (buf) S19934C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5256,4320), "sizeof(S19934C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19934C11)");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(1424,1172), "S19934C11");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*), ABISELECT(1424,1172), "S19934C11");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(1424,1172), "S19934C11");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*), 0, "S19934C11");
    check_base_class_offset(lv, (S19934C10*), ABISELECT(1544,1272), "S19934C11");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*), ABISELECT(4152,3404), "S19934C11");
    check_base_class_offset(lv, (S19934C7*), ABISELECT(1104,916), "S19934C11");
    /*is_ambiguous_... S19934C11::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*), ABISELECT(1280,1056), "S19934C11");
    check_field_offset(lv, s19934c11f0, ABISELECT(1400,1156), "S19934C11.s19934c11f0");
    check_field_offset(lv, s19934c11f1, ABISELECT(1408,1160), "S19934C11.s19934c11f1");
    test_class_info(&lv, &cd_S19934C11);
    dp->~S19934C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C11(Test_S19934C11, "S19934C11", ABISELECT(5256,4320));

#else // __cplusplus

extern void _ZN9S19934C11C1Ev();
extern void _ZN9S19934C11D1Ev();
Name_Map name_map_S19934C11[] = {
  NSPAIR(_ZN9S19934C11C1Ev),
  NSPAIR(_ZN9S19934C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
static Base_Class bases_S19934C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C2,    ABISELECT(1424,1172), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //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_S19934C6,    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_S19934C10,    ABISELECT(1544,1272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19934C6,    ABISELECT(4152,3404), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19934C7,    ABISELECT(1104,916), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19934C2,    ABISELECT(1280,1056), //bcp->offset
    13, //bcp->virtual_function_table_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 _ZTI9S19934C11[];
extern void _ZN9S19934C11D1Ev();
extern void _ZN9S19934C11D0Ev();
extern void ABISELECT(_ZThn1104_N9S19934C11D1Ev,_ZThn916_N9S19934C11D1Ev)();
extern void ABISELECT(_ZThn1104_N9S19934C11D0Ev,_ZThn916_N9S19934C11D0Ev)();
extern void _ZN8S19934C22v1Ev();
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C11[] = {
  ABISELECT(4152,3404),
  ABISELECT(1544,1272),
  ABISELECT(1424,1172),
  0,
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN9S19934C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19934C11D0Ev,
  ABISELECT(3048,2488),
  ABISELECT(320,256),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N9S19934C11D1Ev,_ZThn916_N9S19934C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N9S19934C11D0Ev,_ZThn916_N9S19934C11D0Ev),
  ABISELECT(-1280,-1056),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  0,
  ABISELECT(-1424,-1172),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  ABISELECT(-2728,-2232),
  ABISELECT(-4152,-3404),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
};
extern VTBL_ENTRY _ZTV9S19934C11[];
static  VTBL_ENTRY _tg__ZTV8S19934C6__A__9S19934C11[] = {
  ABISELECT(1424,1172),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A__9S19934C11[] = {
  0,
  ABISELECT(-1424,-1172),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C7__9S19934C11[] = {
  ABISELECT(3048,2488),
  ABISELECT(320,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C7__9S19934C11[] = {
  0,
  ABISELECT(-320,-256),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C7__9S19934C11[] = {
  ABISELECT(-2728,-2232),
  ABISELECT(-3048,-2488),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__9S19934C11[] = {
  ABISELECT(-2728,-2232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A1__9S19934C11[] = {
  0,
  ABISELECT(2728,2232),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTT_ENTRY vtt_S19934C11[] = {
  {&(_ZTV9S19934C11[5]),  5,23},
  {&(_tg__ZTV8S19934C6__A__9S19934C11[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A__9S19934C11[3]),  3,4},
  {&(_tg__ZTV8S19934C7__9S19934C11[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C7__9S19934C11[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C7__9S19934C11[3]),  3,3},
  {&(_ZTV9S19934C11[19]),  19,23},
  {&(_ZTV9S19934C11[11]),  11,23},
  {&(_ZTV9S19934C11[23]),  23,23},
  {&(_tg__ZTV8S19934C6__A1__9S19934C11[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A1__9S19934C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S19934C11[];
extern  VTBL_ENTRY _ZTV9S19934C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19934C11[];
Class_Descriptor cd_S19934C11 = {  "S19934C11", // class name
  bases_S19934C11, 6,
  &(vtc_S19934C11[0]), // expected_vtbl_contents
  &(vtt_S19934C11[0]), // expected_vtt_contents
  ABISELECT(5256,4320), // object size
  NSPAIRA(_ZTI9S19934C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19934C11),23, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19934C11),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19934C9  : S19934C10 , virtual S19934C5 , virtual S19934C11 , S19934C2 {
  __tsi64 s19934c9f0;
  void *s19934c9f1[10];
  virtual  ~S19934C9(); // _ZN8S19934C9D2Ev
  virtual void  v3(); // _ZN8S19934C92v3Ev
  S19934C9(); // tgen
};
//SIG(-1 S19934C9) C1{ BC2{ m FL FC3{ VBC4{ v2 Fs FL[4] Fp Fc Fp FL Fi[10]} BC5{ VBC4 FC4[8] Fi Fc FC4 Fi} BC6{ VBC4 VBC5 vd Fp Fi[6] Fc FC4 Fp} vd v3 FL Fp[2]} Fp[8] Fl} VBC3 VBC7{ BC5 VBC2 BC6 BC4 Fp Fi[3]} BC4 vd v1 FL Fp[10]}


 S19934C9 ::~S19934C9(){ note_dtor("S19934C9", this);}
void  S19934C9 ::v3(){vfunc_called(this, "_ZN8S19934C92v3Ev");}
S19934C9 ::S19934C9(){ note_ctor("S19934C9", this);} // tgen

static void Test_S19934C9()
{
  extern Class_Descriptor cd_S19934C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1173,1919)];
    init_test(&cd_S19934C9, buf);
    S19934C9 *dp, &lv = *(dp=new (buf) S19934C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9376,7672), "sizeof(S19934C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19934C9)");
    /*is_ambiguous_... S19934C9::S19934C10 */ AMB_check_base_class_offset(lv, (S19934C10*), ABISELECT(120,100), "S19934C9");
    check_base_class_offset(lv, (S19934C2*)(S19934C5*), ABISELECT(4120,3352), "S19934C9");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C5*), ABISELECT(4120,3352), "S19934C9");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C5*), ABISELECT(4120,3352), "S19934C9");
    /*is_ambiguous_... S19934C9::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(4120,3352), "S19934C9");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C11*), ABISELECT(4120,3352), "S19934C9");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C11*), ABISELECT(4120,3352), "S19934C9");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C5*), ABISELECT(2816,2280), "S19934C9");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C5*), ABISELECT(4240,3452), "S19934C9");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C11*), ABISELECT(4240,3452), "S19934C9");
    check_base_class_offset(lv, (S19934C7*)(S19934C5*), ABISELECT(3920,3196), "S19934C9");
    check_base_class_offset(lv, (S19934C5*), ABISELECT(2816,2280), "S19934C9");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C11*), ABISELECT(5344,4368), "S19934C9");
    check_base_class_offset(lv, (S19934C10*)(S19934C11*), ABISELECT(6768,5540), "S19934C9");
    check_base_class_offset(lv, (S19934C7*)(S19934C11*), ABISELECT(6448,5284), "S19934C9");
    /*is_ambiguous_... S19934C11::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C11*), ABISELECT(6624,5424), "S19934C9");
    check_base_class_offset(lv, (S19934C11*), ABISELECT(5344,4368), "S19934C9");
    /*is_ambiguous_... S19934C9::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*), 0, "S19934C9");
    check_field_offset(lv, s19934c9f0, ABISELECT(2728,2232), "S19934C9.s19934c9f0");
    check_field_offset(lv, s19934c9f1, ABISELECT(2736,2240), "S19934C9.s19934c9f1");
    test_class_info(&lv, &cd_S19934C9);
    dp->~S19934C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C9(Test_S19934C9, "S19934C9", ABISELECT(9376,7672));

#else // __cplusplus

extern void _ZN8S19934C9C1Ev();
extern void _ZN8S19934C9D2Ev();
Name_Map name_map_S19934C9[] = {
  NSPAIR(_ZN8S19934C9C1Ev),
  NSPAIR(_ZN8S19934C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C5;
extern VTBL_ENTRY _ZTI8S19934C5[];
extern  VTBL_ENTRY _ZTV8S19934C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C5[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C11;
extern VTBL_ENTRY _ZTI9S19934C11[];
extern  VTBL_ENTRY _ZTV9S19934C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19934C11[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
static Base_Class bases_S19934C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C10,    ABISELECT(120,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19934C2,    ABISELECT(4120,3352), //bcp->offset
    26, //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
    2, //immediately_derived
  0, 1},
  {&cd_S19934C6,    ABISELECT(2816,2280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    5, //immediately_derived
  0, 0},
  {&cd_S19934C6,    ABISELECT(4240,3452), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19934C7,    ABISELECT(3920,3196), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19934C5,    ABISELECT(2816,2280), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19934C6,    ABISELECT(5344,4368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19934C10,    ABISELECT(6768,5540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19934C7,    ABISELECT(6448,5284), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19934C2,    ABISELECT(6624,5424), //bcp->offset
    48, //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
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19934C11,    ABISELECT(5344,4368), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19934C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19934C9[];
extern void _ZN8S19934C22v1Ev();
extern void _ZN8S19934C9D1Ev();
extern void _ZN8S19934C9D0Ev();
extern void _ZN8S19934C92v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev)();
extern void ABISELECT(_ZThn2816_N8S19934C9D1Ev,_ZThn2280_N8S19934C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev)();
extern void ABISELECT(_ZThn2816_N8S19934C9D0Ev,_ZThn2280_N8S19934C9D0Ev)() __attribute__((weak));
extern void _ZN8S19934C52v2Ev();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C9D1Ev,_ZTvn916_n20_N8S19934C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C9D0Ev,_ZTvn916_n20_N8S19934C9D0Ev)();
extern void _ZN8S19934C22v1Ev();
extern void ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev)();
extern void ABISELECT(_ZThn5344_N8S19934C9D1Ev,_ZThn4368_N8S19934C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev)();
extern void ABISELECT(_ZThn5344_N8S19934C9D0Ev,_ZThn4368_N8S19934C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1104_n48_N8S19934C9D1Ev,_ZTvn916_n24_N8S19934C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N8S19934C9D0Ev,_ZTvn916_n24_N8S19934C9D0Ev)();
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C9[] = {
  ABISELECT(6768,5540),
  ABISELECT(5344,4368),
  ABISELECT(4240,3452),
  ABISELECT(4120,3352),
  ABISELECT(2816,2280),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19934C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C92v3Ev,
  0,
  ABISELECT(-2816,-2280),
  ABISELECT(1424,1172),
  ABISELECT(1304,1072),
  ABISELECT(-2816,-2280),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  ABISELECT(320,256),
  ABISELECT(200,156),
  ABISELECT(-3920,-3196),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C9D1Ev,_ZTvn916_n20_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C9D0Ev,_ZTvn916_n20_N8S19934C9D0Ev),
  0,
  ABISELECT(-4120,-3352),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  ABISELECT(-120,-100),
  ABISELECT(-4240,-3452),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  ABISELECT(1280,1056),
  ABISELECT(-5344,-4368),
  ABISELECT(-1104,-916),
  ABISELECT(1424,1172),
  ABISELECT(-1224,-1016),
  ABISELECT(-5344,-4368),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev),
  ABISELECT(-2208,-1832),
  ABISELECT(-2328,-1932),
  ABISELECT(-6448,-5284),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C9D1Ev,_ZTvn916_n24_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C9D0Ev,_ZTvn916_n24_N8S19934C9D0Ev),
  ABISELECT(-6624,-5424),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19934C9[];
extern void _ZN8S19934C5D1Ev();
extern void _ZN8S19934C5D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__8S19934C9[] = {
  ABISELECT(1424,1172),
  ABISELECT(1304,1072),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C5__8S19934C9[] = {
  ABISELECT(1304,1072),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C5__8S19934C9[] = {
  0,
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__8S19934C9[] = {
  ABISELECT(320,256),
  ABISELECT(200,156),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C5__8S19934C9[] = {
  0,
  ABISELECT(-200,-156),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C5__8S19934C9[] = {
  ABISELECT(-120,-100),
  ABISELECT(-320,-256),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C5__8S19934C9[] = {
  0,
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__8S19934C5__8S19934C9[] = {
  ABISELECT(320,256),
  ABISELECT(200,156),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C5__8S19934C9[] = {
  ABISELECT(-120,-100),
  ABISELECT(-1424,-1172),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C9[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A1__8S19934C9[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN9S19934C11D1Ev();
extern void _ZN9S19934C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19934C11__8S19934C9[] = {
  ABISELECT(-1104,-916),
  ABISELECT(1424,1172),
  ABISELECT(-1224,-1016),
  0,
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN9S19934C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19934C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C69S19934C11__A2__8S19934C9[] = {
  ABISELECT(-1224,-1016),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C69S19934C11__A2__8S19934C9[] = {
  0,
  ABISELECT(1224,1016),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C79S19934C11__A1__8S19934C9[] = {
  ABISELECT(-2208,-1832),
  ABISELECT(-2328,-1932),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C79S19934C11__A1__8S19934C9[] = {
  0,
  ABISELECT(2328,1932),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C79S19934C11__A1__8S19934C9[] = {
  ABISELECT(-120,-100),
  ABISELECT(2208,1832),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__9S19934C11__8S19934C9[] = {
  0,
  ABISELECT(1224,1016),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N9S19934C11D1Ev,_ZThn916_N9S19934C11D1Ev)();
extern void ABISELECT(_ZThn1104_N9S19934C11D0Ev,_ZThn916_N9S19934C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__9S19934C11__8S19934C9[] = {
  ABISELECT(-2208,-1832),
  ABISELECT(-2328,-1932),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N9S19934C11D1Ev,_ZThn916_N9S19934C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N9S19934C11D0Ev,_ZThn916_N9S19934C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__9S19934C11__8S19934C9[] = {
  ABISELECT(-120,-100),
  ABISELECT(1104,916),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
};
static  VTT_ENTRY vtt_S19934C9[] = {
  {&(_ZTV8S19934C9[7]),  7,51},
  {&(_ZTV8S19934C9[17]),  17,51},
  {&(_ZTV8S19934C9[29]),  29,51},
  {&(_ZTV8S19934C9[24]),  24,51},
  {&(_ZTV8S19934C9[33]),  33,51},
  {&(_ZTV8S19934C9[40]),  40,51},
  {&(_ZTV8S19934C9[46]),  46,51},
  {&(_ZTV8S19934C9[50]),  50,51},
  {&(_tg__ZTV8S19934C5__8S19934C9[4]),  4,7},
  {&(_tg__ZTV8S19934C68S19934C5__8S19934C9[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C5__8S19934C9[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__8S19934C9[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C5__8S19934C9[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C5__8S19934C9[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C5__8S19934C9[3]),  3,4},
  {&(_tg__ZTV8S19934C7__8S19934C5__8S19934C9[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C5__8S19934C9[3]),  3,3},
  {&(_tg__ZTV8S19934C6__A1__8S19934C9[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A1__8S19934C9[3]),  3,4},
  {&(_tg__ZTV9S19934C11__8S19934C9[5]),  5,7},
  {&(_tg__ZTV8S19934C69S19934C11__A2__8S19934C9[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C69S19934C11__A2__8S19934C9[3]),  3,4},
  {&(_tg__ZTV8S19934C79S19934C11__A1__8S19934C9[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C79S19934C11__A1__8S19934C9[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C79S19934C11__A1__8S19934C9[3]),  3,3},
  {&(_tg__ZTV8S19934C2__9S19934C11__8S19934C9[3]),  3,4},
  {&(_tg__ZTV8S19934C7__9S19934C11__8S19934C9[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__9S19934C11__8S19934C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19934C9[];
extern  VTBL_ENTRY _ZTV8S19934C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C9[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5344_N8S19934C9D0Ev,_ZThn4368_N8S19934C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5344_N8S19934C9D1Ev,_ZThn4368_N8S19934C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N8S19934C9D0Ev,_ZThn2280_N8S19934C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N8S19934C9D1Ev,_ZThn2280_N8S19934C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19934C9 = {  "S19934C9", // class name
  bases_S19934C9, 12,
  &(vtc_S19934C9[0]), // expected_vtbl_contents
  &(vtt_S19934C9[0]), // expected_vtt_contents
  ABISELECT(9376,7672), // object size
  NSPAIRA(_ZTI8S19934C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19934C9),51, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19934C9),28, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19934C3  : S19934C4 , S19934C2 , virtual S19934C9 {
  int s19934c3f0;
  long double s19934c3f1;
  int s19934c3f2;
  __tsi64 s19934c3f3;
  int s19934c3f4[2];
  virtual  ~S19934C3(); // _ZN8S19934C3D2Ev
  virtual void  v4(); // _ZN8S19934C32v4Ev
  S19934C3(); // tgen
};
//SIG(-1 S19934C3) C1{ BC2{ VBC3{ v2 Fs FL[4] Fp Fc Fp FL Fi[10]} BC4{ VBC3 BC5{ VBC3 FC3[8] Fi Fc FC3 Fi} BC6{ VBC3 VBC5 vd Fp Fi[6] Fc FC3 Fp} vd v3 FL Fp[2]} BC5 BC6 vd FL FC6[2] FL Fi FC7{}} BC3 VBC8{ BC9{ m FL FC4 Fp[8] Fl} VBC4 VBC10{ BC5 VBC9 BC6 BC3 Fp Fi[3]} BC3 vd v4 FL Fp[10]} vd v1 Fi FD Fi FL Fi[2]}


 S19934C3 ::~S19934C3(){ note_dtor("S19934C3", this);}
void  S19934C3 ::v4(){vfunc_called(this, "_ZN8S19934C32v4Ev");}
S19934C3 ::S19934C3(){ note_ctor("S19934C3", this);} // tgen

static void Test_S19934C3()
{
  extern Class_Descriptor cd_S19934C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(936,3069)];
    init_test(&cd_S19934C3, buf);
    S19934C3 *dp, &lv = *(dp=new (buf) S19934C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14960,12272), "sizeof(S19934C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19934C3)");
    check_base_class_offset(lv, (S19934C2*)(S19934C4*), ABISELECT(5576,4600), "S19934C3");
    check_base_class_offset(lv, (S19934C2*)(S19934C5*)(S19934C4*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C5*)(S19934C4*), ABISELECT(5576,4600), "S19934C3");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C5*)(S19934C4*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C3::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C4::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C4*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C4*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C3::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C5*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C3::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C5*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C3::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C5*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C11*), ABISELECT(5576,4600), "S19934C3");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C11*), ABISELECT(5576,4600), "S19934C3");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C5*)(S19934C4*), 0, "S19934C3");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C5*)(S19934C4*), ABISELECT(5696,4700), "S19934C3");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C4*), ABISELECT(5696,4700), "S19934C3");
    /*is_ambiguous_... S19934C3::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C5*), ABISELECT(5696,4700), "S19934C3");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C11*), ABISELECT(5696,4700), "S19934C3");
    check_base_class_offset(lv, (S19934C7*)(S19934C5*)(S19934C4*), ABISELECT(1104,916), "S19934C3");
    check_base_class_offset(lv, (S19934C5*)(S19934C4*), 0, "S19934C3");
    /*is_ambiguous_... S19934C4::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C4*), ABISELECT(1304,1072), "S19934C3");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C7*)(S19934C4*), ABISELECT(2408,1988), "S19934C3");
    check_base_class_offset(lv, (S19934C4*), 0, "S19934C3");
    /*is_ambiguous_... S19934C3::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*), ABISELECT(5408,4464), "S19934C3");
    /*is_ambiguous_... S19934C9::S19934C10 */ AMB_check_base_class_offset(lv, (S19934C10*)(S19934C9*), ABISELECT(6920,5716), "S19934C3");
    /*is_ambiguous_... S19934C3::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C5*), ABISELECT(9616,7896), "S19934C3");
    /*is_ambiguous_... S19934C3::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C7*)(S19934C5*), ABISELECT(10720,8812), "S19934C3");
    check_base_class_offset(lv, (S19934C5*)(S19934C9*), ABISELECT(9616,7896), "S19934C3");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C11*), ABISELECT(10920,8968), "S19934C3");
    check_base_class_offset(lv, (S19934C10*)(S19934C11*), ABISELECT(12344,10140), "S19934C3");
    check_base_class_offset(lv, (S19934C7*)(S19934C11*), ABISELECT(12024,9884), "S19934C3");
    /*is_ambiguous_... S19934C11::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C11*), ABISELECT(12200,10024), "S19934C3");
    check_base_class_offset(lv, (S19934C11*)(S19934C9*), ABISELECT(10920,8968), "S19934C3");
    /*is_ambiguous_... S19934C9::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C9*), ABISELECT(6800,5616), "S19934C3");
    check_base_class_offset(lv, (S19934C9*), ABISELECT(6800,5616), "S19934C3");
    check_field_offset(lv, s19934c3f0, ABISELECT(5528,4564), "S19934C3.s19934c3f0");
    check_field_offset(lv, s19934c3f1, ABISELECT(5536,4568), "S19934C3.s19934c3f1");
    check_field_offset(lv, s19934c3f2, ABISELECT(5552,4580), "S19934C3.s19934c3f2");
    check_field_offset(lv, s19934c3f3, ABISELECT(5560,4584), "S19934C3.s19934c3f3");
    check_field_offset(lv, s19934c3f4, ABISELECT(5568,4592), "S19934C3.s19934c3f4");
    test_class_info(&lv, &cd_S19934C3);
    dp->~S19934C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C3(Test_S19934C3, "S19934C3", ABISELECT(14960,12272));

#else // __cplusplus

extern void _ZN8S19934C3C1Ev();
extern void _ZN8S19934C3D2Ev();
Name_Map name_map_S19934C3[] = {
  NSPAIR(_ZN8S19934C3C1Ev),
  NSPAIR(_ZN8S19934C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C5;
extern VTBL_ENTRY _ZTI8S19934C5[];
extern  VTBL_ENTRY _ZTV8S19934C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C5[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C4;
extern VTBL_ENTRY _ZTI8S19934C4[];
extern  VTBL_ENTRY _ZTV8S19934C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C4[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C5;
extern VTBL_ENTRY _ZTI8S19934C5[];
extern  VTBL_ENTRY _ZTV8S19934C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C5[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C11;
extern VTBL_ENTRY _ZTI9S19934C11[];
extern  VTBL_ENTRY _ZTV9S19934C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19934C11[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C9;
extern VTBL_ENTRY _ZTI8S19934C9[];
extern  VTBL_ENTRY _ZTV8S19934C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C9[];
static Base_Class bases_S19934C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C2,    ABISELECT(5576,4600), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S19934C6,    0, //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
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19934C6,    ABISELECT(5696,4700), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19934C7,    ABISELECT(1104,916), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19934C5,    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
    14, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19934C6,    ABISELECT(1304,1072), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19934C7,    ABISELECT(2408,1988), //bcp->offset
    21, //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
    16, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19934C4,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19934C2,    ABISELECT(5408,4464), //bcp->offset
    27, //bcp->virtual_function_table_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_S19934C10,    ABISELECT(6920,5716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19934C6,    ABISELECT(9616,7896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19934C7,    ABISELECT(10720,8812), //bcp->offset
    60, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19934C5,    ABISELECT(9616,7896), //bcp->offset
    51, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19934C6,    ABISELECT(10920,8968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19934C10,    ABISELECT(12344,10140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19934C7,    ABISELECT(12024,9884), //bcp->offset
    75, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19934C2,    ABISELECT(12200,10024), //bcp->offset
    81, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19934C11,    ABISELECT(10920,8968), //bcp->offset
    66, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19934C2,    ABISELECT(6800,5616), //bcp->offset
    -1, //bcp->virtual_function_table_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
    19, //immediately_derived
  0, 0},
  {&cd_S19934C9,    ABISELECT(6800,5616), //bcp->offset
    37, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    27, //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 _ZTI8S19934C3[];
extern void _ZN8S19934C3D1Ev();
extern void _ZN8S19934C3D0Ev();
extern void _ZN8S19934C52v2Ev();
extern void _ZN8S19934C32v4Ev();
extern void ABISELECT(_ZThn1104_N8S19934C3D1Ev,_ZThn916_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C3D0Ev,_ZThn916_N8S19934C3D0Ev)();
extern void ABISELECT(_ZThn2408_N8S19934C3D1Ev,_ZThn1988_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn2408_N8S19934C3D0Ev,_ZThn1988_N8S19934C3D0Ev)();
extern void _ZN8S19934C22v1Ev();
extern void _ZN8S19934C22v1Ev();
extern void _ZN8S19934C22v1Ev();
extern void ABISELECT(_ZTv0_n72_N8S19934C3D1Ev,_ZTv0_n36_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn6800_N8S19934C3D1Ev,_ZThn5616_N8S19934C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19934C3D0Ev,_ZTv0_n36_N8S19934C3D0Ev)();
extern void ABISELECT(_ZThn6800_N8S19934C3D0Ev,_ZThn5616_N8S19934C3D0Ev)() __attribute__((weak));
extern void _ZN8S19934C92v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19934C3D1Ev,_ZTv0_n20_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn9616_N8S19934C3D1Ev,_ZThn7896_N8S19934C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19934C3D0Ev,_ZTv0_n20_N8S19934C3D0Ev)();
extern void ABISELECT(_ZThn9616_N8S19934C3D0Ev,_ZThn7896_N8S19934C3D0Ev)() __attribute__((weak));
extern void _ZN8S19934C52v2Ev();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C3D1Ev,_ZTvn916_n20_N8S19934C3D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C3D0Ev,_ZTvn916_n20_N8S19934C3D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19934C3D1Ev,_ZTv0_n24_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn10920_N8S19934C3D1Ev,_ZThn8968_N8S19934C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19934C3D0Ev,_ZTv0_n24_N8S19934C3D0Ev)();
extern void ABISELECT(_ZThn10920_N8S19934C3D0Ev,_ZThn8968_N8S19934C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1104_n48_N8S19934C3D1Ev,_ZTvn916_n24_N8S19934C3D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N8S19934C3D0Ev,_ZTvn916_n24_N8S19934C3D0Ev)();
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C3[] = {
  ABISELECT(12344,10140),
  ABISELECT(10920,8968),
  ABISELECT(9616,7896),
  ABISELECT(6800,5616),
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19934C32v4Ev,
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C3D1Ev,_ZThn916_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C3D0Ev,_ZThn916_N8S19934C3D0Ev),
  ABISELECT(4272,3528),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C3D1Ev,_ZThn1988_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C3D0Ev,_ZThn1988_N8S19934C3D0Ev),
  ABISELECT(-5408,-4464),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  0,
  ABISELECT(-6800,-5616),
  0,
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-1224,-1016),
  ABISELECT(2816,2280),
  ABISELECT(-6800,-5616),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19934C3D1Ev,_ZTv0_n36_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19934C3D0Ev,_ZTv0_n36_N8S19934C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C92v3Ev,
  0,
  ABISELECT(-9616,-7896),
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  ABISELECT(-9616,-7896),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C3D1Ev,_ZTv0_n20_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C3D0Ev,_ZTv0_n20_N8S19934C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-10720,-8812),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C3D1Ev,_ZTvn916_n20_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C3D0Ev,_ZTvn916_n20_N8S19934C3D0Ev),
  ABISELECT(1280,1056),
  ABISELECT(-10920,-8968),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  ABISELECT(-10920,-8968),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C3D1Ev,_ZTv0_n24_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C3D0Ev,_ZTv0_n24_N8S19934C3D0Ev),
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-12024,-9884),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C3D1Ev,_ZTvn916_n24_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C3D0Ev,_ZTvn916_n24_N8S19934C3D0Ev),
  ABISELECT(-12200,-10024),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19934C3[];
extern void _ZN8S19934C4D1Ev();
extern void _ZN8S19934C4D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C4__8S19934C3[] = {
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&_ZN8S19934C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
extern void _ZN8S19934C5D1Ev();
extern void _ZN8S19934C5D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C58S19934C4__8S19934C3[] = {
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C58S19934C4__8S19934C3[] = {
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C58S19934C4__8S19934C3[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C58S19934C4__8S19934C3[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C58S19934C4__8S19934C3[] = {
  0,
  ABISELECT(-4472,-3684),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C58S19934C4__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(-4592,-3784),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C58S19934C4__8S19934C3[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__8S19934C58S19934C4__8S19934C3[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C58S19934C4__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C4__A2__8S19934C3[] = {
  ABISELECT(4272,3528),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C4__A2__8S19934C3[] = {
  0,
  ABISELECT(-4272,-3528),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C4__A1__8S19934C3[] = {
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C4__A1__8S19934C3[] = {
  0,
  ABISELECT(-3168,-2612),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C4__A1__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(-3288,-2712),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C4__8S19934C3[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C4D1Ev,_ZThn916_N8S19934C4D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C4D0Ev,_ZThn916_N8S19934C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__8S19934C4__8S19934C3[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C4D1Ev,_ZThn916_N8S19934C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C4D0Ev,_ZThn916_N8S19934C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C4__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A__8S19934C4__8S19934C3[] = {
  ABISELECT(4272,3528),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
};
extern void ABISELECT(_ZThn2408_N8S19934C4D1Ev,_ZThn1988_N8S19934C4D1Ev)();
extern void ABISELECT(_ZThn2408_N8S19934C4D0Ev,_ZThn1988_N8S19934C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__A1__8S19934C4__8S19934C3[] = {
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C4D1Ev,_ZThn1988_N8S19934C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C4D0Ev,_ZThn1988_N8S19934C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C3[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A1__8S19934C3[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C22v1Ev();
extern void _ZN8S19934C9D1Ev();
extern void _ZN8S19934C9D0Ev();
extern void _ZN8S19934C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C9__8S19934C3[] = {
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-1224,-1016),
  ABISELECT(2816,2280),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19934C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C92v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev)();
extern void ABISELECT(_ZThn2816_N8S19934C9D1Ev,_ZThn2280_N8S19934C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev)();
extern void ABISELECT(_ZThn2816_N8S19934C9D0Ev,_ZThn2280_N8S19934C9D0Ev)() __attribute__((weak));
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__8S19934C9__8S19934C3[] = {
  0,
  ABISELECT(-2816,-2280),
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  ABISELECT(-2816,-2280),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C9__8S19934C3[] = {
  0,
  ABISELECT(1224,1016),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZTvn1104_n40_N8S19934C9D1Ev,_ZTvn916_n20_N8S19934C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C9D0Ev,_ZTvn916_n20_N8S19934C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__8S19934C9__8S19934C3[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-3920,-3196),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C9D1Ev,_ZTvn916_n20_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C9D0Ev,_ZTvn916_n20_N8S19934C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C9__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(1104,916),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev)();
extern void ABISELECT(_ZThn4120_N8S19934C9D1Ev,_ZThn3352_N8S19934C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev)();
extern void ABISELECT(_ZThn4120_N8S19934C9D0Ev,_ZThn3352_N8S19934C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19934C11__8S19934C9__8S19934C3[] = {
  ABISELECT(1280,1056),
  ABISELECT(-4120,-3352),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  ABISELECT(-4120,-3352),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev),
};
extern void ABISELECT(_ZTvn1104_n48_N8S19934C9D1Ev,_ZTvn916_n24_N8S19934C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N8S19934C9D0Ev,_ZTvn916_n24_N8S19934C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C79S19934C11__A1__8S19934C9__8S19934C3[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-5224,-4268),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C9D1Ev,_ZTvn916_n24_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C9D0Ev,_ZTvn916_n24_N8S19934C9D0Ev),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C29S19934C11__A1__8S19934C9__8S19934C3[] = {
  ABISELECT(-5400,-4408),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C5D1Ev();
extern void _ZN8S19934C5D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__A1__8S19934C3[] = {
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C5__A3__8S19934C3[] = {
  ABISELECT(-4040,-3296),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C5__A3__8S19934C3[] = {
  0,
  ABISELECT(4040,3296),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__A2__8S19934C3[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C5__A2__8S19934C3[] = {
  0,
  ABISELECT(5144,4212),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C5__A2__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(5024,4112),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C5__A1__8S19934C3[] = {
  0,
  ABISELECT(4040,3296),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__8S19934C5__A1__8S19934C3[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C5__A1__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(3920,3196),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
};
extern void _ZN9S19934C11D1Ev();
extern void _ZN9S19934C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19934C11__8S19934C3[] = {
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  0,
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN9S19934C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19934C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C69S19934C11__A4__8S19934C3[] = {
  ABISELECT(-5344,-4368),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C69S19934C11__A4__8S19934C3[] = {
  0,
  ABISELECT(5344,4368),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C79S19934C11__A3__8S19934C3[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C79S19934C11__A3__8S19934C3[] = {
  0,
  ABISELECT(6448,5284),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C79S19934C11__A3__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(6328,5184),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__9S19934C11__8S19934C3[] = {
  0,
  ABISELECT(5344,4368),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N9S19934C11D1Ev,_ZThn916_N9S19934C11D1Ev)();
extern void ABISELECT(_ZThn1104_N9S19934C11D0Ev,_ZThn916_N9S19934C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__9S19934C11__8S19934C3[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N9S19934C11D1Ev,_ZThn916_N9S19934C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N9S19934C11D0Ev,_ZThn916_N9S19934C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__9S19934C11__8S19934C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(5224,4268),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
};
static  VTT_ENTRY vtt_S19934C3[] = {
  {&(_ZTV8S19934C3[8]),  8,84},
  {&(_tg__ZTV8S19934C4__8S19934C3[4]),  4,7},
  {&(_tg__ZTV8S19934C58S19934C4__8S19934C3[4]),  4,7},
  {&(_tg__ZTV8S19934C68S19934C58S19934C4__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C58S19934C4__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C58S19934C4__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C58S19934C4__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C58S19934C4__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C58S19934C4__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C7__8S19934C58S19934C4__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C58S19934C4__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C68S19934C4__A2__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C4__A2__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C4__A1__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C4__A1__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C4__A1__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C4__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__8S19934C4__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C4__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C6__A__8S19934C4__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C7__A1__8S19934C4__8S19934C3[4]),  4,6},
  {&(_ZTV8S19934C3[33]),  33,84},
  {&(_ZTV8S19934C3[16]),  16,84},
  {&(_ZTV8S19934C3[37]),  37,84},
  {&(_ZTV8S19934C3[21]),  21,84},
  {&(_ZTV8S19934C3[25]),  25,84},
  {&(_ZTV8S19934C3[47]),  47,84},
  {&(_ZTV8S19934C3[57]),  57,84},
  {&(_ZTV8S19934C3[64]),  64,84},
  {&(_ZTV8S19934C3[73]),  73,84},
  {&(_ZTV8S19934C3[79]),  79,84},
  {&(_ZTV8S19934C3[83]),  83,84},
  {&(_tg__ZTV8S19934C6__A1__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A1__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C9__8S19934C3[7]),  7,11},
  {&(_tg__ZTV8S19934C5__8S19934C9__8S19934C3[6]),  6,9},
  {&(_tg__ZTV8S19934C2__8S19934C9__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__8S19934C9__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C9__8S19934C3[3]),  3,3},
  {&(_tg__ZTV9S19934C11__8S19934C9__8S19934C3[7]),  7,9},
  {&(_tg__ZTV8S19934C79S19934C11__A1__8S19934C9__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C29S19934C11__A1__8S19934C9__8S19934C3[2]),  2,3},
  {&(_tg__ZTV8S19934C5__A1__8S19934C3[4]),  4,7},
  {&(_tg__ZTV8S19934C68S19934C5__A3__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C5__A3__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__A2__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C5__A2__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C5__A2__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C5__A1__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C7__8S19934C5__A1__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C5__A1__8S19934C3[3]),  3,3},
  {&(_tg__ZTV9S19934C11__8S19934C3[5]),  5,7},
  {&(_tg__ZTV8S19934C69S19934C11__A4__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C69S19934C11__A4__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C79S19934C11__A3__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C79S19934C11__A3__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C79S19934C11__A3__8S19934C3[3]),  3,3},
  {&(_tg__ZTV8S19934C2__9S19934C11__8S19934C3[3]),  3,4},
  {&(_tg__ZTV8S19934C7__9S19934C11__8S19934C3[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__9S19934C11__8S19934C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19934C3[];
extern  VTBL_ENTRY _ZTV8S19934C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C3[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4120_N8S19934C9D0Ev,_ZThn3352_N8S19934C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4120_N8S19934C9D1Ev,_ZThn3352_N8S19934C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N8S19934C9D0Ev,_ZThn2280_N8S19934C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N8S19934C9D1Ev,_ZThn2280_N8S19934C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C3D0Ev,_ZTv0_n24_N8S19934C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10920_N8S19934C3D0Ev,_ZThn8968_N8S19934C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C3D1Ev,_ZTv0_n24_N8S19934C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10920_N8S19934C3D1Ev,_ZThn8968_N8S19934C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C3D0Ev,_ZTv0_n20_N8S19934C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9616_N8S19934C3D0Ev,_ZThn7896_N8S19934C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C3D1Ev,_ZTv0_n20_N8S19934C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9616_N8S19934C3D1Ev,_ZThn7896_N8S19934C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19934C3D0Ev,_ZTv0_n36_N8S19934C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6800_N8S19934C3D0Ev,_ZThn5616_N8S19934C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19934C3D1Ev,_ZTv0_n36_N8S19934C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6800_N8S19934C3D1Ev,_ZThn5616_N8S19934C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19934C3 = {  "S19934C3", // class name
  bases_S19934C3, 20,
  &(vtc_S19934C3[0]), // expected_vtbl_contents
  &(vtt_S19934C3[0]), // expected_vtt_contents
  ABISELECT(14960,12272), // object size
  NSPAIRA(_ZTI8S19934C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19934C3),84, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19934C3),60, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19934C1  : virtual S19934C2 , virtual S19934C3 , S19934C5 , S19934C9 {
  int s19934c1f0;
  __tsi64 s19934c1f1[3];
  int s19934c1f2;
  int s19934c1f3:2;
  int  :0;
  __tsi64 s19934c1f5[3];
  ::S19934C10 s19934c1f6;
  virtual  ~S19934C1(); // _ZN8S19934C1D2Ev
  S19934C1(); // tgen
};
//SIG(1 S19934C1) C1{ VBC2{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} VBC3{ BC4{ VBC2 BC5{ VBC2 BC6{ VBC2 FC2[8] Fi Fc FC2 Fi} BC7{ VBC2 VBC6 vd Fp Fi[6] Fc FC2 Fp} vd v2 FL Fp[2]} BC6 BC7 vd FL FC7[2] FL Fi FC8{}} BC2 VBC9{ BC10{ m FL FC5 Fp[8] Fl} VBC5 VBC11{ BC6 VBC10 BC7 BC2 Fp Fi[3]} BC2 vd v3 FL Fp[10]} vd v4 Fi FD Fi FL Fi[2]} BC5 BC9 vd Fi FL[3] Fi Fi:2 Fi:0 FL[3] FC10}


 S19934C1 ::~S19934C1(){ note_dtor("S19934C1", this);}
S19934C1 ::S19934C1(){ note_ctor("S19934C1", this);} // tgen

static void Test_S19934C1()
{
  extern Class_Descriptor cd_S19934C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1360,4455)];
    init_test(&cd_S19934C1, buf);
    S19934C1 *dp, &lv = *(dp=new (buf) S19934C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(21744,17816), "sizeof(S19934C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19934C1)");
    /*is_ambiguous_... S19934C1::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*), ABISELECT(6792,5544), "S19934C1");
    check_base_class_offset(lv, (S19934C2*)(S19934C4*)(S19934C3*), ABISELECT(6792,5544), "S19934C1");
    check_base_class_offset(lv, (S19934C2*)(S19934C5*)(S19934C4*)(S19934C3*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C5*)(S19934C4*)(S19934C3*), ABISELECT(6792,5544), "S19934C1");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C5*)(S19934C4*)(S19934C3*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C4::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C4*)(S19934C3*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C4*)(S19934C3*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C5*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C5*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C5*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C11*), ABISELECT(6792,5544), "S19934C1");
    check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C11*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C5*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C6*)(S19934C5*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C7*)(S19934C5*), ABISELECT(6792,5544), "S19934C1");
    /*is_ambiguous_... S19934C5::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C5*)(S19934C4*)(S19934C3*), ABISELECT(6912,5644), "S19934C1");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C5*)(S19934C4*)(S19934C3*), ABISELECT(12488,10244), "S19934C1");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C4*)(S19934C3*), ABISELECT(12488,10244), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C5*), ABISELECT(12488,10244), "S19934C1");
    check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C11*), ABISELECT(12488,10244), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C7*)(S19934C5*), ABISELECT(12488,10244), "S19934C1");
    check_base_class_offset(lv, (S19934C7*)(S19934C5*)(S19934C4*)(S19934C3*), ABISELECT(8016,6560), "S19934C1");
    check_base_class_offset(lv, (S19934C5*)(S19934C4*)(S19934C3*), ABISELECT(6912,5644), "S19934C1");
    /*is_ambiguous_... S19934C4::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C4*)(S19934C3*), ABISELECT(8216,6716), "S19934C1");
    /*is_ambiguous_... S19934C4::S19934C7 */ AMB_check_base_class_offset(lv, (S19934C7*)(S19934C4*)(S19934C3*), ABISELECT(9320,7632), "S19934C1");
    check_base_class_offset(lv, (S19934C4*)(S19934C3*), ABISELECT(6912,5644), "S19934C1");
    /*is_ambiguous_... S19934C3::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C3*), ABISELECT(12320,10108), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C10*)(S19934C9*), ABISELECT(13712,11260), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C5*), ABISELECT(16408,13440), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C7*)(S19934C5*), ABISELECT(17512,14356), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C5*)(S19934C9*), ABISELECT(16408,13440), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C5*)(S19934C9*), ABISELECT(16408,13440), "S19934C1");
    /*is_ambiguous_... S19934C11::S19934C6 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C11*), ABISELECT(17712,14512), "S19934C1");
    check_base_class_offset(lv, (S19934C10*)(S19934C11*), ABISELECT(19136,15684), "S19934C1");
    check_base_class_offset(lv, (S19934C7*)(S19934C11*), ABISELECT(18816,15428), "S19934C1");
    /*is_ambiguous_... S19934C11::S19934C2 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C11*), ABISELECT(18992,15568), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C11*)(S19934C9*), ABISELECT(17712,14512), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C11*)(S19934C9*), ABISELECT(17712,14512), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C9*), ABISELECT(13592,11160), "S19934C1");
    check_base_class_offset(lv, (S19934C9*)(S19934C3*), ABISELECT(13592,11160), "S19934C1");
    check_base_class_offset(lv, (S19934C3*), ABISELECT(6912,5644), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C6*)(S19934C5*), 0, "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C7*)(S19934C5*), ABISELECT(1104,916), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C5 */ AMB_check_base_class_offset(lv, (S19934C5*), 0, "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C10*)(S19934C9*), ABISELECT(1424,1172), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C2*)(S19934C9*), ABISELECT(1304,1072), "S19934C1");
    /*is_ambiguous_... S19934C1::S19934C9 */ AMB_check_base_class_offset(lv, (S19934C9*), ABISELECT(1304,1072), "S19934C1");
    check_field_offset(lv, s19934c1f0, ABISELECT(4120,3352), "S19934C1.s19934c1f0");
    check_field_offset(lv, s19934c1f1, ABISELECT(4128,3356), "S19934C1.s19934c1f1");
    check_field_offset(lv, s19934c1f2, ABISELECT(4152,3380), "S19934C1.s19934c1f2");
    set_bf_and_test(lv, s19934c1f3, ABISELECT(4156,3384), 0, 2, 1, "S19934C1");
    set_bf_and_test(lv, s19934c1f3, ABISELECT(4156,3384), 0, 2, hide_sll(1LL<<1), "S19934C1");
    check_field_offset(lv, s19934c1f5, ABISELECT(4160,3388), "S19934C1.s19934c1f5");
    check_field_offset(lv, s19934c1f6, ABISELECT(4184,3412), "S19934C1.s19934c1f6");
    test_class_info(&lv, &cd_S19934C1);
    dp->~S19934C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19934C1(Test_S19934C1, "S19934C1", ABISELECT(21744,17816));

#else // __cplusplus

extern void _ZN8S19934C1C1Ev();
extern void _ZN8S19934C1D2Ev();
Name_Map name_map_S19934C1[] = {
  NSPAIR(_ZN8S19934C1C1Ev),
  NSPAIR(_ZN8S19934C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C5;
extern VTBL_ENTRY _ZTI8S19934C5[];
extern  VTBL_ENTRY _ZTV8S19934C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C5[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C4;
extern VTBL_ENTRY _ZTI8S19934C4[];
extern  VTBL_ENTRY _ZTV8S19934C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C4[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C5;
extern VTBL_ENTRY _ZTI8S19934C5[];
extern  VTBL_ENTRY _ZTV8S19934C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C5[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C11;
extern VTBL_ENTRY _ZTI9S19934C11[];
extern  VTBL_ENTRY _ZTV9S19934C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19934C11[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C9;
extern VTBL_ENTRY _ZTI8S19934C9[];
extern  VTBL_ENTRY _ZTV8S19934C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C9[];
extern Class_Descriptor cd_S19934C3;
extern VTBL_ENTRY _ZTI8S19934C3[];
extern  VTBL_ENTRY _ZTV8S19934C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C3[];
extern Class_Descriptor cd_S19934C6;
extern VTBL_ENTRY _ZTI8S19934C6[];
extern  VTBL_ENTRY _ZTV8S19934C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C6[];
extern Class_Descriptor cd_S19934C7;
extern VTBL_ENTRY _ZTI8S19934C7[];
extern  VTBL_ENTRY _ZTV8S19934C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C7[];
extern Class_Descriptor cd_S19934C5;
extern VTBL_ENTRY _ZTI8S19934C5[];
extern  VTBL_ENTRY _ZTV8S19934C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C5[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S19934C2;
extern VTBL_ENTRY _ZTI8S19934C2[];
extern  VTBL_ENTRY _ZTV8S19934C2[];
extern Class_Descriptor cd_S19934C9;
extern VTBL_ENTRY _ZTI8S19934C9[];
extern  VTBL_ENTRY _ZTV8S19934C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C9[];
static Base_Class bases_S19934C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C2,    ABISELECT(6792,5544), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19934C6,    ABISELECT(6912,5644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19934C6,    ABISELECT(12488,10244), //bcp->offset
    67, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19934C7,    ABISELECT(8016,6560), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19934C5,    ABISELECT(6912,5644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19934C6,    ABISELECT(8216,6716), //bcp->offset
    55, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19934C7,    ABISELECT(9320,7632), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19934C4,    ABISELECT(6912,5644), //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
    17, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19934C2,    ABISELECT(12320,10108), //bcp->offset
    64, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19934C10,    ABISELECT(13712,11260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19934C6,    ABISELECT(16408,13440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19934C7,    ABISELECT(17512,14356), //bcp->offset
    93, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19934C5,    ABISELECT(16408,13440), //bcp->offset
    84, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19934C6,    ABISELECT(17712,14512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19934C10,    ABISELECT(19136,15684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19934C7,    ABISELECT(18816,15428), //bcp->offset
    108, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19934C2,    ABISELECT(18992,15568), //bcp->offset
    114, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19934C11,    ABISELECT(17712,14512), //bcp->offset
    99, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19934C2,    ABISELECT(13592,11160), //bcp->offset
    -1, //bcp->virtual_function_table_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
    19, //immediately_derived
  0, 0},
  {&cd_S19934C9,    ABISELECT(13592,11160), //bcp->offset
    70, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S19934C3,    ABISELECT(6912,5644), //bcp->offset
    33, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19934C6,    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
    20, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19934C7,    ABISELECT(1104,916), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19934C5,    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
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19934C10,    ABISELECT(1424,1172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19934C2,    ABISELECT(1304,1072), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S19934C9,    ABISELECT(1304,1072), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19934C1[];
extern void _ZN8S19934C1D1Ev();
extern void _ZN8S19934C1D0Ev();
extern void _ZN8S19934C52v2Ev();
extern void ABISELECT(_ZThn1104_N8S19934C1D1Ev,_ZThn916_N8S19934C1D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C1D0Ev,_ZThn916_N8S19934C1D0Ev)();
extern void _ZN8S19934C22v1Ev();
extern void ABISELECT(_ZThn1304_N8S19934C1D1Ev,_ZThn1072_N8S19934C1D1Ev)();
extern void ABISELECT(_ZThn1304_N8S19934C1D0Ev,_ZThn1072_N8S19934C1D0Ev)();
extern void _ZN8S19934C92v3Ev();
extern void _ZN8S19934C22v1Ev();
extern void ABISELECT(_ZTv0_n72_N8S19934C1D1Ev,_ZTv0_n36_N8S19934C1D1Ev)();
extern void ABISELECT(_ZThn6912_N8S19934C1D1Ev,_ZThn5644_N8S19934C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19934C1D0Ev,_ZTv0_n36_N8S19934C1D0Ev)();
extern void ABISELECT(_ZThn6912_N8S19934C1D0Ev,_ZThn5644_N8S19934C1D0Ev)() __attribute__((weak));
extern void _ZN8S19934C52v2Ev();
extern void _ZN8S19934C32v4Ev();
extern void ABISELECT(_ZTvn1104_n72_N8S19934C1D1Ev,_ZTvn916_n36_N8S19934C1D1Ev)();
extern void ABISELECT(_ZTvn1104_n72_N8S19934C1D0Ev,_ZTvn916_n36_N8S19934C1D0Ev)();
extern void ABISELECT(_ZTvn2408_n72_N8S19934C1D1Ev,_ZTvn1988_n36_N8S19934C1D1Ev)();
extern void ABISELECT(_ZTvn2408_n72_N8S19934C1D0Ev,_ZTvn1988_n36_N8S19934C1D0Ev)();
extern void _ZN8S19934C22v1Ev();
extern void _ZN8S19934C22v1Ev();
extern void ABISELECT(_ZTv0_n72_N8S19934C1D1Ev,_ZTv0_n36_N8S19934C1D1Ev)();
extern void ABISELECT(_ZThn13592_N8S19934C1D1Ev,_ZThn11160_N8S19934C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19934C1D0Ev,_ZTv0_n36_N8S19934C1D0Ev)();
extern void ABISELECT(_ZThn13592_N8S19934C1D0Ev,_ZThn11160_N8S19934C1D0Ev)() __attribute__((weak));
extern void _ZN8S19934C92v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S19934C1D1Ev,_ZTv0_n20_N8S19934C1D1Ev)();
extern void ABISELECT(_ZThn16408_N8S19934C1D1Ev,_ZThn13440_N8S19934C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19934C1D0Ev,_ZTv0_n20_N8S19934C1D0Ev)();
extern void ABISELECT(_ZThn16408_N8S19934C1D0Ev,_ZThn13440_N8S19934C1D0Ev)() __attribute__((weak));
extern void _ZN8S19934C52v2Ev();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C1D1Ev,_ZTvn916_n20_N8S19934C1D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C1D0Ev,_ZTvn916_n20_N8S19934C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S19934C1D1Ev,_ZTv0_n24_N8S19934C1D1Ev)();
extern void ABISELECT(_ZThn17712_N8S19934C1D1Ev,_ZThn14512_N8S19934C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19934C1D0Ev,_ZTv0_n24_N8S19934C1D0Ev)();
extern void ABISELECT(_ZThn17712_N8S19934C1D0Ev,_ZThn14512_N8S19934C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1104_n48_N8S19934C1D1Ev,_ZTvn916_n24_N8S19934C1D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N8S19934C1D0Ev,_ZTvn916_n24_N8S19934C1D0Ev)();
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY vtc_S19934C1[] = {
  ABISELECT(19136,15684),
  ABISELECT(17712,14512),
  ABISELECT(16408,13440),
  ABISELECT(13592,11160),
  ABISELECT(6912,5644),
  ABISELECT(12488,10244),
  ABISELECT(6792,5544),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&_ZN8S19934C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  ABISELECT(11384,9328),
  ABISELECT(5688,4628),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C1D1Ev,_ZThn916_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C1D0Ev,_ZThn916_N8S19934C1D0Ev),
  ABISELECT(17832,14612),
  ABISELECT(16408,13440),
  ABISELECT(11184,9172),
  ABISELECT(5488,4472),
  ABISELECT(15104,12368),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn1304_N8S19934C1D1Ev,_ZThn1072_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1304_N8S19934C1D0Ev,_ZThn1072_N8S19934C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C92v3Ev,
  0,
  ABISELECT(-6792,-5544),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  ABISELECT(5408,4464),
  0,
  0,
  ABISELECT(-6912,-5644),
  ABISELECT(12224,10040),
  ABISELECT(10800,8868),
  ABISELECT(9496,7796),
  ABISELECT(6680,5516),
  ABISELECT(5576,4600),
  ABISELECT(-120,-100),
  ABISELECT(-6912,-5644),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19934C1D1Ev,_ZTv0_n36_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19934C1D0Ev,_ZTv0_n36_N8S19934C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19934C32v4Ev,
  ABISELECT(4472,3684),
  ABISELECT(-1224,-1016),
  ABISELECT(-8016,-6560),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n72_N8S19934C1D1Ev,_ZTvn916_n36_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n72_N8S19934C1D0Ev,_ZTvn916_n36_N8S19934C1D0Ev),
  ABISELECT(-1424,-1172),
  ABISELECT(-8216,-6716),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  ABISELECT(3168,2612),
  ABISELECT(-2528,-2088),
  ABISELECT(-9320,-7632),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2408_n72_N8S19934C1D1Ev,_ZTvn1988_n36_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2408_n72_N8S19934C1D0Ev,_ZTvn1988_n36_N8S19934C1D0Ev),
  ABISELECT(-12320,-10108),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  ABISELECT(-5696,-4700),
  ABISELECT(-12488,-10244),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  0,
  ABISELECT(-13592,-11160),
  0,
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-6800,-5616),
  ABISELECT(2816,2280),
  ABISELECT(-13592,-11160),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19934C1D1Ev,_ZTv0_n36_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19934C1D0Ev,_ZTv0_n36_N8S19934C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C92v3Ev,
  0,
  ABISELECT(-16408,-13440),
  ABISELECT(-3920,-3196),
  ABISELECT(-9616,-7896),
  ABISELECT(-16408,-13440),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C1D1Ev,_ZTv0_n20_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C1D0Ev,_ZTv0_n20_N8S19934C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  ABISELECT(-5024,-4112),
  ABISELECT(-10720,-8812),
  ABISELECT(-17512,-14356),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C1D1Ev,_ZTvn916_n20_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C1D0Ev,_ZTvn916_n20_N8S19934C1D0Ev),
  ABISELECT(1280,1056),
  ABISELECT(-17712,-14512),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-10920,-8968),
  ABISELECT(-17712,-14512),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C1D1Ev,_ZTv0_n24_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C1D0Ev,_ZTv0_n24_N8S19934C1D0Ev),
  ABISELECT(-6328,-5184),
  ABISELECT(-12024,-9884),
  ABISELECT(-18816,-15428),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C1D1Ev,_ZTvn916_n24_N8S19934C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C1D0Ev,_ZTvn916_n24_N8S19934C1D0Ev),
  ABISELECT(-18992,-15568),
  (VTBL_ENTRY)&(_ZTI8S19934C1[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19934C1[];
extern void _ZN8S19934C5D1Ev();
extern void _ZN8S19934C5D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__A__8S19934C1[] = {
  ABISELECT(12488,10244),
  ABISELECT(6792,5544),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C5__A5__8S19934C1[] = {
  ABISELECT(6792,5544),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C5__A5__8S19934C1[] = {
  0,
  ABISELECT(-6792,-5544),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__A4__8S19934C1[] = {
  ABISELECT(11384,9328),
  ABISELECT(5688,4628),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C5__A4__8S19934C1[] = {
  0,
  ABISELECT(-5688,-4628),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C5__A4__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(-11384,-9328),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C5__A__8S19934C1[] = {
  0,
  ABISELECT(-6792,-5544),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__8S19934C5__A__8S19934C1[] = {
  ABISELECT(11384,9328),
  ABISELECT(5688,4628),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C5__A__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(-12488,-10244),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
};
extern void _ZN8S19934C22v1Ev();
extern void _ZN8S19934C9D1Ev();
extern void _ZN8S19934C9D0Ev();
extern void _ZN8S19934C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C9__A__8S19934C1[] = {
  ABISELECT(17832,14612),
  ABISELECT(16408,13440),
  ABISELECT(11184,9172),
  ABISELECT(5488,4472),
  ABISELECT(15104,12368),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19934C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C92v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev)();
extern void ABISELECT(_ZThn15104_N8S19934C9D1Ev,_ZThn12368_N8S19934C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev)();
extern void ABISELECT(_ZThn15104_N8S19934C9D0Ev,_ZThn12368_N8S19934C9D0Ev)() __attribute__((weak));
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__8S19934C9__A__8S19934C1[] = {
  0,
  ABISELECT(-15104,-12368),
  ABISELECT(-3920,-3196),
  ABISELECT(-9616,-7896),
  ABISELECT(-15104,-12368),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C9__A__8S19934C1[] = {
  0,
  ABISELECT(-5488,-4472),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZTvn1104_n40_N8S19934C9D1Ev,_ZTvn916_n20_N8S19934C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C9D0Ev,_ZTvn916_n20_N8S19934C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__8S19934C9__A__8S19934C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-10720,-8812),
  ABISELECT(-16208,-13284),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C9D1Ev,_ZTvn916_n20_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C9D0Ev,_ZTvn916_n20_N8S19934C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C9__A__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(-11184,-9172),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev)();
extern void ABISELECT(_ZThn16408_N8S19934C9D1Ev,_ZThn13440_N8S19934C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev)();
extern void ABISELECT(_ZThn16408_N8S19934C9D0Ev,_ZThn13440_N8S19934C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19934C11__8S19934C9__A__8S19934C1[] = {
  ABISELECT(1280,1056),
  ABISELECT(-16408,-13440),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-10920,-8968),
  ABISELECT(-16408,-13440),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev),
};
extern void ABISELECT(_ZTvn1104_n48_N8S19934C9D1Ev,_ZTvn916_n24_N8S19934C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N8S19934C9D0Ev,_ZTvn916_n24_N8S19934C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C79S19934C11__A1__8S19934C9__A__8S19934C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-12024,-9884),
  ABISELECT(-17512,-14356),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C9D1Ev,_ZTvn916_n24_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C9D0Ev,_ZTvn916_n24_N8S19934C9D0Ev),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C29S19934C11__A1__8S19934C9__A__8S19934C1[] = {
  ABISELECT(-17688,-14496),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C3D1Ev();
extern void _ZN8S19934C3D0Ev();
extern void _ZN8S19934C52v2Ev();
extern void _ZN8S19934C32v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C3__8S19934C1[] = {
  ABISELECT(12224,10040),
  ABISELECT(10800,8868),
  ABISELECT(9496,7796),
  ABISELECT(6680,5516),
  ABISELECT(5576,4600),
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
  (VTBL_ENTRY)&_ZN8S19934C32v4Ev,
};
extern void _ZN8S19934C4D1Ev();
extern void _ZN8S19934C4D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(5576,4600),
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&_ZN8S19934C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
extern void _ZN8S19934C5D1Ev();
extern void _ZN8S19934C5D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C58S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(5576,4600),
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C58S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C58S19934C48S19934C3__8S19934C1[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C58S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(4472,3684),
  ABISELECT(-1224,-1016),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C58S19934C48S19934C3__8S19934C1[] = {
  0,
  ABISELECT(1224,1016),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C58S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(-4472,-3684),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C58S19934C48S19934C3__8S19934C1[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__8S19934C58S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(4472,3684),
  ABISELECT(-1224,-1016),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C58S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C48S19934C3__A2__8S19934C1[] = {
  ABISELECT(-1424,-1172),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C48S19934C3__A2__8S19934C1[] = {
  0,
  ABISELECT(1424,1172),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C48S19934C3__A1__8S19934C1[] = {
  ABISELECT(3168,2612),
  ABISELECT(-2528,-2088),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C48S19934C3__A1__8S19934C1[] = {
  0,
  ABISELECT(2528,2088),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C48S19934C3__A1__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(-3168,-2612),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C48S19934C3__8S19934C1[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C4D1Ev,_ZThn916_N8S19934C4D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C4D0Ev,_ZThn916_N8S19934C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__8S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(4472,3684),
  ABISELECT(-1224,-1016),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C4D1Ev,_ZThn916_N8S19934C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C4D0Ev,_ZThn916_N8S19934C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A__8S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(-1424,-1172),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
};
extern void ABISELECT(_ZThn2408_N8S19934C4D1Ev,_ZThn1988_N8S19934C4D1Ev)();
extern void ABISELECT(_ZThn2408_N8S19934C4D0Ev,_ZThn1988_N8S19934C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__A1__8S19934C48S19934C3__8S19934C1[] = {
  ABISELECT(3168,2612),
  ABISELECT(-2528,-2088),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI8S19934C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C4D1Ev,_ZThn1988_N8S19934C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C4D0Ev,_ZThn1988_N8S19934C4D0Ev),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C3__8S19934C1[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C3D1Ev,_ZThn916_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C3D0Ev,_ZThn916_N8S19934C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C58S19934C4__8S19934C3__8S19934C1[] = {
  ABISELECT(4472,3684),
  ABISELECT(-1224,-1016),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C3D1Ev,_ZThn916_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C3D0Ev,_ZThn916_N8S19934C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C3__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C4__A2__8S19934C3__8S19934C1[] = {
  ABISELECT(-1424,-1172),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
};
extern void ABISELECT(_ZThn2408_N8S19934C3D1Ev,_ZThn1988_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn2408_N8S19934C3D0Ev,_ZThn1988_N8S19934C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C4__A1__8S19934C3__8S19934C1[] = {
  ABISELECT(3168,2612),
  ABISELECT(-2528,-2088),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C3D1Ev,_ZThn1988_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N8S19934C3D0Ev,_ZThn1988_N8S19934C3D0Ev),
};
extern void _ZN8S19934C22v1Ev();
extern void ABISELECT(_ZTv0_n72_N8S19934C3D1Ev,_ZTv0_n36_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn6680_N8S19934C3D1Ev,_ZThn5516_N8S19934C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19934C3D0Ev,_ZTv0_n36_N8S19934C3D0Ev)();
extern void ABISELECT(_ZThn6680_N8S19934C3D0Ev,_ZThn5516_N8S19934C3D0Ev)() __attribute__((weak));
extern void _ZN8S19934C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C9__8S19934C3__8S19934C1[] = {
  0,
  ABISELECT(-6680,-5516),
  0,
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-6800,-5616),
  ABISELECT(2816,2280),
  ABISELECT(-6680,-5516),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19934C3D1Ev,_ZTv0_n36_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19934C3D0Ev,_ZTv0_n36_N8S19934C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C92v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19934C3D1Ev,_ZTv0_n20_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn9496_N8S19934C3D1Ev,_ZThn7796_N8S19934C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19934C3D0Ev,_ZTv0_n20_N8S19934C3D0Ev)();
extern void ABISELECT(_ZThn9496_N8S19934C3D0Ev,_ZThn7796_N8S19934C3D0Ev)() __attribute__((weak));
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__A1__8S19934C3__8S19934C1[] = {
  0,
  ABISELECT(-9496,-7796),
  ABISELECT(-3920,-3196),
  ABISELECT(-9616,-7896),
  ABISELECT(-9496,-7796),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C3D1Ev,_ZTv0_n20_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C3D0Ev,_ZTv0_n20_N8S19934C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
extern void ABISELECT(_ZTvn1104_n40_N8S19934C3D1Ev,_ZTvn916_n20_N8S19934C3D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C3D0Ev,_ZTvn916_n20_N8S19934C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__A2__8S19934C3__8S19934C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-10720,-8812),
  ABISELECT(-10600,-8712),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C3D1Ev,_ZTvn916_n20_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C3D0Ev,_ZTvn916_n20_N8S19934C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S19934C3D1Ev,_ZTv0_n24_N8S19934C3D1Ev)();
extern void ABISELECT(_ZThn10800_N8S19934C3D1Ev,_ZThn8868_N8S19934C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19934C3D0Ev,_ZTv0_n24_N8S19934C3D0Ev)();
extern void ABISELECT(_ZThn10800_N8S19934C3D0Ev,_ZThn8868_N8S19934C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19934C11__8S19934C3__8S19934C1[] = {
  ABISELECT(1280,1056),
  ABISELECT(-10800,-8868),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-10920,-8968),
  ABISELECT(-10800,-8868),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C3D1Ev,_ZTv0_n24_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C3D0Ev,_ZTv0_n24_N8S19934C3D0Ev),
};
extern void ABISELECT(_ZTvn1104_n48_N8S19934C3D1Ev,_ZTvn916_n24_N8S19934C3D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N8S19934C3D0Ev,_ZTvn916_n24_N8S19934C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C79S19934C11__A3__8S19934C3__8S19934C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-12024,-9884),
  ABISELECT(-11904,-9784),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C3D1Ev,_ZTvn916_n24_N8S19934C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C3D0Ev,_ZTvn916_n24_N8S19934C3D0Ev),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C29S19934C11__A2__8S19934C3__8S19934C1[] = {
  ABISELECT(-12080,-9924),
  (VTBL_ENTRY)&(_ZTI8S19934C3[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C6__A1__8S19934C1[] = {
  0,
  ABISELECT(5696,4700),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C22v1Ev();
extern void _ZN8S19934C9D1Ev();
extern void _ZN8S19934C9D0Ev();
extern void _ZN8S19934C92v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C9__8S19934C1[] = {
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-6800,-5616),
  ABISELECT(2816,2280),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19934C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C9D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C92v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev)();
extern void ABISELECT(_ZThn2816_N8S19934C9D1Ev,_ZThn2280_N8S19934C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev)();
extern void ABISELECT(_ZThn2816_N8S19934C9D0Ev,_ZThn2280_N8S19934C9D0Ev)() __attribute__((weak));
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__8S19934C9__8S19934C1[] = {
  0,
  ABISELECT(-2816,-2280),
  ABISELECT(-3920,-3196),
  ABISELECT(-9616,-7896),
  ABISELECT(-2816,-2280),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C9__8S19934C1[] = {
  0,
  ABISELECT(6800,5616),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZTvn1104_n40_N8S19934C9D1Ev,_ZTvn916_n20_N8S19934C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N8S19934C9D0Ev,_ZTvn916_n20_N8S19934C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__8S19934C9__8S19934C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-10720,-8812),
  ABISELECT(-3920,-3196),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C9D1Ev,_ZTvn916_n20_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N8S19934C9D0Ev,_ZTvn916_n20_N8S19934C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C9__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(1104,916),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev)();
extern void ABISELECT(_ZThn4120_N8S19934C9D1Ev,_ZThn3352_N8S19934C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev)();
extern void ABISELECT(_ZThn4120_N8S19934C9D0Ev,_ZThn3352_N8S19934C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19934C11__8S19934C9__8S19934C1[] = {
  ABISELECT(1280,1056),
  ABISELECT(-4120,-3352),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-10920,-8968),
  ABISELECT(-4120,-3352),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev),
};
extern void ABISELECT(_ZTvn1104_n48_N8S19934C9D1Ev,_ZTvn916_n24_N8S19934C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N8S19934C9D0Ev,_ZTvn916_n24_N8S19934C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C79S19934C11__A1__8S19934C9__8S19934C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-12024,-9884),
  ABISELECT(-5224,-4268),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C9D1Ev,_ZTvn916_n24_N8S19934C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N8S19934C9D0Ev,_ZTvn916_n24_N8S19934C9D0Ev),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C29S19934C11__A1__8S19934C9__8S19934C1[] = {
  ABISELECT(-5400,-4408),
  (VTBL_ENTRY)&(_ZTI8S19934C9[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C5D1Ev();
extern void _ZN8S19934C5D0Ev();
extern void _ZN8S19934C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C5__A1__8S19934C1[] = {
  ABISELECT(-3920,-3196),
  ABISELECT(-9616,-7896),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C5D0Ev,
  (VTBL_ENTRY)&_ZN8S19934C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C68S19934C5__A3__8S19934C1[] = {
  ABISELECT(-9616,-7896),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C68S19934C5__A3__8S19934C1[] = {
  0,
  ABISELECT(9616,7896),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C78S19934C5__A2__8S19934C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-10720,-8812),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C78S19934C5__A2__8S19934C1[] = {
  0,
  ABISELECT(10720,8812),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C78S19934C5__A2__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(5024,4112),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C5__A1__8S19934C1[] = {
  0,
  ABISELECT(9616,7896),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev)();
extern void ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__8S19934C5__A1__8S19934C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-10720,-8812),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D1Ev,_ZThn916_N8S19934C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S19934C5D0Ev,_ZThn916_N8S19934C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__8S19934C5__A1__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(3920,3196),
  (VTBL_ENTRY)&(_ZTI8S19934C5[0]),
};
extern void _ZN9S19934C11D1Ev();
extern void _ZN9S19934C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19934C11__8S19934C1[] = {
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-10920,-8968),
  0,
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN9S19934C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19934C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C69S19934C11__A4__8S19934C1[] = {
  ABISELECT(-10920,-8968),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C69S19934C11__A4__8S19934C1[] = {
  0,
  ABISELECT(10920,8968),
  (VTBL_ENTRY)&(_ZTI8S19934C6[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void _ZN8S19934C7D1Ev();
extern void _ZN8S19934C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C79S19934C11__A3__8S19934C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-12024,-9884),
  0,
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19934C7D0Ev,
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__8S19934C79S19934C11__A3__8S19934C1[] = {
  0,
  ABISELECT(12024,9884),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__8S19934C79S19934C11__A3__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(6328,5184),
  (VTBL_ENTRY)&(_ZTI8S19934C7[0]),
};
extern void _ZN8S19934C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19934C2__9S19934C11__8S19934C1[] = {
  0,
  ABISELECT(10920,8968),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&_ZN8S19934C22v1Ev,
};
extern void ABISELECT(_ZThn1104_N9S19934C11D1Ev,_ZThn916_N9S19934C11D1Ev)();
extern void ABISELECT(_ZThn1104_N9S19934C11D0Ev,_ZThn916_N9S19934C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19934C7__9S19934C11__8S19934C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-12024,-9884),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N9S19934C11D1Ev,_ZThn916_N9S19934C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N9S19934C11D0Ev,_ZThn916_N9S19934C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19934C6__A1__9S19934C11__8S19934C1[] = {
  ABISELECT(-5696,-4700),
  ABISELECT(5224,4268),
  (VTBL_ENTRY)&(_ZTI9S19934C11[0]),
};
static  VTT_ENTRY vtt_S19934C1[] = {
  {&(_ZTV8S19934C1[9]),  9,117},
  {&(_tg__ZTV8S19934C5__A__8S19934C1[4]),  4,7},
  {&(_tg__ZTV8S19934C68S19934C5__A5__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C5__A5__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__A4__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C5__A4__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C5__A4__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C5__A__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C7__8S19934C5__A__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C5__A__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C9__A__8S19934C1[7]),  7,11},
  {&(_tg__ZTV8S19934C5__8S19934C9__A__8S19934C1[6]),  6,9},
  {&(_tg__ZTV8S19934C2__8S19934C9__A__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__8S19934C9__A__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C9__A__8S19934C1[3]),  3,3},
  {&(_tg__ZTV9S19934C11__8S19934C9__A__8S19934C1[7]),  7,9},
  {&(_tg__ZTV8S19934C79S19934C11__A1__8S19934C9__A__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C29S19934C11__A1__8S19934C9__A__8S19934C1[2]),  2,3},
  {&(_ZTV8S19934C1[32]),  32,117},
  {&(_ZTV8S19934C1[45]),  45,117},
  {&(_ZTV8S19934C1[53]),  53,117},
  {&(_ZTV8S19934C1[70]),  70,117},
  {&(_ZTV8S19934C1[58]),  58,117},
  {&(_ZTV8S19934C1[62]),  62,117},
  {&(_ZTV8S19934C1[66]),  66,117},
  {&(_ZTV8S19934C1[80]),  80,117},
  {&(_ZTV8S19934C1[90]),  90,117},
  {&(_ZTV8S19934C1[97]),  97,117},
  {&(_ZTV8S19934C1[106]),  106,117},
  {&(_ZTV8S19934C1[112]),  112,117},
  {&(_ZTV8S19934C1[116]),  116,117},
  {&(_ZTV8S19934C1[16]),  16,117},
  {&(_ZTV8S19934C1[25]),  25,117},
  {&(_tg__ZTV8S19934C3__8S19934C1[8]),  8,12},
  {&(_tg__ZTV8S19934C48S19934C3__8S19934C1[4]),  4,7},
  {&(_tg__ZTV8S19934C58S19934C48S19934C3__8S19934C1[4]),  4,7},
  {&(_tg__ZTV8S19934C68S19934C58S19934C48S19934C3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C58S19934C48S19934C3__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C58S19934C48S19934C3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C58S19934C48S19934C3__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C58S19934C48S19934C3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C58S19934C48S19934C3__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C7__8S19934C58S19934C48S19934C3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C58S19934C48S19934C3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C68S19934C48S19934C3__A2__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C48S19934C3__A2__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C48S19934C3__A1__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C48S19934C3__A1__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C48S19934C3__A1__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C48S19934C3__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__8S19934C48S19934C3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C48S19934C3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C6__A__8S19934C48S19934C3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C7__A1__8S19934C48S19934C3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C3__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C58S19934C4__8S19934C3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C68S19934C4__A2__8S19934C3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C78S19934C4__A1__8S19934C3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C9__8S19934C3__8S19934C1[10]),  10,14},
  {&(_tg__ZTV8S19934C5__A1__8S19934C3__8S19934C1[6]),  6,9},
  {&(_tg__ZTV8S19934C78S19934C5__A2__8S19934C3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV9S19934C11__8S19934C3__8S19934C1[7]),  7,9},
  {&(_tg__ZTV8S19934C79S19934C11__A3__8S19934C3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C29S19934C11__A2__8S19934C3__8S19934C1[2]),  2,3},
  {&(_tg__ZTV8S19934C6__A1__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C6__A1__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C9__8S19934C1[7]),  7,11},
  {&(_tg__ZTV8S19934C5__8S19934C9__8S19934C1[6]),  6,9},
  {&(_tg__ZTV8S19934C2__8S19934C9__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__8S19934C9__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C9__8S19934C1[3]),  3,3},
  {&(_tg__ZTV9S19934C11__8S19934C9__8S19934C1[7]),  7,9},
  {&(_tg__ZTV8S19934C79S19934C11__A1__8S19934C9__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C29S19934C11__A1__8S19934C9__8S19934C1[2]),  2,3},
  {&(_tg__ZTV8S19934C5__A1__8S19934C1[4]),  4,7},
  {&(_tg__ZTV8S19934C68S19934C5__A3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C68S19934C5__A3__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C78S19934C5__A2__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C78S19934C5__A2__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C78S19934C5__A2__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C5__A1__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C7__8S19934C5__A1__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__8S19934C5__A1__8S19934C1[3]),  3,3},
  {&(_tg__ZTV9S19934C11__8S19934C1[5]),  5,7},
  {&(_tg__ZTV8S19934C69S19934C11__A4__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__8S19934C69S19934C11__A4__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C79S19934C11__A3__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C2__8S19934C79S19934C11__A3__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C6__8S19934C79S19934C11__A3__8S19934C1[3]),  3,3},
  {&(_tg__ZTV8S19934C2__9S19934C11__8S19934C1[3]),  3,4},
  {&(_tg__ZTV8S19934C7__9S19934C11__8S19934C1[4]),  4,6},
  {&(_tg__ZTV8S19934C6__A1__9S19934C11__8S19934C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19934C1[];
extern  VTBL_ENTRY _ZTV8S19934C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19934C1[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C3D0Ev,_ZTv0_n24_N8S19934C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N8S19934C3D0Ev,_ZThn8868_N8S19934C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C3D1Ev,_ZTv0_n24_N8S19934C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10800_N8S19934C3D1Ev,_ZThn8868_N8S19934C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C3D0Ev,_ZTv0_n20_N8S19934C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9496_N8S19934C3D0Ev,_ZThn7796_N8S19934C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C3D1Ev,_ZTv0_n20_N8S19934C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9496_N8S19934C3D1Ev,_ZThn7796_N8S19934C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19934C3D0Ev,_ZTv0_n36_N8S19934C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6680_N8S19934C3D0Ev,_ZThn5516_N8S19934C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19934C3D1Ev,_ZTv0_n36_N8S19934C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6680_N8S19934C3D1Ev,_ZThn5516_N8S19934C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C9D0Ev,_ZTv0_n24_N8S19934C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4120_N8S19934C9D0Ev,_ZThn3352_N8S19934C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16408_N8S19934C9D0Ev,_ZThn13440_N8S19934C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C9D1Ev,_ZTv0_n24_N8S19934C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4120_N8S19934C9D1Ev,_ZThn3352_N8S19934C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16408_N8S19934C9D1Ev,_ZThn13440_N8S19934C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C9D0Ev,_ZTv0_n20_N8S19934C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N8S19934C9D0Ev,_ZThn2280_N8S19934C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn15104_N8S19934C9D0Ev,_ZThn12368_N8S19934C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C9D1Ev,_ZTv0_n20_N8S19934C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N8S19934C9D1Ev,_ZThn2280_N8S19934C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn15104_N8S19934C9D1Ev,_ZThn12368_N8S19934C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C1D0Ev,_ZTv0_n24_N8S19934C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17712_N8S19934C1D0Ev,_ZThn14512_N8S19934C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19934C1D1Ev,_ZTv0_n24_N8S19934C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17712_N8S19934C1D1Ev,_ZThn14512_N8S19934C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C1D0Ev,_ZTv0_n20_N8S19934C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16408_N8S19934C1D0Ev,_ZThn13440_N8S19934C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19934C1D1Ev,_ZTv0_n20_N8S19934C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16408_N8S19934C1D1Ev,_ZThn13440_N8S19934C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19934C1D0Ev,_ZTv0_n36_N8S19934C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13592_N8S19934C1D0Ev,_ZThn11160_N8S19934C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6912_N8S19934C1D0Ev,_ZThn5644_N8S19934C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19934C1D1Ev,_ZTv0_n36_N8S19934C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13592_N8S19934C1D1Ev,_ZThn11160_N8S19934C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6912_N8S19934C1D1Ev,_ZThn5644_N8S19934C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19934C1 = {  "S19934C1", // class name
  bases_S19934C1, 27,
  &(vtc_S19934C1[0]), // expected_vtbl_contents
  &(vtt_S19934C1[0]), // expected_vtt_contents
  ABISELECT(21744,17816), // object size
  NSPAIRA(_ZTI8S19934C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19934C1),117, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19934C1),93, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6542C2  {
  short s6542c2f0;
  __tsi64 s6542c2f1[4];
  void *s6542c2f2;
  char s6542c2f3;
  void *s6542c2f4;
  __tsi64 s6542c2f5;
  int s6542c2f6[10];
  virtual void  v2(); // _ZN7S6542C22v2Ev
  ~S6542C2(); // tgen
  S6542C2(); // tgen
};
//SIG(-1 S6542C2) C1{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]}


void  S6542C2 ::v2(){vfunc_called(this, "_ZN7S6542C22v2Ev");}
S6542C2 ::~S6542C2(){ note_dtor("S6542C2", this);} // tgen
S6542C2 ::S6542C2(){ note_ctor("S6542C2", this);} // tgen

static void Test_S6542C2()
{
  extern Class_Descriptor cd_S6542C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,26)];
    init_test(&cd_S6542C2, buf);
    S6542C2 *dp, &lv = *(dp=new (buf) S6542C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,100), "sizeof(S6542C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6542C2)");
    check_field_offset(lv, s6542c2f0, ABISELECT(8,4), "S6542C2.s6542c2f0");
    check_field_offset(lv, s6542c2f1, ABISELECT(16,8), "S6542C2.s6542c2f1");
    check_field_offset(lv, s6542c2f2, ABISELECT(48,40), "S6542C2.s6542c2f2");
    check_field_offset(lv, s6542c2f3, ABISELECT(56,44), "S6542C2.s6542c2f3");
    check_field_offset(lv, s6542c2f4, ABISELECT(64,48), "S6542C2.s6542c2f4");
    check_field_offset(lv, s6542c2f5, ABISELECT(72,52), "S6542C2.s6542c2f5");
    check_field_offset(lv, s6542c2f6, ABISELECT(80,60), "S6542C2.s6542c2f6");
    test_class_info(&lv, &cd_S6542C2);
    dp->~S6542C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C2(Test_S6542C2, "S6542C2", ABISELECT(120,100));

#else // __cplusplus

extern void _ZN7S6542C2C1Ev();
extern void _ZN7S6542C2D1Ev();
Name_Map name_map_S6542C2[] = {
  NSPAIR(_ZN7S6542C2C1Ev),
  NSPAIR(_ZN7S6542C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6542C2[];
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C2[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
Class_Descriptor cd_S6542C2 = {  "S6542C2", // class name
  0,0,//no base classes
  &(vtc_S6542C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,100), // object size
  NSPAIRA(_ZTI7S6542C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6542C2),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  S6542C6  : virtual S6542C2 {
  ::S6542C2 s6542c6f0[8];
  int s6542c6f1;
  char s6542c6f2;
  ::S6542C2 s6542c6f3;
  int s6542c6f4;
  ~S6542C6(); // tgen
  S6542C6(); // tgen
};
//SIG(-1 S6542C6) C1{ VBC2{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} FC2[8] Fi Fc FC2 Fi}


S6542C6 ::~S6542C6(){ note_dtor("S6542C6", this);} // tgen
S6542C6 ::S6542C6(){ note_ctor("S6542C6", this);} // tgen

static void Test_S6542C6()
{
  extern Class_Descriptor cd_S6542C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(154,255)];
    init_test(&cd_S6542C6, buf);
    S6542C6 *dp, &lv = *(dp=new (buf) S6542C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1224,1016), "sizeof(S6542C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6542C6)");
    check_base_class_offset(lv, (S6542C2*), ABISELECT(1104,916), "S6542C6");
    check_field_offset(lv, s6542c6f0, ABISELECT(8,4), "S6542C6.s6542c6f0");
    check_field_offset(lv, s6542c6f1, ABISELECT(968,804), "S6542C6.s6542c6f1");
    check_field_offset(lv, s6542c6f2, ABISELECT(972,808), "S6542C6.s6542c6f2");
    check_field_offset(lv, s6542c6f3, ABISELECT(976,812), "S6542C6.s6542c6f3");
    check_field_offset(lv, s6542c6f4, ABISELECT(1096,912), "S6542C6.s6542c6f4");
    test_class_info(&lv, &cd_S6542C6);
    dp->~S6542C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C6(Test_S6542C6, "S6542C6", ABISELECT(1224,1016));

#else // __cplusplus

extern void _ZN7S6542C6C1Ev();
extern void _ZN7S6542C6D1Ev();
Name_Map name_map_S6542C6[] = {
  NSPAIR(_ZN7S6542C6C1Ev),
  NSPAIR(_ZN7S6542C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
static Base_Class bases_S6542C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6542C2,    ABISELECT(1104,916), //bcp->offset
    3, //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 _ZTI7S6542C6[];
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C6[] = {
  ABISELECT(1104,916),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  0,
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern VTBL_ENTRY _ZTV7S6542C6[];
static  VTT_ENTRY vtt_S6542C6[] = {
  {&(_ZTV7S6542C6[3]),  3,7},
  {&(_ZTV7S6542C6[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
Class_Descriptor cd_S6542C6 = {  "S6542C6", // class name
  bases_S6542C6, 1,
  &(vtc_S6542C6[0]), // expected_vtbl_contents
  &(vtt_S6542C6[0]), // expected_vtt_contents
  ABISELECT(1224,1016), // object size
  NSPAIRA(_ZTI7S6542C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6542C6),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6542C6),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  S6542C7  : virtual S6542C2 , virtual S6542C6 {
  void *s6542c7f0;
  int s6542c7f1[6];
  char s6542c7f2;
  ::S6542C2 s6542c7f3;
  void *s6542c7f4;
  virtual  ~S6542C7(); // _ZN7S6542C7D2Ev
  S6542C7(); // tgen
};
//SIG(-1 S6542C7) C1{ VBC2{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} VBC3{ VBC2 FC2[8] Fi Fc FC2 Fi} vd Fp Fi[6] Fc FC2 Fp}


 S6542C7 ::~S6542C7(){ note_dtor("S6542C7", this);}
S6542C7 ::S6542C7(){ note_ctor("S6542C7", this);} // tgen

static void Test_S6542C7()
{
  extern Class_Descriptor cd_S6542C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(176,290)];
    init_test(&cd_S6542C7, buf);
    S6542C7 *dp, &lv = *(dp=new (buf) S6542C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1400,1156), "sizeof(S6542C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6542C7)");
    check_base_class_offset(lv, (S6542C2*), ABISELECT(176,140), "S6542C7");
    check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(176,140), "S6542C7");
    check_base_class_offset(lv, (S6542C6*), ABISELECT(296,240), "S6542C7");
    check_field_offset(lv, s6542c7f0, ABISELECT(8,4), "S6542C7.s6542c7f0");
    check_field_offset(lv, s6542c7f1, ABISELECT(16,8), "S6542C7.s6542c7f1");
    check_field_offset(lv, s6542c7f2, ABISELECT(40,32), "S6542C7.s6542c7f2");
    check_field_offset(lv, s6542c7f3, ABISELECT(48,36), "S6542C7.s6542c7f3");
    check_field_offset(lv, s6542c7f4, ABISELECT(168,136), "S6542C7.s6542c7f4");
    test_class_info(&lv, &cd_S6542C7);
    dp->~S6542C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C7(Test_S6542C7, "S6542C7", ABISELECT(1400,1156));

#else // __cplusplus

extern void _ZN7S6542C7C1Ev();
extern void _ZN7S6542C7D2Ev();
Name_Map name_map_S6542C7[] = {
  NSPAIR(_ZN7S6542C7C1Ev),
  NSPAIR(_ZN7S6542C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
static Base_Class bases_S6542C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6542C2,    ABISELECT(176,140), //bcp->offset
    6, //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_S6542C6,    ABISELECT(296,240), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //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 _ZTI7S6542C7[];
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C7[] = {
  ABISELECT(296,240),
  ABISELECT(176,140),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
  0,
  ABISELECT(-176,-140),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  ABISELECT(-120,-100),
  ABISELECT(-296,-240),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern VTBL_ENTRY _ZTV7S6542C7[];
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C7[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__7S6542C7[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTT_ENTRY vtt_S6542C7[] = {
  {&(_ZTV7S6542C7[4]),  4,13},
  {&(_ZTV7S6542C7[9]),  9,13},
  {&(_ZTV7S6542C7[13]),  13,13},
  {&(_tg__ZTV7S6542C6__7S6542C7[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__7S6542C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
Class_Descriptor cd_S6542C7 = {  "S6542C7", // class name
  bases_S6542C7, 2,
  &(vtc_S6542C7[0]), // expected_vtbl_contents
  &(vtt_S6542C7[0]), // expected_vtt_contents
  ABISELECT(1400,1156), // object size
  NSPAIRA(_ZTI7S6542C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6542C7),13, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6542C7),5, //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  S6542C5  : virtual S6542C2 , S6542C6 , S6542C7 {
  __tsi64 s6542c5f0;
  void *s6542c5f1[2];
  virtual  ~S6542C5(); // _ZN7S6542C5D2Ev
  virtual void  v3(); // _ZN7S6542C52v3Ev
  S6542C5(); // tgen
};
//SIG(-1 S6542C5) C1{ VBC2{ v2 Fs FL[4] Fp Fc Fp FL Fi[10]} BC3{ VBC2 FC2[8] Fi Fc FC2 Fi} BC4{ VBC2 VBC3 vd Fp Fi[6] Fc FC2 Fp} vd v1 FL Fp[2]}


 S6542C5 ::~S6542C5(){ note_dtor("S6542C5", this);}
void  S6542C5 ::v3(){vfunc_called(this, "_ZN7S6542C52v3Ev");}
S6542C5 ::S6542C5(){ note_ctor("S6542C5", this);} // tgen

static void Test_S6542C5()
{
  extern Class_Descriptor cd_S6542C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(317,523)];
    init_test(&cd_S6542C5, buf);
    S6542C5 *dp, &lv = *(dp=new (buf) S6542C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2528,2088), "sizeof(S6542C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6542C5)");
    check_base_class_offset(lv, (S6542C2*), ABISELECT(1304,1072), "S6542C5");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(1304,1072), "S6542C5");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*), ABISELECT(1304,1072), "S6542C5");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(1304,1072), "S6542C5");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*), 0, "S6542C5");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*), ABISELECT(1424,1172), "S6542C5");
    check_base_class_offset(lv, (S6542C7*), ABISELECT(1104,916), "S6542C5");
    check_field_offset(lv, s6542c5f0, ABISELECT(1280,1056), "S6542C5.s6542c5f0");
    check_field_offset(lv, s6542c5f1, ABISELECT(1288,1064), "S6542C5.s6542c5f1");
    test_class_info(&lv, &cd_S6542C5);
    dp->~S6542C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C5(Test_S6542C5, "S6542C5", ABISELECT(2528,2088));

#else // __cplusplus

extern void _ZN7S6542C5C1Ev();
extern void _ZN7S6542C5D2Ev();
Name_Map name_map_S6542C5[] = {
  NSPAIR(_ZN7S6542C5C1Ev),
  NSPAIR(_ZN7S6542C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
static Base_Class bases_S6542C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6542C2,    ABISELECT(1304,1072), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //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
  1, 1},
  {&cd_S6542C6,    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_S6542C6,    ABISELECT(1424,1172), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6542C7,    ABISELECT(1104,916), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6542C5[];
extern void _ZN7S6542C5D1Ev();
extern void _ZN7S6542C5D0Ev();
extern void _ZN7S6542C52v3Ev();
extern void ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev)();
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C5[] = {
  ABISELECT(1424,1172),
  ABISELECT(1304,1072),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
  ABISELECT(320,256),
  ABISELECT(200,156),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev),
  0,
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  ABISELECT(-120,-100),
  ABISELECT(-1424,-1172),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
};
extern VTBL_ENTRY _ZTV7S6542C5[];
static  VTBL_ENTRY _tg__ZTV7S6542C6__A__7S6542C5[] = {
  ABISELECT(1304,1072),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A__7S6542C5[] = {
  0,
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C7__7S6542C5[] = {
  ABISELECT(320,256),
  ABISELECT(200,156),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C7__7S6542C5[] = {
  0,
  ABISELECT(-200,-156),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C7__7S6542C5[] = {
  ABISELECT(-120,-100),
  ABISELECT(-320,-256),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C5[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A1__7S6542C5[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTT_ENTRY vtt_S6542C5[] = {
  {&(_ZTV7S6542C5[4]),  4,20},
  {&(_tg__ZTV7S6542C6__A__7S6542C5[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A__7S6542C5[3]),  3,4},
  {&(_tg__ZTV7S6542C7__7S6542C5[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C7__7S6542C5[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C7__7S6542C5[3]),  3,3},
  {&(_ZTV7S6542C5[16]),  16,20},
  {&(_ZTV7S6542C5[11]),  11,20},
  {&(_ZTV7S6542C5[20]),  20,20},
  {&(_tg__ZTV7S6542C6__A1__7S6542C5[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A1__7S6542C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6542C5[];
extern  VTBL_ENTRY _ZTV7S6542C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C5[];
Class_Descriptor cd_S6542C5 = {  "S6542C5", // class name
  bases_S6542C5, 4,
  &(vtc_S6542C5[0]), // expected_vtbl_contents
  &(vtt_S6542C5[0]), // expected_vtt_contents
  ABISELECT(2528,2088), // object size
  NSPAIRA(_ZTI7S6542C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6542C5),20, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6542C5),11, //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  S6542C4  : virtual S6542C2 , S6542C5 , S6542C6 , S6542C7 {
  __tsi64 s6542c4f0;
  ::S6542C7 s6542c4f1[2];
  __tsi64 s6542c4f2;
  int s6542c4f3;
  ::S20677C6_nt s6542c4f4;
  virtual  ~S6542C4(); // _ZN7S6542C4D2Ev
  S6542C4(); // tgen
};
//SIG(-1 S6542C4) C1{ VBC2{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} BC3{ VBC2 BC4{ VBC2 FC2[8] Fi Fc FC2 Fi} BC5{ VBC2 VBC4 vd Fp Fi[6] Fc FC2 Fp} vd v2 FL Fp[2]} BC4 BC5 vd FL FC5[2] FL Fi FC6{}}


 S6542C4 ::~S6542C4(){ note_dtor("S6542C4", this);}
S6542C4 ::S6542C4(){ note_ctor("S6542C4", this);} // tgen

static void Test_S6542C4()
{
  extern Class_Descriptor cd_S6542C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(830,1371)];
    init_test(&cd_S6542C4, buf);
    S6542C4 *dp, &lv = *(dp=new (buf) S6542C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6632,5480), "sizeof(S6542C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6542C4)");
    check_base_class_offset(lv, (S6542C2*), ABISELECT(5408,4464), "S6542C4");
    check_base_class_offset(lv, (S6542C2*)(S6542C5*), ABISELECT(5408,4464), "S6542C4");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C5*), ABISELECT(5408,4464), "S6542C4");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C5*), ABISELECT(5408,4464), "S6542C4");
    /*is_ambiguous_... S6542C4::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(5408,4464), "S6542C4");
    /*is_ambiguous_... S6542C4::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(5408,4464), "S6542C4");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C7*), ABISELECT(5408,4464), "S6542C4");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C5*), 0, "S6542C4");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C5*), ABISELECT(5528,4564), "S6542C4");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C7*), ABISELECT(5528,4564), "S6542C4");
    check_base_class_offset(lv, (S6542C7*)(S6542C5*), ABISELECT(1104,916), "S6542C4");
    check_base_class_offset(lv, (S6542C5*), 0, "S6542C4");
    /*is_ambiguous_... S6542C4::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*), ABISELECT(1304,1072), "S6542C4");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C7*), ABISELECT(2408,1988), "S6542C4");
    check_field_offset(lv, s6542c4f0, ABISELECT(2584,2128), "S6542C4.s6542c4f0");
    check_field_offset(lv, s6542c4f1, ABISELECT(2592,2136), "S6542C4.s6542c4f1");
    check_field_offset(lv, s6542c4f2, ABISELECT(5392,4448), "S6542C4.s6542c4f2");
    check_field_offset(lv, s6542c4f3, ABISELECT(5400,4456), "S6542C4.s6542c4f3");
    check_field_offset(lv, s6542c4f4, ABISELECT(5404,4460), "S6542C4.s6542c4f4");
    test_class_info(&lv, &cd_S6542C4);
    dp->~S6542C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C4(Test_S6542C4, "S6542C4", ABISELECT(6632,5480));

#else // __cplusplus

extern void _ZN7S6542C4C1Ev();
extern void _ZN7S6542C4D2Ev();
Name_Map name_map_S6542C4[] = {
  NSPAIR(_ZN7S6542C4C1Ev),
  NSPAIR(_ZN7S6542C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C5;
extern VTBL_ENTRY _ZTI7S6542C5[];
extern  VTBL_ENTRY _ZTV7S6542C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C5[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
static Base_Class bases_S6542C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6542C2,    ABISELECT(5408,4464), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6542C6,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6542C6,    ABISELECT(5528,4564), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6542C7,    ABISELECT(1104,916), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6542C5,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6542C6,    ABISELECT(1304,1072), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6542C7,    ABISELECT(2408,1988), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6542C4[];
extern void _ZN7S6542C4D1Ev();
extern void _ZN7S6542C4D0Ev();
extern void _ZN7S6542C52v3Ev();
extern void ABISELECT(_ZThn1104_N7S6542C4D1Ev,_ZThn916_N7S6542C4D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C4D0Ev,_ZThn916_N7S6542C4D0Ev)();
extern void ABISELECT(_ZThn2408_N7S6542C4D1Ev,_ZThn1988_N7S6542C4D1Ev)();
extern void ABISELECT(_ZThn2408_N7S6542C4D0Ev,_ZThn1988_N7S6542C4D0Ev)();
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C4[] = {
  ABISELECT(5528,4564),
  ABISELECT(5408,4464),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&_ZN7S6542C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
  ABISELECT(4424,3648),
  ABISELECT(4304,3548),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C4D1Ev,_ZThn916_N7S6542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C4D0Ev,_ZThn916_N7S6542C4D0Ev),
  ABISELECT(4104,3392),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  ABISELECT(3120,2576),
  ABISELECT(3000,2476),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C4D1Ev,_ZThn1988_N7S6542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C4D0Ev,_ZThn1988_N7S6542C4D0Ev),
  0,
  ABISELECT(-5408,-4464),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  ABISELECT(-120,-100),
  ABISELECT(-5528,-4564),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
};
extern VTBL_ENTRY _ZTV7S6542C4[];
extern void _ZN7S6542C5D1Ev();
extern void _ZN7S6542C5D0Ev();
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C5__7S6542C4[] = {
  ABISELECT(5528,4564),
  ABISELECT(5408,4464),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C5__7S6542C4[] = {
  ABISELECT(5408,4464),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C67S6542C5__7S6542C4[] = {
  0,
  ABISELECT(-5408,-4464),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__7S6542C4[] = {
  ABISELECT(4424,3648),
  ABISELECT(4304,3548),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C77S6542C5__7S6542C4[] = {
  0,
  ABISELECT(-4304,-3548),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C77S6542C5__7S6542C4[] = {
  ABISELECT(-120,-100),
  ABISELECT(-4424,-3648),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C5__7S6542C4[] = {
  0,
  ABISELECT(-5408,-4464),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__7S6542C5__7S6542C4[] = {
  ABISELECT(4424,3648),
  ABISELECT(4304,3548),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C5__7S6542C4[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5528,-4564),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A__7S6542C4[] = {
  ABISELECT(4104,3392),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A__7S6542C4[] = {
  0,
  ABISELECT(-4104,-3392),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C7__A1__7S6542C4[] = {
  ABISELECT(3120,2576),
  ABISELECT(3000,2476),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C7__A1__7S6542C4[] = {
  0,
  ABISELECT(-3000,-2476),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C7__A1__7S6542C4[] = {
  ABISELECT(-120,-100),
  ABISELECT(-3120,-2576),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C4[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A1__7S6542C4[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTT_ENTRY vtt_S6542C4[] = {
  {&(_ZTV7S6542C4[4]),  4,29},
  {&(_tg__ZTV7S6542C5__7S6542C4[4]),  4,7},
  {&(_tg__ZTV7S6542C67S6542C5__7S6542C4[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C67S6542C5__7S6542C4[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C5__7S6542C4[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C77S6542C5__7S6542C4[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C77S6542C5__7S6542C4[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C5__7S6542C4[3]),  3,4},
  {&(_tg__ZTV7S6542C7__7S6542C5__7S6542C4[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C5__7S6542C4[3]),  3,3},
  {&(_tg__ZTV7S6542C6__A__7S6542C4[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A__7S6542C4[3]),  3,4},
  {&(_tg__ZTV7S6542C7__A1__7S6542C4[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C7__A1__7S6542C4[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C7__A1__7S6542C4[3]),  3,3},
  {&(_ZTV7S6542C4[25]),  25,29},
  {&(_ZTV7S6542C4[11]),  11,29},
  {&(_ZTV7S6542C4[29]),  29,29},
  {&(_ZTV7S6542C4[16]),  16,29},
  {&(_ZTV7S6542C4[20]),  20,29},
  {&(_tg__ZTV7S6542C6__A1__7S6542C4[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A1__7S6542C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6542C4[];
extern  VTBL_ENTRY _ZTV7S6542C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C4[];
Class_Descriptor cd_S6542C4 = {  "S6542C4", // class name
  bases_S6542C4, 7,
  &(vtc_S6542C4[0]), // expected_vtbl_contents
  &(vtt_S6542C4[0]), // expected_vtt_contents
  ABISELECT(6632,5480), // object size
  NSPAIRA(_ZTI7S6542C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6542C4),29, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6542C4),22, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6542C11  : S6542C6 , virtual S19934C10 , S6542C7 , S6542C2 {
  void *s6542c11f0;
  int s6542c11f1[3];
  ~S6542C11(); // tgen
  S6542C11(); // tgen
};
//SIG(-1 S6542C11) C1{ BC2{ VBC3{ v1 Fs FL[4] Fp Fc Fp FL Fi[10]} FC3[8] Fi Fc FC3 Fi} VBC4{ m FL FC5{ VBC6{ v3 Fs FL[4] Fp Fc Fp FL Fi[10]} BC7{ VBC6 FC6[8] Fi Fc FC6 Fi} BC8{ VBC6 VBC7 vd Fp Fi[6] Fc FC6 Fp} vd v2 FL Fp[2]} Fp[8] Fl} BC9{ VBC3 VBC2 vd Fp Fi[6] Fc FC3 Fp} BC3 Fp Fi[3]}


S6542C11 ::~S6542C11(){ note_dtor("S6542C11", this);} // tgen
S6542C11 ::S6542C11(){ note_ctor("S6542C11", this);} // tgen

static void Test_S6542C11()
{
  extern Class_Descriptor cd_S6542C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(658,1081)];
    init_test(&cd_S6542C11, buf);
    S6542C11 *dp, &lv = *(dp=new (buf) S6542C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5256,4320), "sizeof(S6542C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6542C11)");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(1424,1172), "S6542C11");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*), ABISELECT(1424,1172), "S6542C11");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(1424,1172), "S6542C11");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*), 0, "S6542C11");
    check_base_class_offset(lv, (S19934C10*), ABISELECT(1544,1272), "S6542C11");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*), ABISELECT(4152,3404), "S6542C11");
    check_base_class_offset(lv, (S6542C7*), ABISELECT(1104,916), "S6542C11");
    /*is_ambiguous_... S6542C11::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*), ABISELECT(1280,1056), "S6542C11");
    check_field_offset(lv, s6542c11f0, ABISELECT(1400,1156), "S6542C11.s6542c11f0");
    check_field_offset(lv, s6542c11f1, ABISELECT(1408,1160), "S6542C11.s6542c11f1");
    test_class_info(&lv, &cd_S6542C11);
    dp->~S6542C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C11(Test_S6542C11, "S6542C11", ABISELECT(5256,4320));

#else // __cplusplus

extern void _ZN8S6542C11C1Ev();
extern void _ZN8S6542C11D1Ev();
Name_Map name_map_S6542C11[] = {
  NSPAIR(_ZN8S6542C11C1Ev),
  NSPAIR(_ZN8S6542C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
static Base_Class bases_S6542C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6542C2,    ABISELECT(1424,1172), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //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_S6542C6,    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_S19934C10,    ABISELECT(1544,1272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S6542C6,    ABISELECT(4152,3404), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6542C7,    ABISELECT(1104,916), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6542C2,    ABISELECT(1280,1056), //bcp->offset
    13, //bcp->virtual_function_table_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 _ZTI8S6542C11[];
extern void _ZN8S6542C11D1Ev();
extern void _ZN8S6542C11D0Ev();
extern void ABISELECT(_ZThn1104_N8S6542C11D1Ev,_ZThn916_N8S6542C11D1Ev)();
extern void ABISELECT(_ZThn1104_N8S6542C11D0Ev,_ZThn916_N8S6542C11D0Ev)();
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C11[] = {
  ABISELECT(4152,3404),
  ABISELECT(1544,1272),
  ABISELECT(1424,1172),
  0,
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN8S6542C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6542C11D0Ev,
  ABISELECT(3048,2488),
  ABISELECT(320,256),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S6542C11D1Ev,_ZThn916_N8S6542C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S6542C11D0Ev,_ZThn916_N8S6542C11D0Ev),
  ABISELECT(-1280,-1056),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  0,
  ABISELECT(-1424,-1172),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  ABISELECT(-2728,-2232),
  ABISELECT(-4152,-3404),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
};
extern VTBL_ENTRY _ZTV8S6542C11[];
static  VTBL_ENTRY _tg__ZTV7S6542C6__A__8S6542C11[] = {
  ABISELECT(1424,1172),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A__8S6542C11[] = {
  0,
  ABISELECT(-1424,-1172),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C7__8S6542C11[] = {
  ABISELECT(3048,2488),
  ABISELECT(320,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C7__8S6542C11[] = {
  0,
  ABISELECT(-320,-256),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C7__8S6542C11[] = {
  ABISELECT(-2728,-2232),
  ABISELECT(-3048,-2488),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__8S6542C11[] = {
  ABISELECT(-2728,-2232),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A1__8S6542C11[] = {
  0,
  ABISELECT(2728,2232),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTT_ENTRY vtt_S6542C11[] = {
  {&(_ZTV8S6542C11[5]),  5,23},
  {&(_tg__ZTV7S6542C6__A__8S6542C11[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A__8S6542C11[3]),  3,4},
  {&(_tg__ZTV7S6542C7__8S6542C11[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C7__8S6542C11[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C7__8S6542C11[3]),  3,3},
  {&(_ZTV8S6542C11[19]),  19,23},
  {&(_ZTV8S6542C11[11]),  11,23},
  {&(_ZTV8S6542C11[23]),  23,23},
  {&(_tg__ZTV7S6542C6__A1__8S6542C11[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A1__8S6542C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S6542C11[];
extern  VTBL_ENTRY _ZTV8S6542C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6542C11[];
Class_Descriptor cd_S6542C11 = {  "S6542C11", // class name
  bases_S6542C11, 6,
  &(vtc_S6542C11[0]), // expected_vtbl_contents
  &(vtt_S6542C11[0]), // expected_vtt_contents
  ABISELECT(5256,4320), // object size
  NSPAIRA(_ZTI8S6542C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6542C11),23, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6542C11),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6542C9  : S19934C10 , virtual S6542C5 , virtual S6542C11 , S6542C2 {
  __tsi64 s6542c9f0;
  void *s6542c9f1[10];
  virtual  ~S6542C9(); // _ZN7S6542C9D2Ev
  virtual void  v4(); // _ZN7S6542C92v4Ev
  S6542C9(); // tgen
};
//SIG(-1 S6542C9) C1{ BC2{ m FL FC3{ VBC4{ v5 Fs FL[4] Fp Fc Fp FL Fi[10]} BC5{ VBC4 FC4[8] Fi Fc FC4 Fi} BC6{ VBC4 VBC5 vd Fp Fi[6] Fc FC4 Fp} vd v4 FL Fp[2]} Fp[8] Fl} VBC7{ VBC8{ v2 Fs FL[4] Fp Fc Fp FL Fi[10]} BC9{ VBC8 FC8[8] Fi Fc FC8 Fi} BC10{ VBC8 VBC9 vd Fp Fi[6] Fc FC8 Fp} vd v3 FL Fp[2]} VBC11{ BC9 VBC2 BC10 BC8 Fp Fi[3]} BC8 vd v1 FL Fp[10]}


 S6542C9 ::~S6542C9(){ note_dtor("S6542C9", this);}
void  S6542C9 ::v4(){vfunc_called(this, "_ZN7S6542C92v4Ev");}
S6542C9 ::S6542C9(){ note_ctor("S6542C9", this);} // tgen

static void Test_S6542C9()
{
  extern Class_Descriptor cd_S6542C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1173,1919)];
    init_test(&cd_S6542C9, buf);
    S6542C9 *dp, &lv = *(dp=new (buf) S6542C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9376,7672), "sizeof(S6542C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6542C9)");
    /*is_ambiguous_... S6542C9::S19934C10 */ AMB_check_base_class_offset(lv, (S19934C10*), ABISELECT(120,100), "S6542C9");
    check_base_class_offset(lv, (S6542C2*)(S6542C5*), ABISELECT(4120,3352), "S6542C9");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C5*), ABISELECT(4120,3352), "S6542C9");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C5*), ABISELECT(4120,3352), "S6542C9");
    /*is_ambiguous_... S6542C9::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(4120,3352), "S6542C9");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C11*), ABISELECT(4120,3352), "S6542C9");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C11*), ABISELECT(4120,3352), "S6542C9");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C5*), ABISELECT(2816,2280), "S6542C9");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C5*), ABISELECT(4240,3452), "S6542C9");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C11*), ABISELECT(4240,3452), "S6542C9");
    check_base_class_offset(lv, (S6542C7*)(S6542C5*), ABISELECT(3920,3196), "S6542C9");
    check_base_class_offset(lv, (S6542C5*), ABISELECT(2816,2280), "S6542C9");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C11*), ABISELECT(5344,4368), "S6542C9");
    check_base_class_offset(lv, (S19934C10*)(S6542C11*), ABISELECT(6768,5540), "S6542C9");
    check_base_class_offset(lv, (S6542C7*)(S6542C11*), ABISELECT(6448,5284), "S6542C9");
    /*is_ambiguous_... S6542C11::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C11*), ABISELECT(6624,5424), "S6542C9");
    check_base_class_offset(lv, (S6542C11*), ABISELECT(5344,4368), "S6542C9");
    /*is_ambiguous_... S6542C9::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*), 0, "S6542C9");
    check_field_offset(lv, s6542c9f0, ABISELECT(2728,2232), "S6542C9.s6542c9f0");
    check_field_offset(lv, s6542c9f1, ABISELECT(2736,2240), "S6542C9.s6542c9f1");
    test_class_info(&lv, &cd_S6542C9);
    dp->~S6542C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C9(Test_S6542C9, "S6542C9", ABISELECT(9376,7672));

#else // __cplusplus

extern void _ZN7S6542C9C1Ev();
extern void _ZN7S6542C9D2Ev();
Name_Map name_map_S6542C9[] = {
  NSPAIR(_ZN7S6542C9C1Ev),
  NSPAIR(_ZN7S6542C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C5;
extern VTBL_ENTRY _ZTI7S6542C5[];
extern  VTBL_ENTRY _ZTV7S6542C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C5[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C11;
extern VTBL_ENTRY _ZTI8S6542C11[];
extern  VTBL_ENTRY _ZTV8S6542C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6542C11[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
static Base_Class bases_S6542C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19934C10,    ABISELECT(120,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S6542C2,    ABISELECT(4120,3352), //bcp->offset
    26, //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
    2, //immediately_derived
  0, 1},
  {&cd_S6542C6,    ABISELECT(2816,2280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    5, //immediately_derived
  0, 0},
  {&cd_S6542C6,    ABISELECT(4240,3452), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6542C7,    ABISELECT(3920,3196), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6542C5,    ABISELECT(2816,2280), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6542C6,    ABISELECT(5344,4368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19934C10,    ABISELECT(6768,5540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6542C7,    ABISELECT(6448,5284), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6542C2,    ABISELECT(6624,5424), //bcp->offset
    48, //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
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S6542C11,    ABISELECT(5344,4368), //bcp->offset
    33, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6542C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S6542C9[];
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C9D1Ev();
extern void _ZN7S6542C9D0Ev();
extern void _ZN7S6542C92v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev)();
extern void ABISELECT(_ZThn2816_N7S6542C9D1Ev,_ZThn2280_N7S6542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev)();
extern void ABISELECT(_ZThn2816_N7S6542C9D0Ev,_ZThn2280_N7S6542C9D0Ev)() __attribute__((weak));
extern void _ZN7S6542C52v3Ev();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C9D1Ev,_ZTvn916_n20_N7S6542C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C9D0Ev,_ZTvn916_n20_N7S6542C9D0Ev)();
extern void _ZN7S6542C22v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev)();
extern void ABISELECT(_ZThn5344_N7S6542C9D1Ev,_ZThn4368_N7S6542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev)();
extern void ABISELECT(_ZThn5344_N7S6542C9D0Ev,_ZThn4368_N7S6542C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1104_n48_N7S6542C9D1Ev,_ZTvn916_n24_N7S6542C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N7S6542C9D0Ev,_ZTvn916_n24_N7S6542C9D0Ev)();
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C9[] = {
  ABISELECT(6768,5540),
  ABISELECT(5344,4368),
  ABISELECT(4240,3452),
  ABISELECT(4120,3352),
  ABISELECT(2816,2280),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C9D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C92v4Ev,
  0,
  ABISELECT(-2816,-2280),
  ABISELECT(1424,1172),
  ABISELECT(1304,1072),
  ABISELECT(-2816,-2280),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
  ABISELECT(320,256),
  ABISELECT(200,156),
  ABISELECT(-3920,-3196),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C9D1Ev,_ZTvn916_n20_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C9D0Ev,_ZTvn916_n20_N7S6542C9D0Ev),
  0,
  ABISELECT(-4120,-3352),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  ABISELECT(-120,-100),
  ABISELECT(-4240,-3452),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  ABISELECT(1280,1056),
  ABISELECT(-5344,-4368),
  ABISELECT(-1104,-916),
  ABISELECT(1424,1172),
  ABISELECT(-1224,-1016),
  ABISELECT(-5344,-4368),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev),
  ABISELECT(-2208,-1832),
  ABISELECT(-2328,-1932),
  ABISELECT(-6448,-5284),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C9D1Ev,_ZTvn916_n24_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C9D0Ev,_ZTvn916_n24_N7S6542C9D0Ev),
  ABISELECT(-6624,-5424),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern VTBL_ENTRY _ZTV7S6542C9[];
extern void _ZN7S6542C5D1Ev();
extern void _ZN7S6542C5D0Ev();
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C5__7S6542C9[] = {
  ABISELECT(1424,1172),
  ABISELECT(1304,1072),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C5__7S6542C9[] = {
  ABISELECT(1304,1072),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C67S6542C5__7S6542C9[] = {
  0,
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__7S6542C9[] = {
  ABISELECT(320,256),
  ABISELECT(200,156),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C77S6542C5__7S6542C9[] = {
  0,
  ABISELECT(-200,-156),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C77S6542C5__7S6542C9[] = {
  ABISELECT(-120,-100),
  ABISELECT(-320,-256),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C5__7S6542C9[] = {
  0,
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__7S6542C5__7S6542C9[] = {
  ABISELECT(320,256),
  ABISELECT(200,156),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C5__7S6542C9[] = {
  ABISELECT(-120,-100),
  ABISELECT(-1424,-1172),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C9[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A1__7S6542C9[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN8S6542C11D1Ev();
extern void _ZN8S6542C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6542C11__7S6542C9[] = {
  ABISELECT(-1104,-916),
  ABISELECT(1424,1172),
  ABISELECT(-1224,-1016),
  0,
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN8S6542C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6542C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C68S6542C11__A2__7S6542C9[] = {
  ABISELECT(-1224,-1016),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C68S6542C11__A2__7S6542C9[] = {
  0,
  ABISELECT(1224,1016),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C78S6542C11__A1__7S6542C9[] = {
  ABISELECT(-2208,-1832),
  ABISELECT(-2328,-1932),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C78S6542C11__A1__7S6542C9[] = {
  0,
  ABISELECT(2328,1932),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C78S6542C11__A1__7S6542C9[] = {
  ABISELECT(-120,-100),
  ABISELECT(2208,1832),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__8S6542C11__7S6542C9[] = {
  0,
  ABISELECT(1224,1016),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N8S6542C11D1Ev,_ZThn916_N8S6542C11D1Ev)();
extern void ABISELECT(_ZThn1104_N8S6542C11D0Ev,_ZThn916_N8S6542C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__8S6542C11__7S6542C9[] = {
  ABISELECT(-2208,-1832),
  ABISELECT(-2328,-1932),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S6542C11D1Ev,_ZThn916_N8S6542C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S6542C11D0Ev,_ZThn916_N8S6542C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__8S6542C11__7S6542C9[] = {
  ABISELECT(-120,-100),
  ABISELECT(1104,916),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
};
static  VTT_ENTRY vtt_S6542C9[] = {
  {&(_ZTV7S6542C9[7]),  7,51},
  {&(_ZTV7S6542C9[17]),  17,51},
  {&(_ZTV7S6542C9[29]),  29,51},
  {&(_ZTV7S6542C9[24]),  24,51},
  {&(_ZTV7S6542C9[33]),  33,51},
  {&(_ZTV7S6542C9[40]),  40,51},
  {&(_ZTV7S6542C9[46]),  46,51},
  {&(_ZTV7S6542C9[50]),  50,51},
  {&(_tg__ZTV7S6542C5__7S6542C9[4]),  4,7},
  {&(_tg__ZTV7S6542C67S6542C5__7S6542C9[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C67S6542C5__7S6542C9[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C5__7S6542C9[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C77S6542C5__7S6542C9[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C77S6542C5__7S6542C9[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C5__7S6542C9[3]),  3,4},
  {&(_tg__ZTV7S6542C7__7S6542C5__7S6542C9[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C5__7S6542C9[3]),  3,3},
  {&(_tg__ZTV7S6542C6__A1__7S6542C9[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A1__7S6542C9[3]),  3,4},
  {&(_tg__ZTV8S6542C11__7S6542C9[5]),  5,7},
  {&(_tg__ZTV7S6542C68S6542C11__A2__7S6542C9[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C68S6542C11__A2__7S6542C9[3]),  3,4},
  {&(_tg__ZTV7S6542C78S6542C11__A1__7S6542C9[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C78S6542C11__A1__7S6542C9[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C78S6542C11__A1__7S6542C9[3]),  3,3},
  {&(_tg__ZTV7S6542C2__8S6542C11__7S6542C9[3]),  3,4},
  {&(_tg__ZTV7S6542C7__8S6542C11__7S6542C9[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__8S6542C11__7S6542C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6542C9[];
extern  VTBL_ENTRY _ZTV7S6542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C9[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5344_N7S6542C9D0Ev,_ZThn4368_N7S6542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn5344_N7S6542C9D1Ev,_ZThn4368_N7S6542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N7S6542C9D0Ev,_ZThn2280_N7S6542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N7S6542C9D1Ev,_ZThn2280_N7S6542C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6542C9 = {  "S6542C9", // class name
  bases_S6542C9, 12,
  &(vtc_S6542C9[0]), // expected_vtbl_contents
  &(vtt_S6542C9[0]), // expected_vtt_contents
  ABISELECT(9376,7672), // object size
  NSPAIRA(_ZTI7S6542C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6542C9),51, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6542C9),28, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6542C3  : S6542C4 , S6542C2 , virtual S6542C9 {
  int s6542c3f0;
  long double s6542c3f1;
  int s6542c3f2;
  __tsi64 s6542c3f3;
  int s6542c3f4[2];
  virtual  ~S6542C3(); // _ZN7S6542C3D2Ev
  virtual void  v5(); // _ZN7S6542C32v5Ev
  S6542C3(); // tgen
};
//SIG(-1 S6542C3) C1{ BC2{ VBC3{ v2 Fs FL[4] Fp Fc Fp FL Fi[10]} BC4{ VBC3 BC5{ VBC3 FC3[8] Fi Fc FC3 Fi} BC6{ VBC3 VBC5 vd Fp Fi[6] Fc FC3 Fp} vd v3 FL Fp[2]} BC5 BC6 vd FL FC6[2] FL Fi FC7{}} BC3 VBC8{ BC9{ m FL FC10{ VBC11{ v6 Fs FL[4] Fp Fc Fp FL Fi[10]} BC12{ VBC11 FC11[8] Fi Fc FC11 Fi} BC13{ VBC11 VBC12 vd Fp Fi[6] Fc FC11 Fp} vd v5 FL Fp[2]} Fp[8] Fl} VBC4 VBC14{ BC5 VBC9 BC6 BC3 Fp Fi[3]} BC3 vd v4 FL Fp[10]} vd v1 Fi FD Fi FL Fi[2]}


 S6542C3 ::~S6542C3(){ note_dtor("S6542C3", this);}
void  S6542C3 ::v5(){vfunc_called(this, "_ZN7S6542C32v5Ev");}
S6542C3 ::S6542C3(){ note_ctor("S6542C3", this);} // tgen

static void Test_S6542C3()
{
  extern Class_Descriptor cd_S6542C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(936,3069)];
    init_test(&cd_S6542C3, buf);
    S6542C3 *dp, &lv = *(dp=new (buf) S6542C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14960,12272), "sizeof(S6542C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6542C3)");
    check_base_class_offset(lv, (S6542C2*)(S6542C4*), ABISELECT(5576,4600), "S6542C3");
    check_base_class_offset(lv, (S6542C2*)(S6542C5*)(S6542C4*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C5*)(S6542C4*), ABISELECT(5576,4600), "S6542C3");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C5*)(S6542C4*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C3::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C4::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C4*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C4*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C3::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C5*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C3::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C5*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C3::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C5*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C11*), ABISELECT(5576,4600), "S6542C3");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C11*), ABISELECT(5576,4600), "S6542C3");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C5*)(S6542C4*), 0, "S6542C3");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C5*)(S6542C4*), ABISELECT(5696,4700), "S6542C3");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C4*), ABISELECT(5696,4700), "S6542C3");
    /*is_ambiguous_... S6542C3::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C5*), ABISELECT(5696,4700), "S6542C3");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C11*), ABISELECT(5696,4700), "S6542C3");
    check_base_class_offset(lv, (S6542C7*)(S6542C5*)(S6542C4*), ABISELECT(1104,916), "S6542C3");
    check_base_class_offset(lv, (S6542C5*)(S6542C4*), 0, "S6542C3");
    /*is_ambiguous_... S6542C4::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C4*), ABISELECT(1304,1072), "S6542C3");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C7*)(S6542C4*), ABISELECT(2408,1988), "S6542C3");
    check_base_class_offset(lv, (S6542C4*), 0, "S6542C3");
    /*is_ambiguous_... S6542C3::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*), ABISELECT(5408,4464), "S6542C3");
    /*is_ambiguous_... S6542C9::S19934C10 */ AMB_check_base_class_offset(lv, (S19934C10*)(S6542C9*), ABISELECT(6920,5716), "S6542C3");
    /*is_ambiguous_... S6542C3::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C5*), ABISELECT(9616,7896), "S6542C3");
    /*is_ambiguous_... S6542C3::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C7*)(S6542C5*), ABISELECT(10720,8812), "S6542C3");
    check_base_class_offset(lv, (S6542C5*)(S6542C9*), ABISELECT(9616,7896), "S6542C3");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C11*), ABISELECT(10920,8968), "S6542C3");
    check_base_class_offset(lv, (S19934C10*)(S6542C11*), ABISELECT(12344,10140), "S6542C3");
    check_base_class_offset(lv, (S6542C7*)(S6542C11*), ABISELECT(12024,9884), "S6542C3");
    /*is_ambiguous_... S6542C11::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C11*), ABISELECT(12200,10024), "S6542C3");
    check_base_class_offset(lv, (S6542C11*)(S6542C9*), ABISELECT(10920,8968), "S6542C3");
    /*is_ambiguous_... S6542C9::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C9*), ABISELECT(6800,5616), "S6542C3");
    check_base_class_offset(lv, (S6542C9*), ABISELECT(6800,5616), "S6542C3");
    check_field_offset(lv, s6542c3f0, ABISELECT(5528,4564), "S6542C3.s6542c3f0");
    check_field_offset(lv, s6542c3f1, ABISELECT(5536,4568), "S6542C3.s6542c3f1");
    check_field_offset(lv, s6542c3f2, ABISELECT(5552,4580), "S6542C3.s6542c3f2");
    check_field_offset(lv, s6542c3f3, ABISELECT(5560,4584), "S6542C3.s6542c3f3");
    check_field_offset(lv, s6542c3f4, ABISELECT(5568,4592), "S6542C3.s6542c3f4");
    test_class_info(&lv, &cd_S6542C3);
    dp->~S6542C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C3(Test_S6542C3, "S6542C3", ABISELECT(14960,12272));

#else // __cplusplus

extern void _ZN7S6542C3C1Ev();
extern void _ZN7S6542C3D2Ev();
Name_Map name_map_S6542C3[] = {
  NSPAIR(_ZN7S6542C3C1Ev),
  NSPAIR(_ZN7S6542C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C5;
extern VTBL_ENTRY _ZTI7S6542C5[];
extern  VTBL_ENTRY _ZTV7S6542C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C5[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C4;
extern VTBL_ENTRY _ZTI7S6542C4[];
extern  VTBL_ENTRY _ZTV7S6542C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C4[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C5;
extern VTBL_ENTRY _ZTI7S6542C5[];
extern  VTBL_ENTRY _ZTV7S6542C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C5[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C11;
extern VTBL_ENTRY _ZTI8S6542C11[];
extern  VTBL_ENTRY _ZTV8S6542C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6542C11[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C9;
extern VTBL_ENTRY _ZTI7S6542C9[];
extern  VTBL_ENTRY _ZTV7S6542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C9[];
static Base_Class bases_S6542C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6542C2,    ABISELECT(5576,4600), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S6542C6,    0, //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
    12, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6542C6,    ABISELECT(5696,4700), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6542C7,    ABISELECT(1104,916), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6542C5,    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
    14, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6542C6,    ABISELECT(1304,1072), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6542C7,    ABISELECT(2408,1988), //bcp->offset
    21, //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
    16, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S6542C4,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S6542C2,    ABISELECT(5408,4464), //bcp->offset
    27, //bcp->virtual_function_table_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_S19934C10,    ABISELECT(6920,5716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S6542C6,    ABISELECT(9616,7896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6542C7,    ABISELECT(10720,8812), //bcp->offset
    60, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S6542C5,    ABISELECT(9616,7896), //bcp->offset
    51, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S6542C6,    ABISELECT(10920,8968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19934C10,    ABISELECT(12344,10140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S6542C7,    ABISELECT(12024,9884), //bcp->offset
    75, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6542C2,    ABISELECT(12200,10024), //bcp->offset
    81, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S6542C11,    ABISELECT(10920,8968), //bcp->offset
    66, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S6542C2,    ABISELECT(6800,5616), //bcp->offset
    -1, //bcp->virtual_function_table_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
    19, //immediately_derived
  0, 0},
  {&cd_S6542C9,    ABISELECT(6800,5616), //bcp->offset
    37, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    27, //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 _ZTI7S6542C3[];
extern void _ZN7S6542C3D1Ev();
extern void _ZN7S6542C3D0Ev();
extern void _ZN7S6542C52v3Ev();
extern void _ZN7S6542C32v5Ev();
extern void ABISELECT(_ZThn1104_N7S6542C3D1Ev,_ZThn916_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C3D0Ev,_ZThn916_N7S6542C3D0Ev)();
extern void ABISELECT(_ZThn2408_N7S6542C3D1Ev,_ZThn1988_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn2408_N7S6542C3D0Ev,_ZThn1988_N7S6542C3D0Ev)();
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C22v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S6542C3D1Ev,_ZTv0_n36_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn6800_N7S6542C3D1Ev,_ZThn5616_N7S6542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6542C3D0Ev,_ZTv0_n36_N7S6542C3D0Ev)();
extern void ABISELECT(_ZThn6800_N7S6542C3D0Ev,_ZThn5616_N7S6542C3D0Ev)() __attribute__((weak));
extern void _ZN7S6542C92v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S6542C3D1Ev,_ZTv0_n20_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn9616_N7S6542C3D1Ev,_ZThn7896_N7S6542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6542C3D0Ev,_ZTv0_n20_N7S6542C3D0Ev)();
extern void ABISELECT(_ZThn9616_N7S6542C3D0Ev,_ZThn7896_N7S6542C3D0Ev)() __attribute__((weak));
extern void _ZN7S6542C52v3Ev();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C3D1Ev,_ZTvn916_n20_N7S6542C3D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C3D0Ev,_ZTvn916_n20_N7S6542C3D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S6542C3D1Ev,_ZTv0_n24_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn10920_N7S6542C3D1Ev,_ZThn8968_N7S6542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6542C3D0Ev,_ZTv0_n24_N7S6542C3D0Ev)();
extern void ABISELECT(_ZThn10920_N7S6542C3D0Ev,_ZThn8968_N7S6542C3D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1104_n48_N7S6542C3D1Ev,_ZTvn916_n24_N7S6542C3D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N7S6542C3D0Ev,_ZTvn916_n24_N7S6542C3D0Ev)();
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C3[] = {
  ABISELECT(12344,10140),
  ABISELECT(10920,8968),
  ABISELECT(9616,7896),
  ABISELECT(6800,5616),
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
  (VTBL_ENTRY)&_ZN7S6542C32v5Ev,
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C3D1Ev,_ZThn916_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C3D0Ev,_ZThn916_N7S6542C3D0Ev),
  ABISELECT(4272,3528),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C3D1Ev,_ZThn1988_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C3D0Ev,_ZThn1988_N7S6542C3D0Ev),
  ABISELECT(-5408,-4464),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  0,
  ABISELECT(-6800,-5616),
  0,
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-1224,-1016),
  ABISELECT(2816,2280),
  ABISELECT(-6800,-5616),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6542C3D1Ev,_ZTv0_n36_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6542C3D0Ev,_ZTv0_n36_N7S6542C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C92v4Ev,
  0,
  ABISELECT(-9616,-7896),
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  ABISELECT(-9616,-7896),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C3D1Ev,_ZTv0_n20_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C3D0Ev,_ZTv0_n20_N7S6542C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-10720,-8812),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C3D1Ev,_ZTvn916_n20_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C3D0Ev,_ZTvn916_n20_N7S6542C3D0Ev),
  ABISELECT(1280,1056),
  ABISELECT(-10920,-8968),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  ABISELECT(-10920,-8968),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C3D1Ev,_ZTv0_n24_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C3D0Ev,_ZTv0_n24_N7S6542C3D0Ev),
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-12024,-9884),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C3D1Ev,_ZTvn916_n24_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C3D0Ev,_ZTvn916_n24_N7S6542C3D0Ev),
  ABISELECT(-12200,-10024),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern VTBL_ENTRY _ZTV7S6542C3[];
extern void _ZN7S6542C4D1Ev();
extern void _ZN7S6542C4D0Ev();
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C4__7S6542C3[] = {
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&_ZN7S6542C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
extern void _ZN7S6542C5D1Ev();
extern void _ZN7S6542C5D0Ev();
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C57S6542C4__7S6542C3[] = {
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C57S6542C4__7S6542C3[] = {
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C67S6542C57S6542C4__7S6542C3[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C57S6542C4__7S6542C3[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C77S6542C57S6542C4__7S6542C3[] = {
  0,
  ABISELECT(-4472,-3684),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C77S6542C57S6542C4__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(-4592,-3784),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C57S6542C4__7S6542C3[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__7S6542C57S6542C4__7S6542C3[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C57S6542C4__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C4__A2__7S6542C3[] = {
  ABISELECT(4272,3528),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C67S6542C4__A2__7S6542C3[] = {
  0,
  ABISELECT(-4272,-3528),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C4__A1__7S6542C3[] = {
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C77S6542C4__A1__7S6542C3[] = {
  0,
  ABISELECT(-3168,-2612),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C77S6542C4__A1__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(-3288,-2712),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C4__7S6542C3[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C4D1Ev,_ZThn916_N7S6542C4D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C4D0Ev,_ZThn916_N7S6542C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__7S6542C4__7S6542C3[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C4D1Ev,_ZThn916_N7S6542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C4D0Ev,_ZThn916_N7S6542C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C4__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A__7S6542C4__7S6542C3[] = {
  ABISELECT(4272,3528),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
};
extern void ABISELECT(_ZThn2408_N7S6542C4D1Ev,_ZThn1988_N7S6542C4D1Ev)();
extern void ABISELECT(_ZThn2408_N7S6542C4D0Ev,_ZThn1988_N7S6542C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__A1__7S6542C4__7S6542C3[] = {
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C4D1Ev,_ZThn1988_N7S6542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C4D0Ev,_ZThn1988_N7S6542C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C3[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A1__7S6542C3[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C9D1Ev();
extern void _ZN7S6542C9D0Ev();
extern void _ZN7S6542C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C9__7S6542C3[] = {
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-1224,-1016),
  ABISELECT(2816,2280),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C9D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C92v4Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev)();
extern void ABISELECT(_ZThn2816_N7S6542C9D1Ev,_ZThn2280_N7S6542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev)();
extern void ABISELECT(_ZThn2816_N7S6542C9D0Ev,_ZThn2280_N7S6542C9D0Ev)() __attribute__((weak));
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C5__7S6542C9__7S6542C3[] = {
  0,
  ABISELECT(-2816,-2280),
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  ABISELECT(-2816,-2280),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C9__7S6542C3[] = {
  0,
  ABISELECT(1224,1016),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZTvn1104_n40_N7S6542C9D1Ev,_ZTvn916_n20_N7S6542C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C9D0Ev,_ZTvn916_n20_N7S6542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__7S6542C9__7S6542C3[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-3920,-3196),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C9D1Ev,_ZTvn916_n20_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C9D0Ev,_ZTvn916_n20_N7S6542C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C9__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(1104,916),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev)();
extern void ABISELECT(_ZThn4120_N7S6542C9D1Ev,_ZThn3352_N7S6542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev)();
extern void ABISELECT(_ZThn4120_N7S6542C9D0Ev,_ZThn3352_N7S6542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6542C11__7S6542C9__7S6542C3[] = {
  ABISELECT(1280,1056),
  ABISELECT(-4120,-3352),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  ABISELECT(-4120,-3352),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev),
};
extern void ABISELECT(_ZTvn1104_n48_N7S6542C9D1Ev,_ZTvn916_n24_N7S6542C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N7S6542C9D0Ev,_ZTvn916_n24_N7S6542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C78S6542C11__A1__7S6542C9__7S6542C3[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-5224,-4268),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C9D1Ev,_ZTvn916_n24_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C9D0Ev,_ZTvn916_n24_N7S6542C9D0Ev),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C28S6542C11__A1__7S6542C9__7S6542C3[] = {
  ABISELECT(-5400,-4408),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C5D1Ev();
extern void _ZN7S6542C5D0Ev();
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C5__A1__7S6542C3[] = {
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C5__A3__7S6542C3[] = {
  ABISELECT(-4040,-3296),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C67S6542C5__A3__7S6542C3[] = {
  0,
  ABISELECT(4040,3296),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__A2__7S6542C3[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C77S6542C5__A2__7S6542C3[] = {
  0,
  ABISELECT(5144,4212),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C77S6542C5__A2__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(5024,4112),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C5__A1__7S6542C3[] = {
  0,
  ABISELECT(4040,3296),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__7S6542C5__A1__7S6542C3[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C5__A1__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(3920,3196),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
};
extern void _ZN8S6542C11D1Ev();
extern void _ZN8S6542C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6542C11__7S6542C3[] = {
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  0,
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN8S6542C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6542C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C68S6542C11__A4__7S6542C3[] = {
  ABISELECT(-5344,-4368),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C68S6542C11__A4__7S6542C3[] = {
  0,
  ABISELECT(5344,4368),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C78S6542C11__A3__7S6542C3[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C78S6542C11__A3__7S6542C3[] = {
  0,
  ABISELECT(6448,5284),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C78S6542C11__A3__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(6328,5184),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__8S6542C11__7S6542C3[] = {
  0,
  ABISELECT(5344,4368),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N8S6542C11D1Ev,_ZThn916_N8S6542C11D1Ev)();
extern void ABISELECT(_ZThn1104_N8S6542C11D0Ev,_ZThn916_N8S6542C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__8S6542C11__7S6542C3[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S6542C11D1Ev,_ZThn916_N8S6542C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S6542C11D0Ev,_ZThn916_N8S6542C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__8S6542C11__7S6542C3[] = {
  ABISELECT(-120,-100),
  ABISELECT(5224,4268),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
};
static  VTT_ENTRY vtt_S6542C3[] = {
  {&(_ZTV7S6542C3[8]),  8,84},
  {&(_tg__ZTV7S6542C4__7S6542C3[4]),  4,7},
  {&(_tg__ZTV7S6542C57S6542C4__7S6542C3[4]),  4,7},
  {&(_tg__ZTV7S6542C67S6542C57S6542C4__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C67S6542C57S6542C4__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C57S6542C4__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C77S6542C57S6542C4__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C77S6542C57S6542C4__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C57S6542C4__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C7__7S6542C57S6542C4__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C57S6542C4__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C67S6542C4__A2__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C67S6542C4__A2__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C4__A1__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C77S6542C4__A1__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C77S6542C4__A1__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C4__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C5__7S6542C4__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C4__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C6__A__7S6542C4__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C7__A1__7S6542C4__7S6542C3[4]),  4,6},
  {&(_ZTV7S6542C3[33]),  33,84},
  {&(_ZTV7S6542C3[16]),  16,84},
  {&(_ZTV7S6542C3[37]),  37,84},
  {&(_ZTV7S6542C3[21]),  21,84},
  {&(_ZTV7S6542C3[25]),  25,84},
  {&(_ZTV7S6542C3[47]),  47,84},
  {&(_ZTV7S6542C3[57]),  57,84},
  {&(_ZTV7S6542C3[64]),  64,84},
  {&(_ZTV7S6542C3[73]),  73,84},
  {&(_ZTV7S6542C3[79]),  79,84},
  {&(_ZTV7S6542C3[83]),  83,84},
  {&(_tg__ZTV7S6542C6__A1__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A1__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C9__7S6542C3[7]),  7,11},
  {&(_tg__ZTV7S6542C5__7S6542C9__7S6542C3[6]),  6,9},
  {&(_tg__ZTV7S6542C2__7S6542C9__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C5__7S6542C9__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C9__7S6542C3[3]),  3,3},
  {&(_tg__ZTV8S6542C11__7S6542C9__7S6542C3[7]),  7,9},
  {&(_tg__ZTV7S6542C78S6542C11__A1__7S6542C9__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C28S6542C11__A1__7S6542C9__7S6542C3[2]),  2,3},
  {&(_tg__ZTV7S6542C5__A1__7S6542C3[4]),  4,7},
  {&(_tg__ZTV7S6542C67S6542C5__A3__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C67S6542C5__A3__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C5__A2__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C77S6542C5__A2__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C77S6542C5__A2__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C5__A1__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C7__7S6542C5__A1__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C5__A1__7S6542C3[3]),  3,3},
  {&(_tg__ZTV8S6542C11__7S6542C3[5]),  5,7},
  {&(_tg__ZTV7S6542C68S6542C11__A4__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C68S6542C11__A4__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C78S6542C11__A3__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C78S6542C11__A3__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C78S6542C11__A3__7S6542C3[3]),  3,3},
  {&(_tg__ZTV7S6542C2__8S6542C11__7S6542C3[3]),  3,4},
  {&(_tg__ZTV7S6542C7__8S6542C11__7S6542C3[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__8S6542C11__7S6542C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6542C3[];
extern  VTBL_ENTRY _ZTV7S6542C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C3[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4120_N7S6542C9D0Ev,_ZThn3352_N7S6542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4120_N7S6542C9D1Ev,_ZThn3352_N7S6542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N7S6542C9D0Ev,_ZThn2280_N7S6542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N7S6542C9D1Ev,_ZThn2280_N7S6542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C3D0Ev,_ZTv0_n24_N7S6542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10920_N7S6542C3D0Ev,_ZThn8968_N7S6542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C3D1Ev,_ZTv0_n24_N7S6542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10920_N7S6542C3D1Ev,_ZThn8968_N7S6542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C3D0Ev,_ZTv0_n20_N7S6542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9616_N7S6542C3D0Ev,_ZThn7896_N7S6542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C3D1Ev,_ZTv0_n20_N7S6542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9616_N7S6542C3D1Ev,_ZThn7896_N7S6542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6542C3D0Ev,_ZTv0_n36_N7S6542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6800_N7S6542C3D0Ev,_ZThn5616_N7S6542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6542C3D1Ev,_ZTv0_n36_N7S6542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6800_N7S6542C3D1Ev,_ZThn5616_N7S6542C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6542C3 = {  "S6542C3", // class name
  bases_S6542C3, 20,
  &(vtc_S6542C3[0]), // expected_vtbl_contents
  &(vtt_S6542C3[0]), // expected_vtt_contents
  ABISELECT(14960,12272), // object size
  NSPAIRA(_ZTI7S6542C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6542C3),84, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6542C3),60, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6542C1  : S6542C2 , virtual S6542C3 {
  void *s6542c1f0;
  int s6542c1f1;
  void *s6542c1f2[10];
  __tsi64 s6542c1f3;
  ::S6542C5 s6542c1f4;
  int s6542c1f5;
  __tsi64 s6542c1f6;
  int s6542c1f7;
  void *s6542c1f8;
  virtual  ~S6542C1(); // _ZN7S6542C1D2Ev
  virtual void  v1(); // _ZN7S6542C12v1Ev
  S6542C1(); // tgen
};
//SIG(1 S6542C1) C1{ BC2{ v2 Fs FL[4] Fp Fc Fp FL Fi[10]} VBC3{ BC4{ VBC2 BC5{ VBC2 BC6{ VBC2 FC2[8] Fi Fc FC2 Fi} BC7{ VBC2 VBC6 vd Fp Fi[6] Fc FC2 Fp} vd v3 FL Fp[2]} BC6 BC7 vd FL FC7[2] FL Fi FC8{}} BC2 VBC9{ BC10{ m FL FC11{ VBC12{ v7 Fs FL[4] Fp Fc Fp FL Fi[10]} BC13{ VBC12 FC12[8] Fi Fc FC12 Fi} BC14{ VBC12 VBC13 vd Fp Fi[6] Fc FC12 Fp} vd v6 FL Fp[2]} Fp[8] Fl} VBC5 VBC15{ BC6 VBC10 BC7 BC2 Fp Fi[3]} BC2 vd v4 FL Fp[10]} vd v5 Fi FD Fi FL Fi[2]} vd v1 Fp Fi Fp[10] FL FC5 Fi FL Fi Fp}


 S6542C1 ::~S6542C1(){ note_dtor("S6542C1", this);}
void  S6542C1 ::v1(){vfunc_called(this, "_ZN7S6542C12v1Ev");}
S6542C1 ::S6542C1(){ note_ctor("S6542C1", this);} // tgen

static void Test_S6542C1()
{
  extern Class_Descriptor cd_S6542C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1110,3635)];
    init_test(&cd_S6542C1, buf);
    S6542C1 *dp, &lv = *(dp=new (buf) S6542C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17744,14536), "sizeof(S6542C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6542C1)");
    /*is_ambiguous_... S6542C1::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*), 0, "S6542C1");
    check_base_class_offset(lv, (S6542C2*)(S6542C4*)(S6542C3*), ABISELECT(8360,6864), "S6542C1");
    check_base_class_offset(lv, (S6542C2*)(S6542C5*)(S6542C4*)(S6542C3*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C5*)(S6542C4*)(S6542C3*), ABISELECT(8360,6864), "S6542C1");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C5*)(S6542C4*)(S6542C3*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C1::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C4::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C4*)(S6542C3*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C4*)(S6542C3*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C1::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C5*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C1::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C5*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C1::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C5*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C6*)(S6542C11*), ABISELECT(8360,6864), "S6542C1");
    check_base_class_offset(lv, (S6542C2*)(S6542C7*)(S6542C11*), ABISELECT(8360,6864), "S6542C1");
    /*is_ambiguous_... S6542C5::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C5*)(S6542C4*)(S6542C3*), ABISELECT(2784,2264), "S6542C1");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C5*)(S6542C4*)(S6542C3*), ABISELECT(8480,6964), "S6542C1");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C4*)(S6542C3*), ABISELECT(8480,6964), "S6542C1");
    /*is_ambiguous_... S6542C1::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C5*), ABISELECT(8480,6964), "S6542C1");
    check_base_class_offset(lv, (S6542C6*)(S6542C7*)(S6542C11*), ABISELECT(8480,6964), "S6542C1");
    check_base_class_offset(lv, (S6542C7*)(S6542C5*)(S6542C4*)(S6542C3*), ABISELECT(3888,3180), "S6542C1");
    check_base_class_offset(lv, (S6542C5*)(S6542C4*)(S6542C3*), ABISELECT(2784,2264), "S6542C1");
    /*is_ambiguous_... S6542C4::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C4*)(S6542C3*), ABISELECT(4088,3336), "S6542C1");
    /*is_ambiguous_... S6542C4::S6542C7 */ AMB_check_base_class_offset(lv, (S6542C7*)(S6542C4*)(S6542C3*), ABISELECT(5192,4252), "S6542C1");
    check_base_class_offset(lv, (S6542C4*)(S6542C3*), ABISELECT(2784,2264), "S6542C1");
    /*is_ambiguous_... S6542C3::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C3*), ABISELECT(8192,6728), "S6542C1");
    /*is_ambiguous_... S6542C9::S19934C10 */ AMB_check_base_class_offset(lv, (S19934C10*)(S6542C9*), ABISELECT(9704,7980), "S6542C1");
    /*is_ambiguous_... S6542C1::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C5*), ABISELECT(12400,10160), "S6542C1");
    /*is_ambiguous_... S6542C1::S6542C5 */ AMB_check_base_class_offset(lv, (S6542C7*)(S6542C5*), ABISELECT(13504,11076), "S6542C1");
    check_base_class_offset(lv, (S6542C5*)(S6542C9*), ABISELECT(12400,10160), "S6542C1");
    /*is_ambiguous_... S6542C11::S6542C6 */ AMB_check_base_class_offset(lv, (S6542C6*)(S6542C11*), ABISELECT(13704,11232), "S6542C1");
    check_base_class_offset(lv, (S19934C10*)(S6542C11*), ABISELECT(15128,12404), "S6542C1");
    check_base_class_offset(lv, (S6542C7*)(S6542C11*), ABISELECT(14808,12148), "S6542C1");
    /*is_ambiguous_... S6542C11::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C11*), ABISELECT(14984,12288), "S6542C1");
    check_base_class_offset(lv, (S6542C11*)(S6542C9*), ABISELECT(13704,11232), "S6542C1");
    /*is_ambiguous_... S6542C9::S6542C2 */ AMB_check_base_class_offset(lv, (S6542C2*)(S6542C9*), ABISELECT(9584,7880), "S6542C1");
    check_base_class_offset(lv, (S6542C9*)(S6542C3*), ABISELECT(9584,7880), "S6542C1");
    check_base_class_offset(lv, (S6542C3*), ABISELECT(2784,2264), "S6542C1");
    check_field_offset(lv, s6542c1f0, ABISELECT(120,100), "S6542C1.s6542c1f0");
    check_field_offset(lv, s6542c1f1, ABISELECT(128,104), "S6542C1.s6542c1f1");
    check_field_offset(lv, s6542c1f2, ABISELECT(136,108), "S6542C1.s6542c1f2");
    check_field_offset(lv, s6542c1f3, ABISELECT(216,148), "S6542C1.s6542c1f3");
    check_field_offset(lv, s6542c1f4, ABISELECT(224,156), "S6542C1.s6542c1f4");
    check_field_offset(lv, s6542c1f5, ABISELECT(2752,2244), "S6542C1.s6542c1f5");
    check_field_offset(lv, s6542c1f6, ABISELECT(2760,2248), "S6542C1.s6542c1f6");
    check_field_offset(lv, s6542c1f7, ABISELECT(2768,2256), "S6542C1.s6542c1f7");
    check_field_offset(lv, s6542c1f8, ABISELECT(2776,2260), "S6542C1.s6542c1f8");
    test_class_info(&lv, &cd_S6542C1);
    dp->~S6542C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6542C1(Test_S6542C1, "S6542C1", ABISELECT(17744,14536));

#else // __cplusplus

extern void _ZN7S6542C1C1Ev();
extern void _ZN7S6542C1D2Ev();
Name_Map name_map_S6542C1[] = {
  NSPAIR(_ZN7S6542C1C1Ev),
  NSPAIR(_ZN7S6542C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C5;
extern VTBL_ENTRY _ZTI7S6542C5[];
extern  VTBL_ENTRY _ZTV7S6542C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C5[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C4;
extern VTBL_ENTRY _ZTI7S6542C4[];
extern  VTBL_ENTRY _ZTV7S6542C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C4[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C5;
extern VTBL_ENTRY _ZTI7S6542C5[];
extern  VTBL_ENTRY _ZTV7S6542C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C5[];
extern Class_Descriptor cd_S6542C6;
extern VTBL_ENTRY _ZTI7S6542C6[];
extern  VTBL_ENTRY _ZTV7S6542C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C6[];
extern Class_Descriptor cd_S19934C10;
extern VTBL_ENTRY _ZTI9S19934C10[];
extern Class_Descriptor cd_S6542C7;
extern VTBL_ENTRY _ZTI7S6542C7[];
extern  VTBL_ENTRY _ZTV7S6542C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C7[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C11;
extern VTBL_ENTRY _ZTI8S6542C11[];
extern  VTBL_ENTRY _ZTV8S6542C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6542C11[];
extern Class_Descriptor cd_S6542C2;
extern VTBL_ENTRY _ZTI7S6542C2[];
extern  VTBL_ENTRY _ZTV7S6542C2[];
extern Class_Descriptor cd_S6542C9;
extern VTBL_ENTRY _ZTI7S6542C9[];
extern  VTBL_ENTRY _ZTV7S6542C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C9[];
extern Class_Descriptor cd_S6542C3;
extern VTBL_ENTRY _ZTI7S6542C3[];
extern  VTBL_ENTRY _ZTV7S6542C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C3[];
static Base_Class bases_S6542C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6542C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {&cd_S6542C2,    ABISELECT(8360,6864), //bcp->offset
    47, //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
    2, //immediately_derived
  0, 1},
  {&cd_S6542C6,    ABISELECT(2784,2264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6542C6,    ABISELECT(8480,6964), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6542C7,    ABISELECT(3888,3180), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S6542C5,    ABISELECT(2784,2264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6542C6,    ABISELECT(4088,3336), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6542C7,    ABISELECT(5192,4252), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S6542C4,    ABISELECT(2784,2264), //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
    17, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S6542C2,    ABISELECT(8192,6728), //bcp->offset
    44, //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
    18, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19934C10,    ABISELECT(9704,7980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6542C6,    ABISELECT(12400,10160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6542C7,    ABISELECT(13504,11076), //bcp->offset
    77, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S6542C5,    ABISELECT(12400,10160), //bcp->offset
    68, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6542C6,    ABISELECT(13704,11232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19934C10,    ABISELECT(15128,12404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S6542C7,    ABISELECT(14808,12148), //bcp->offset
    92, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6542C2,    ABISELECT(14984,12288), //bcp->offset
    98, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S6542C11,    ABISELECT(13704,11232), //bcp->offset
    83, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6542C2,    ABISELECT(9584,7880), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S6542C9,    ABISELECT(9584,7880), //bcp->offset
    54, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S6542C3,    ABISELECT(2784,2264), //bcp->offset
    13, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6542C1[];
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C1D1Ev();
extern void _ZN7S6542C1D0Ev();
extern void _ZN7S6542C12v1Ev();
extern void ABISELECT(_ZTv0_n72_N7S6542C1D1Ev,_ZTv0_n36_N7S6542C1D1Ev)();
extern void ABISELECT(_ZThn2784_N7S6542C1D1Ev,_ZThn2264_N7S6542C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6542C1D0Ev,_ZTv0_n36_N7S6542C1D0Ev)();
extern void ABISELECT(_ZThn2784_N7S6542C1D0Ev,_ZThn2264_N7S6542C1D0Ev)() __attribute__((weak));
extern void _ZN7S6542C52v3Ev();
extern void _ZN7S6542C32v5Ev();
extern void ABISELECT(_ZTvn1104_n72_N7S6542C1D1Ev,_ZTvn916_n36_N7S6542C1D1Ev)();
extern void ABISELECT(_ZTvn1104_n72_N7S6542C1D0Ev,_ZTvn916_n36_N7S6542C1D0Ev)();
extern void ABISELECT(_ZTvn2408_n72_N7S6542C1D1Ev,_ZTvn1988_n36_N7S6542C1D1Ev)();
extern void ABISELECT(_ZTvn2408_n72_N7S6542C1D0Ev,_ZTvn1988_n36_N7S6542C1D0Ev)();
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C22v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S6542C1D1Ev,_ZTv0_n36_N7S6542C1D1Ev)();
extern void ABISELECT(_ZThn9584_N7S6542C1D1Ev,_ZThn7880_N7S6542C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6542C1D0Ev,_ZTv0_n36_N7S6542C1D0Ev)();
extern void ABISELECT(_ZThn9584_N7S6542C1D0Ev,_ZThn7880_N7S6542C1D0Ev)() __attribute__((weak));
extern void _ZN7S6542C92v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S6542C1D1Ev,_ZTv0_n20_N7S6542C1D1Ev)();
extern void ABISELECT(_ZThn12400_N7S6542C1D1Ev,_ZThn10160_N7S6542C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6542C1D0Ev,_ZTv0_n20_N7S6542C1D0Ev)();
extern void ABISELECT(_ZThn12400_N7S6542C1D0Ev,_ZThn10160_N7S6542C1D0Ev)() __attribute__((weak));
extern void _ZN7S6542C52v3Ev();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C1D1Ev,_ZTvn916_n20_N7S6542C1D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C1D0Ev,_ZTvn916_n20_N7S6542C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S6542C1D1Ev,_ZTv0_n24_N7S6542C1D1Ev)();
extern void ABISELECT(_ZThn13704_N7S6542C1D1Ev,_ZThn11232_N7S6542C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6542C1D0Ev,_ZTv0_n24_N7S6542C1D0Ev)();
extern void ABISELECT(_ZThn13704_N7S6542C1D0Ev,_ZThn11232_N7S6542C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn1104_n48_N7S6542C1D1Ev,_ZTvn916_n24_N7S6542C1D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N7S6542C1D0Ev,_ZTvn916_n24_N7S6542C1D0Ev)();
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY vtc_S6542C1[] = {
  ABISELECT(15128,12404),
  ABISELECT(13704,11232),
  ABISELECT(12400,10160),
  ABISELECT(9584,7880),
  ABISELECT(8480,6964),
  ABISELECT(8360,6864),
  ABISELECT(2784,2264),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6542C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C12v1Ev,
  ABISELECT(5408,4464),
  0,
  0,
  ABISELECT(-2784,-2264),
  ABISELECT(12344,10140),
  ABISELECT(10920,8968),
  ABISELECT(9616,7896),
  ABISELECT(6800,5616),
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  ABISELECT(-2784,-2264),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6542C1D1Ev,_ZTv0_n36_N7S6542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6542C1D0Ev,_ZTv0_n36_N7S6542C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
  (VTBL_ENTRY)&_ZN7S6542C32v5Ev,
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-3888,-3180),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n72_N7S6542C1D1Ev,_ZTvn916_n36_N7S6542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n72_N7S6542C1D0Ev,_ZTvn916_n36_N7S6542C1D0Ev),
  ABISELECT(4272,3528),
  ABISELECT(-4088,-3336),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  ABISELECT(-5192,-4252),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2408_n72_N7S6542C1D1Ev,_ZTvn1988_n36_N7S6542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2408_n72_N7S6542C1D0Ev,_ZTvn1988_n36_N7S6542C1D0Ev),
  ABISELECT(-8192,-6728),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  0,
  ABISELECT(-8360,-6864),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  ABISELECT(-120,-100),
  ABISELECT(-8480,-6964),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  0,
  ABISELECT(-9584,-7880),
  0,
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-1224,-1016),
  ABISELECT(2816,2280),
  ABISELECT(-9584,-7880),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6542C1D1Ev,_ZTv0_n36_N7S6542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6542C1D0Ev,_ZTv0_n36_N7S6542C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C92v4Ev,
  0,
  ABISELECT(-12400,-10160),
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  ABISELECT(-12400,-10160),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C1D1Ev,_ZTv0_n20_N7S6542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C1D0Ev,_ZTv0_n20_N7S6542C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-13504,-11076),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C1D1Ev,_ZTvn916_n20_N7S6542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C1D0Ev,_ZTvn916_n20_N7S6542C1D0Ev),
  ABISELECT(1280,1056),
  ABISELECT(-13704,-11232),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  ABISELECT(-13704,-11232),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C1D1Ev,_ZTv0_n24_N7S6542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C1D0Ev,_ZTv0_n24_N7S6542C1D0Ev),
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-14808,-12148),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C1D1Ev,_ZTvn916_n24_N7S6542C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C1D0Ev,_ZTvn916_n24_N7S6542C1D0Ev),
  ABISELECT(-14984,-12288),
  (VTBL_ENTRY)&(_ZTI7S6542C1[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern VTBL_ENTRY _ZTV7S6542C1[];
extern void _ZN7S6542C3D1Ev();
extern void _ZN7S6542C3D0Ev();
extern void _ZN7S6542C52v3Ev();
extern void _ZN7S6542C32v5Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C3__7S6542C1[] = {
  ABISELECT(12344,10140),
  ABISELECT(10920,8968),
  ABISELECT(9616,7896),
  ABISELECT(6800,5616),
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C3D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
  (VTBL_ENTRY)&_ZN7S6542C32v5Ev,
};
extern void _ZN7S6542C4D1Ev();
extern void _ZN7S6542C4D0Ev();
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&_ZN7S6542C4D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C4D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
extern void _ZN7S6542C5D1Ev();
extern void _ZN7S6542C5D0Ev();
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C57S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(5696,4700),
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C57S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(5576,4600),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C67S6542C57S6542C47S6542C3__7S6542C1[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C57S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C77S6542C57S6542C47S6542C3__7S6542C1[] = {
  0,
  ABISELECT(-4472,-3684),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C77S6542C57S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(-4592,-3784),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C57S6542C47S6542C3__7S6542C1[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__7S6542C57S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C57S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C47S6542C3__A2__7S6542C1[] = {
  ABISELECT(4272,3528),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C67S6542C47S6542C3__A2__7S6542C1[] = {
  0,
  ABISELECT(-4272,-3528),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C47S6542C3__A1__7S6542C1[] = {
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C77S6542C47S6542C3__A1__7S6542C1[] = {
  0,
  ABISELECT(-3168,-2612),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C77S6542C47S6542C3__A1__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(-3288,-2712),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C47S6542C3__7S6542C1[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C4D1Ev,_ZThn916_N7S6542C4D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C4D0Ev,_ZThn916_N7S6542C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__7S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C4D1Ev,_ZThn916_N7S6542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C4D0Ev,_ZThn916_N7S6542C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A__7S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(4272,3528),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
};
extern void ABISELECT(_ZThn2408_N7S6542C4D1Ev,_ZThn1988_N7S6542C4D1Ev)();
extern void ABISELECT(_ZThn2408_N7S6542C4D0Ev,_ZThn1988_N7S6542C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__A1__7S6542C47S6542C3__7S6542C1[] = {
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI7S6542C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C4D1Ev,_ZThn1988_N7S6542C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C4D0Ev,_ZThn1988_N7S6542C4D0Ev),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C3__7S6542C1[] = {
  0,
  ABISELECT(-5576,-4600),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C3D1Ev,_ZThn916_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C3D0Ev,_ZThn916_N7S6542C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C57S6542C4__7S6542C3__7S6542C1[] = {
  ABISELECT(4592,3784),
  ABISELECT(4472,3684),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C3D1Ev,_ZThn916_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C3D0Ev,_ZThn916_N7S6542C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C3__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(-5696,-4700),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C4__A2__7S6542C3__7S6542C1[] = {
  ABISELECT(4272,3528),
  ABISELECT(-1304,-1072),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
};
extern void ABISELECT(_ZThn2408_N7S6542C3D1Ev,_ZThn1988_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn2408_N7S6542C3D0Ev,_ZThn1988_N7S6542C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C4__A1__7S6542C3__7S6542C1[] = {
  ABISELECT(3288,2712),
  ABISELECT(3168,2612),
  ABISELECT(-2408,-1988),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C3D1Ev,_ZThn1988_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2408_N7S6542C3D0Ev,_ZThn1988_N7S6542C3D0Ev),
};
extern void _ZN7S6542C22v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S6542C3D1Ev,_ZTv0_n36_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn6800_N7S6542C3D1Ev,_ZThn5616_N7S6542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S6542C3D0Ev,_ZTv0_n36_N7S6542C3D0Ev)();
extern void ABISELECT(_ZThn6800_N7S6542C3D0Ev,_ZThn5616_N7S6542C3D0Ev)() __attribute__((weak));
extern void _ZN7S6542C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C9__7S6542C3__7S6542C1[] = {
  0,
  ABISELECT(-6800,-5616),
  0,
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-1224,-1016),
  ABISELECT(2816,2280),
  ABISELECT(-6800,-5616),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6542C3D1Ev,_ZTv0_n36_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S6542C3D0Ev,_ZTv0_n36_N7S6542C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C92v4Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S6542C3D1Ev,_ZTv0_n20_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn9616_N7S6542C3D1Ev,_ZThn7896_N7S6542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6542C3D0Ev,_ZTv0_n20_N7S6542C3D0Ev)();
extern void ABISELECT(_ZThn9616_N7S6542C3D0Ev,_ZThn7896_N7S6542C3D0Ev)() __attribute__((weak));
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C5__A1__7S6542C3__7S6542C1[] = {
  0,
  ABISELECT(-9616,-7896),
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  ABISELECT(-9616,-7896),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C3D1Ev,_ZTv0_n20_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C3D0Ev,_ZTv0_n20_N7S6542C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
extern void ABISELECT(_ZTvn1104_n40_N7S6542C3D1Ev,_ZTvn916_n20_N7S6542C3D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C3D0Ev,_ZTvn916_n20_N7S6542C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__A2__7S6542C3__7S6542C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-10720,-8812),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C3D1Ev,_ZTvn916_n20_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C3D0Ev,_ZTvn916_n20_N7S6542C3D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S6542C3D1Ev,_ZTv0_n24_N7S6542C3D1Ev)();
extern void ABISELECT(_ZThn10920_N7S6542C3D1Ev,_ZThn8968_N7S6542C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6542C3D0Ev,_ZTv0_n24_N7S6542C3D0Ev)();
extern void ABISELECT(_ZThn10920_N7S6542C3D0Ev,_ZThn8968_N7S6542C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6542C11__7S6542C3__7S6542C1[] = {
  ABISELECT(1280,1056),
  ABISELECT(-10920,-8968),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  ABISELECT(-10920,-8968),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C3D1Ev,_ZTv0_n24_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C3D0Ev,_ZTv0_n24_N7S6542C3D0Ev),
};
extern void ABISELECT(_ZTvn1104_n48_N7S6542C3D1Ev,_ZTvn916_n24_N7S6542C3D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N7S6542C3D0Ev,_ZTvn916_n24_N7S6542C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C78S6542C11__A3__7S6542C3__7S6542C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-12024,-9884),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C3D1Ev,_ZTvn916_n24_N7S6542C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C3D0Ev,_ZTvn916_n24_N7S6542C3D0Ev),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C28S6542C11__A2__7S6542C3__7S6542C1[] = {
  ABISELECT(-12200,-10024),
  (VTBL_ENTRY)&(_ZTI7S6542C3[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C1[] = {
  ABISELECT(-120,-100),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C6__A1__7S6542C1[] = {
  0,
  ABISELECT(120,100),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C22v2Ev();
extern void _ZN7S6542C9D1Ev();
extern void _ZN7S6542C9D0Ev();
extern void _ZN7S6542C92v4Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C9__7S6542C1[] = {
  ABISELECT(5544,4524),
  ABISELECT(4120,3352),
  ABISELECT(-1104,-916),
  ABISELECT(-1224,-1016),
  ABISELECT(2816,2280),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
  (VTBL_ENTRY)&_ZN7S6542C9D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C9D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C92v4Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev)();
extern void ABISELECT(_ZThn2816_N7S6542C9D1Ev,_ZThn2280_N7S6542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev)();
extern void ABISELECT(_ZThn2816_N7S6542C9D0Ev,_ZThn2280_N7S6542C9D0Ev)() __attribute__((weak));
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C5__7S6542C9__7S6542C1[] = {
  0,
  ABISELECT(-2816,-2280),
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  ABISELECT(-2816,-2280),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev),
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C9__7S6542C1[] = {
  0,
  ABISELECT(1224,1016),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZTvn1104_n40_N7S6542C9D1Ev,_ZTvn916_n20_N7S6542C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n40_N7S6542C9D0Ev,_ZTvn916_n20_N7S6542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__7S6542C9__7S6542C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-3920,-3196),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C9D1Ev,_ZTvn916_n20_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n40_N7S6542C9D0Ev,_ZTvn916_n20_N7S6542C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C9__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(1104,916),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev)();
extern void ABISELECT(_ZThn4120_N7S6542C9D1Ev,_ZThn3352_N7S6542C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev)();
extern void ABISELECT(_ZThn4120_N7S6542C9D0Ev,_ZThn3352_N7S6542C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6542C11__7S6542C9__7S6542C1[] = {
  ABISELECT(1280,1056),
  ABISELECT(-4120,-3352),
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  ABISELECT(-4120,-3352),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev),
};
extern void ABISELECT(_ZTvn1104_n48_N7S6542C9D1Ev,_ZTvn916_n24_N7S6542C9D1Ev)();
extern void ABISELECT(_ZTvn1104_n48_N7S6542C9D0Ev,_ZTvn916_n24_N7S6542C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C78S6542C11__A1__7S6542C9__7S6542C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-5224,-4268),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C9D1Ev,_ZTvn916_n24_N7S6542C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn1104_n48_N7S6542C9D0Ev,_ZTvn916_n24_N7S6542C9D0Ev),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C28S6542C11__A1__7S6542C9__7S6542C1[] = {
  ABISELECT(-5400,-4408),
  (VTBL_ENTRY)&(_ZTI7S6542C9[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C5D1Ev();
extern void _ZN7S6542C5D0Ev();
extern void _ZN7S6542C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C5__A1__7S6542C1[] = {
  ABISELECT(-3920,-3196),
  ABISELECT(-4040,-3296),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6542C52v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C67S6542C5__A3__7S6542C1[] = {
  ABISELECT(-4040,-3296),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C67S6542C5__A3__7S6542C1[] = {
  0,
  ABISELECT(4040,3296),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C77S6542C5__A2__7S6542C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C77S6542C5__A2__7S6542C1[] = {
  0,
  ABISELECT(5144,4212),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C77S6542C5__A2__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(5024,4112),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C5__A1__7S6542C1[] = {
  0,
  ABISELECT(4040,3296),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev)();
extern void ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__7S6542C5__A1__7S6542C1[] = {
  ABISELECT(-5024,-4112),
  ABISELECT(-5144,-4212),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D1Ev,_ZThn916_N7S6542C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N7S6542C5D0Ev,_ZThn916_N7S6542C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__7S6542C5__A1__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(3920,3196),
  (VTBL_ENTRY)&(_ZTI7S6542C5[0]),
};
extern void _ZN8S6542C11D1Ev();
extern void _ZN8S6542C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6542C11__7S6542C1[] = {
  ABISELECT(-5224,-4268),
  ABISELECT(1424,1172),
  ABISELECT(-5344,-4368),
  0,
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN8S6542C11D1Ev,
  (VTBL_ENTRY)&_ZN8S6542C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C68S6542C11__A4__7S6542C1[] = {
  ABISELECT(-5344,-4368),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C68S6542C11__A4__7S6542C1[] = {
  0,
  ABISELECT(5344,4368),
  (VTBL_ENTRY)&(_ZTI7S6542C6[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void _ZN7S6542C7D1Ev();
extern void _ZN7S6542C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C78S6542C11__A3__7S6542C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  0,
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6542C7D0Ev,
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__7S6542C78S6542C11__A3__7S6542C1[] = {
  0,
  ABISELECT(6448,5284),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__7S6542C78S6542C11__A3__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(6328,5184),
  (VTBL_ENTRY)&(_ZTI7S6542C7[0]),
};
extern void _ZN7S6542C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6542C2__8S6542C11__7S6542C1[] = {
  0,
  ABISELECT(5344,4368),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&_ZN7S6542C22v2Ev,
};
extern void ABISELECT(_ZThn1104_N8S6542C11D1Ev,_ZThn916_N8S6542C11D1Ev)();
extern void ABISELECT(_ZThn1104_N8S6542C11D0Ev,_ZThn916_N8S6542C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6542C7__8S6542C11__7S6542C1[] = {
  ABISELECT(-6328,-5184),
  ABISELECT(-6448,-5284),
  ABISELECT(-1104,-916),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S6542C11D1Ev,_ZThn916_N8S6542C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1104_N8S6542C11D0Ev,_ZThn916_N8S6542C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6542C6__A1__8S6542C11__7S6542C1[] = {
  ABISELECT(-120,-100),
  ABISELECT(5224,4268),
  (VTBL_ENTRY)&(_ZTI8S6542C11[0]),
};
static  VTT_ENTRY vtt_S6542C1[] = {
  {&(_ZTV7S6542C1[9]),  9,101},
  {&(_ZTV7S6542C1[25]),  25,101},
  {&(_ZTV7S6542C1[50]),  50,101},
  {&(_ZTV7S6542C1[33]),  33,101},
  {&(_ZTV7S6542C1[54]),  54,101},
  {&(_ZTV7S6542C1[38]),  38,101},
  {&(_ZTV7S6542C1[42]),  42,101},
  {&(_ZTV7S6542C1[46]),  46,101},
  {&(_ZTV7S6542C1[64]),  64,101},
  {&(_ZTV7S6542C1[74]),  74,101},
  {&(_ZTV7S6542C1[81]),  81,101},
  {&(_ZTV7S6542C1[90]),  90,101},
  {&(_ZTV7S6542C1[96]),  96,101},
  {&(_ZTV7S6542C1[100]),  100,101},
  {&(_tg__ZTV7S6542C3__7S6542C1[8]),  8,12},
  {&(_tg__ZTV7S6542C47S6542C3__7S6542C1[4]),  4,7},
  {&(_tg__ZTV7S6542C57S6542C47S6542C3__7S6542C1[4]),  4,7},
  {&(_tg__ZTV7S6542C67S6542C57S6542C47S6542C3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C67S6542C57S6542C47S6542C3__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C57S6542C47S6542C3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C77S6542C57S6542C47S6542C3__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C77S6542C57S6542C47S6542C3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C57S6542C47S6542C3__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C7__7S6542C57S6542C47S6542C3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C57S6542C47S6542C3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C67S6542C47S6542C3__A2__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C67S6542C47S6542C3__A2__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C47S6542C3__A1__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C77S6542C47S6542C3__A1__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C77S6542C47S6542C3__A1__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C47S6542C3__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C5__7S6542C47S6542C3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C47S6542C3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C6__A__7S6542C47S6542C3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C7__A1__7S6542C47S6542C3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C3__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C57S6542C4__7S6542C3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C67S6542C4__A2__7S6542C3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C77S6542C4__A1__7S6542C3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C9__7S6542C3__7S6542C1[10]),  10,14},
  {&(_tg__ZTV7S6542C5__A1__7S6542C3__7S6542C1[6]),  6,9},
  {&(_tg__ZTV7S6542C77S6542C5__A2__7S6542C3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV8S6542C11__7S6542C3__7S6542C1[7]),  7,9},
  {&(_tg__ZTV7S6542C78S6542C11__A3__7S6542C3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C28S6542C11__A2__7S6542C3__7S6542C1[2]),  2,3},
  {&(_tg__ZTV7S6542C6__A1__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C6__A1__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C9__7S6542C1[7]),  7,11},
  {&(_tg__ZTV7S6542C5__7S6542C9__7S6542C1[6]),  6,9},
  {&(_tg__ZTV7S6542C2__7S6542C9__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C5__7S6542C9__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C9__7S6542C1[3]),  3,3},
  {&(_tg__ZTV8S6542C11__7S6542C9__7S6542C1[7]),  7,9},
  {&(_tg__ZTV7S6542C78S6542C11__A1__7S6542C9__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C28S6542C11__A1__7S6542C9__7S6542C1[2]),  2,3},
  {&(_tg__ZTV7S6542C5__A1__7S6542C1[4]),  4,7},
  {&(_tg__ZTV7S6542C67S6542C5__A3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C67S6542C5__A3__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C77S6542C5__A2__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C77S6542C5__A2__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C77S6542C5__A2__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C5__A1__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C7__7S6542C5__A1__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__7S6542C5__A1__7S6542C1[3]),  3,3},
  {&(_tg__ZTV8S6542C11__7S6542C1[5]),  5,7},
  {&(_tg__ZTV7S6542C68S6542C11__A4__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__7S6542C68S6542C11__A4__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C78S6542C11__A3__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C2__7S6542C78S6542C11__A3__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C6__7S6542C78S6542C11__A3__7S6542C1[3]),  3,3},
  {&(_tg__ZTV7S6542C2__8S6542C11__7S6542C1[3]),  3,4},
  {&(_tg__ZTV7S6542C7__8S6542C11__7S6542C1[4]),  4,6},
  {&(_tg__ZTV7S6542C6__A1__8S6542C11__7S6542C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6542C1[];
extern  VTBL_ENTRY _ZTV7S6542C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6542C1[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C9D0Ev,_ZTv0_n24_N7S6542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4120_N7S6542C9D0Ev,_ZThn3352_N7S6542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C9D1Ev,_ZTv0_n24_N7S6542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4120_N7S6542C9D1Ev,_ZThn3352_N7S6542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C9D0Ev,_ZTv0_n20_N7S6542C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N7S6542C9D0Ev,_ZThn2280_N7S6542C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C9D1Ev,_ZTv0_n20_N7S6542C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2816_N7S6542C9D1Ev,_ZThn2280_N7S6542C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C3D0Ev,_ZTv0_n24_N7S6542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10920_N7S6542C3D0Ev,_ZThn8968_N7S6542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C3D1Ev,_ZTv0_n24_N7S6542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10920_N7S6542C3D1Ev,_ZThn8968_N7S6542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C3D0Ev,_ZTv0_n20_N7S6542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9616_N7S6542C3D0Ev,_ZThn7896_N7S6542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C3D1Ev,_ZTv0_n20_N7S6542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9616_N7S6542C3D1Ev,_ZThn7896_N7S6542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6542C3D0Ev,_ZTv0_n36_N7S6542C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6800_N7S6542C3D0Ev,_ZThn5616_N7S6542C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6542C3D1Ev,_ZTv0_n36_N7S6542C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6800_N7S6542C3D1Ev,_ZThn5616_N7S6542C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C1D0Ev,_ZTv0_n24_N7S6542C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13704_N7S6542C1D0Ev,_ZThn11232_N7S6542C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S6542C1D1Ev,_ZTv0_n24_N7S6542C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn13704_N7S6542C1D1Ev,_ZThn11232_N7S6542C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C1D0Ev,_ZTv0_n20_N7S6542C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12400_N7S6542C1D0Ev,_ZThn10160_N7S6542C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6542C1D1Ev,_ZTv0_n20_N7S6542C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12400_N7S6542C1D1Ev,_ZThn10160_N7S6542C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6542C1D0Ev,_ZTv0_n36_N7S6542C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9584_N7S6542C1D0Ev,_ZThn7880_N7S6542C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2784_N7S6542C1D0Ev,_ZThn2264_N7S6542C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S6542C1D1Ev,_ZTv0_n36_N7S6542C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn9584_N7S6542C1D1Ev,_ZThn7880_N7S6542C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2784_N7S6542C1D1Ev,_ZThn2264_N7S6542C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6542C1 = {  "S6542C1", // class name
  bases_S6542C1, 22,
  &(vtc_S6542C1[0]), // expected_vtbl_contents
  &(vtt_S6542C1[0]), // expected_vtt_contents
  ABISELECT(17744,14536), // object size
  NSPAIRA(_ZTI7S6542C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6542C1),101, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6542C1),74, //virtual table table var
  20, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19572C5  {
  short s19572c5f0:13;
  void  mf19572c5(); // _ZN8S19572C59mf19572c5Ev
};
//SIG(-1 S19572C5) C1{ m Fs:13}


void  S19572C5 ::mf19572c5(){}

static void Test_S19572C5()
{
  {
    init_simple_test("S19572C5");
    static S19572C5 lv;
    check2(sizeof(lv), 2, "sizeof(S19572C5)");
    check2(__alignof__(lv), 2, "__alignof__(S19572C5)");
    set_bf_and_test(lv, s19572c5f0, 0, 0, 13, 1, "S19572C5");
    set_bf_and_test(lv, s19572c5f0, 0, 0, 13, hide_sll(1LL<<12), "S19572C5");
  }
}
static Arrange_To_Call_Me vS19572C5(Test_S19572C5, "S19572C5", 2);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19572C5[];
VTBL_ENTRY *P__ZTI8S19572C5 = _ZTI8S19572C5; 
Class_Descriptor cd_S19572C5 = {  "S19572C5", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  2, // object size
  NSPAIRA(_ZTI8S19572C5),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  S19572C4  : virtual S19572C5 {
  ~S19572C4(); // tgen
  S19572C4(); // tgen
};
//SIG(-1 S19572C4) C1{ VBC2{ m Fs:13}}


S19572C4 ::~S19572C4(){ note_dtor("S19572C4", this);} // tgen
S19572C4 ::S19572C4(){ note_ctor("S19572C4", this);} // tgen

static void Test_S19572C4()
{
  extern Class_Descriptor cd_S19572C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19572C4, buf);
    S19572C4 *dp, &lv = *(dp=new (buf) S19572C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19572C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C4)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S19572C4");
    test_class_info(&lv, &cd_S19572C4);
    dp->~S19572C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C4(Test_S19572C4, "S19572C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19572C4C1Ev();
extern void _ZN8S19572C4D1Ev();
Name_Map name_map_S19572C4[] = {
  NSPAIR(_ZN8S19572C4C1Ev),
  NSPAIR(_ZN8S19572C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S19572C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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 _ZTI8S19572C4[];
static  VTBL_ENTRY vtc_S19572C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern VTBL_ENTRY _ZTV8S19572C4[];
static  VTT_ENTRY vtt_S19572C4[] = {
  {&(_ZTV8S19572C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
Class_Descriptor cd_S19572C4 = {  "S19572C4", // class name
  bases_S19572C4, 1,
  &(vtc_S19572C4[0]), // expected_vtbl_contents
  &(vtt_S19572C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19572C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19572C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19572C4),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  S19572C3  : virtual S19572C4 {
  ~S19572C3(); // tgen
  S19572C3(); // tgen
};
//SIG(-1 S19572C3) C1{ VBC2{ VBC3{ m Fs:13}}}


S19572C3 ::~S19572C3(){ note_dtor("S19572C3", this);} // tgen
S19572C3 ::S19572C3(){ note_ctor("S19572C3", this);} // tgen

static void Test_S19572C3()
{
  extern Class_Descriptor cd_S19572C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19572C3, buf);
    S19572C3 *dp, &lv = *(dp=new (buf) S19572C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19572C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C3)");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(8,4), "S19572C3");
    check_base_class_offset(lv, (S19572C4*), 0, "S19572C3");
    test_class_info(&lv, &cd_S19572C3);
    dp->~S19572C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C3(Test_S19572C3, "S19572C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19572C3C1Ev();
extern void _ZN8S19572C3D1Ev();
Name_Map name_map_S19572C3[] = {
  NSPAIR(_ZN8S19572C3C1Ev),
  NSPAIR(_ZN8S19572C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
static Base_Class bases_S19572C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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, 1},
  {&cd_S19572C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19572C3[];
static  VTBL_ENTRY vtc_S19572C3[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
extern VTBL_ENTRY _ZTV8S19572C3[];
static  VTBL_ENTRY _tg__ZTV8S19572C4__8S19572C3[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTT_ENTRY vtt_S19572C3[] = {
  {&(_ZTV8S19572C3[4]),  4,4},
  {&(_ZTV8S19572C3[4]),  4,4},
  {&(_tg__ZTV8S19572C4__8S19572C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
Class_Descriptor cd_S19572C3 = {  "S19572C3", // class name
  bases_S19572C3, 2,
  &(vtc_S19572C3[0]), // expected_vtbl_contents
  &(vtt_S19572C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19572C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19572C3),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19572C3),3, //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  S19572C6  {
  int s19572c6f0;
  virtual void  v1(); // _ZN8S19572C62v1Ev
  ~S19572C6(); // tgen
  S19572C6(); // tgen
};
//SIG(-1 S19572C6) C1{ v1 Fi}


void  S19572C6 ::v1(){vfunc_called(this, "_ZN8S19572C62v1Ev");}
S19572C6 ::~S19572C6(){ note_dtor("S19572C6", this);} // tgen
S19572C6 ::S19572C6(){ note_ctor("S19572C6", this);} // tgen

static void Test_S19572C6()
{
  extern Class_Descriptor cd_S19572C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19572C6, buf);
    S19572C6 *dp, &lv = *(dp=new (buf) S19572C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19572C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C6)");
    check_field_offset(lv, s19572c6f0, ABISELECT(8,4), "S19572C6.s19572c6f0");
    test_class_info(&lv, &cd_S19572C6);
    dp->~S19572C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C6(Test_S19572C6, "S19572C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19572C6C1Ev();
extern void _ZN8S19572C6D1Ev();
Name_Map name_map_S19572C6[] = {
  NSPAIR(_ZN8S19572C6C1Ev),
  NSPAIR(_ZN8S19572C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19572C6[];
extern void _ZN8S19572C62v1Ev();
static  VTBL_ENTRY vtc_S19572C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C6[0]),
  (VTBL_ENTRY)&_ZN8S19572C62v1Ev,
};
extern VTBL_ENTRY _ZTI8S19572C6[];
extern  VTBL_ENTRY _ZTV8S19572C6[];
Class_Descriptor cd_S19572C6 = {  "S19572C6", // class name
  0,0,//no base classes
  &(vtc_S19572C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19572C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19572C6),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  S19572C2  : S19572C3 , virtual S19572C6 {
  void *s19572c2f0;
  ~S19572C2(); // tgen
  S19572C2(); // tgen
};
//SIG(-1 S19572C2) C1{ BC2{ VBC3{ VBC4{ m Fs:13}}} VBC5{ v1 Fi} Fp}


S19572C2 ::~S19572C2(){ note_dtor("S19572C2", this);} // tgen
S19572C2 ::S19572C2(){ note_ctor("S19572C2", this);} // tgen

static void Test_S19572C2()
{
  extern Class_Descriptor cd_S19572C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19572C2, buf);
    S19572C2 *dp, &lv = *(dp=new (buf) S19572C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19572C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C2)");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(16,8), "S19572C2");
    check_base_class_offset(lv, (S19572C4*)(S19572C3*), 0, "S19572C2");
    check_base_class_offset(lv, (S19572C3*), 0, "S19572C2");
    check_base_class_offset(lv, (S19572C6*), ABISELECT(24,12), "S19572C2");
    check_field_offset(lv, s19572c2f0, ABISELECT(8,4), "S19572C2.s19572c2f0");
    test_class_info(&lv, &cd_S19572C2);
    dp->~S19572C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C2(Test_S19572C2, "S19572C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19572C2C1Ev();
extern void _ZN8S19572C2D1Ev();
Name_Map name_map_S19572C2[] = {
  NSPAIR(_ZN8S19572C2C1Ev),
  NSPAIR(_ZN8S19572C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C6;
extern VTBL_ENTRY _ZTI8S19572C6[];
extern  VTBL_ENTRY _ZTV8S19572C6[];
static Base_Class bases_S19572C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 1},
  {&cd_S19572C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19572C3,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19572C6,    ABISELECT(24,12), //bcp->offset
    5, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19572C2[];
extern void _ZN8S19572C62v1Ev();
static  VTBL_ENTRY vtc_S19572C2[] = {
  ABISELECT(24,12),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C2[0]),
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19572C2[0]),
  (VTBL_ENTRY)&_ZN8S19572C62v1Ev,
};
extern VTBL_ENTRY _ZTV8S19572C2[];
static  VTBL_ENTRY _tg__ZTV8S19572C3__8S19572C2[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__8S19572C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTT_ENTRY vtt_S19572C2[] = {
  {&(_ZTV8S19572C2[5]),  5,9},
  {&(_tg__ZTV8S19572C3__8S19572C2[4]),  4,4},
  {&(_tg__ZTV8S19572C3__8S19572C2[4]),  4,4},
  {&(_ZTV8S19572C2[5]),  5,9},
  {&(_ZTV8S19572C2[8]),  8,9},
  {&(_tg__ZTV8S19572C4__8S19572C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19572C2[];
extern  VTBL_ENTRY _ZTV8S19572C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C2[];
Class_Descriptor cd_S19572C2 = {  "S19572C2", // class name
  bases_S19572C2, 4,
  &(vtc_S19572C2[0]), // expected_vtbl_contents
  &(vtt_S19572C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19572C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19572C2),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19572C2),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  S19572C10  : S19572C5 {
};
//SIG(-1 S19572C10) C1{ BC2{ m Fs:13}}



static void Test_S19572C10()
{
  extern Class_Descriptor cd_S19572C10;
  void *lvp;
  {
    short buf[2];
    init_test(&cd_S19572C10, buf);
    S19572C10 &lv = *(new (buf) S19572C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), 2, "sizeof(S19572C10)");
    check2(__alignof__(lv), 2, "__alignof__(S19572C10)");
    check_base_class_offset(lv, (S19572C5*), 0, "S19572C10");
    test_class_info(&lv, &cd_S19572C10);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C10(Test_S19572C10, "S19572C10", 2);

#else // __cplusplus

extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S19572C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19572C10[];
Class_Descriptor cd_S19572C10 = {  "S19572C10", // class name
  bases_S19572C10, 1,
  0, // no vftv
  0, //no vtt
  2, // object size
  NSPAIRA(_ZTI9S19572C10),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  S19572C9  : S19572C10 {
  virtual  ~S19572C9(); // _ZN8S19572C9D1Ev
  S19572C9(); // tgen
};
//SIG(-1 S19572C9) C1{ BC2{ BC3{ m Fs:13}} vd}


 S19572C9 ::~S19572C9(){ note_dtor("S19572C9", this);}
S19572C9 ::S19572C9(){ note_ctor("S19572C9", this);} // tgen

static void Test_S19572C9()
{
  extern Class_Descriptor cd_S19572C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19572C9, buf);
    S19572C9 *dp, &lv = *(dp=new (buf) S19572C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19572C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C9)");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(8,4), "S19572C9");
    check_base_class_offset(lv, (S19572C10*), ABISELECT(8,4), "S19572C9");
    test_class_info(&lv, &cd_S19572C9);
    dp->~S19572C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C9(Test_S19572C9, "S19572C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19572C9C1Ev();
extern void _ZN8S19572C9D1Ev();
Name_Map name_map_S19572C9[] = {
  NSPAIR(_ZN8S19572C9C1Ev),
  NSPAIR(_ZN8S19572C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
static Base_Class bases_S19572C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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_S19572C10,    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 _ZTI8S19572C9[];
extern void _ZN8S19572C9D1Ev();
extern void _ZN8S19572C9D0Ev();
static  VTBL_ENTRY vtc_S19572C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C9[0]),
  (VTBL_ENTRY)&_ZN8S19572C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19572C9D0Ev,
};
extern VTBL_ENTRY _ZTI8S19572C9[];
extern  VTBL_ENTRY _ZTV8S19572C9[];
Class_Descriptor cd_S19572C9 = {  "S19572C9", // class name
  bases_S19572C9, 2,
  &(vtc_S19572C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19572C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19572C9),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  S19572C12  : virtual S19572C10 {
  ~S19572C12(); // tgen
  S19572C12(); // tgen
};
//SIG(-1 S19572C12) C1{ VBC2{ BC3{ m Fs:13}}}


S19572C12 ::~S19572C12(){ note_dtor("S19572C12", this);} // tgen
S19572C12 ::S19572C12(){ note_ctor("S19572C12", this);} // tgen

static void Test_S19572C12()
{
  extern Class_Descriptor cd_S19572C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19572C12, buf);
    S19572C12 *dp, &lv = *(dp=new (buf) S19572C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19572C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C12)");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(8,4), "S19572C12");
    check_base_class_offset(lv, (S19572C10*), ABISELECT(8,4), "S19572C12");
    test_class_info(&lv, &cd_S19572C12);
    dp->~S19572C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C12(Test_S19572C12, "S19572C12", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19572C12C1Ev();
extern void _ZN9S19572C12D1Ev();
Name_Map name_map_S19572C12[] = {
  NSPAIR(_ZN9S19572C12C1Ev),
  NSPAIR(_ZN9S19572C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
static Base_Class bases_S19572C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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_S19572C10,    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 _ZTI9S19572C12[];
static  VTBL_ENTRY vtc_S19572C12[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern VTBL_ENTRY _ZTV9S19572C12[];
static  VTT_ENTRY vtt_S19572C12[] = {
  {&(_ZTV9S19572C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
Class_Descriptor cd_S19572C12 = {  "S19572C12", // class name
  bases_S19572C12, 2,
  &(vtc_S19572C12[0]), // expected_vtbl_contents
  &(vtt_S19572C12[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19572C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19572C12),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C12),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  S19572C13  : S19572C4 , S19572C10 {
  virtual  ~S19572C13(); // _ZN9S19572C13D2Ev
  S19572C13(); // tgen
};
//SIG(-1 S19572C13) C1{ BC2{ VBC3{ m Fs:13}} BC4{ BC3} vd}


 S19572C13 ::~S19572C13(){ note_dtor("S19572C13", this);}
S19572C13 ::S19572C13(){ note_ctor("S19572C13", this);} // tgen

static void Test_S19572C13()
{
  extern Class_Descriptor cd_S19572C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19572C13, buf);
    S19572C13 *dp, &lv = *(dp=new (buf) S19572C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19572C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C13)");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(10,6), "S19572C13");
    check_base_class_offset(lv, (S19572C4*), 0, "S19572C13");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(8,4), "S19572C13");
    check_base_class_offset(lv, (S19572C10*), ABISELECT(8,4), "S19572C13");
    test_class_info(&lv, &cd_S19572C13);
    dp->~S19572C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C13(Test_S19572C13, "S19572C13", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19572C13C1Ev();
extern void _ZN9S19572C13D2Ev();
Name_Map name_map_S19572C13[] = {
  NSPAIR(_ZN9S19572C13C1Ev),
  NSPAIR(_ZN9S19572C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
static Base_Class bases_S19572C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19572C4,    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},
  {&cd_S19572C5,    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_S19572C10,    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 _ZTI9S19572C13[];
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY vtc_S19572C13[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
extern VTBL_ENTRY _ZTV9S19572C13[];
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C13[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTT_ENTRY vtt_S19572C13[] = {
  {&(_ZTV9S19572C13[3]),  3,5},
  {&(_tg__ZTV8S19572C4__9S19572C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
Class_Descriptor cd_S19572C13 = {  "S19572C13", // class name
  bases_S19572C13, 4,
  &(vtc_S19572C13[0]), // expected_vtbl_contents
  &(vtt_S19572C13[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19572C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19572C13),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C13),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  S19572C11  : virtual S19572C5 , virtual S19572C10 , S19572C12 , S19572C13 , S19572C4 {
  long double s19572c11f0[5];
  virtual  ~S19572C11(); // _ZN9S19572C11D2Ev
  S19572C11(); // tgen
};
//SIG(-1 S19572C11) C1{ VBC2{ m Fs:13} VBC3{ BC2} BC4{ VBC3} BC5{ BC6{ VBC2} BC3 vd} BC6 vd FD[5]}


 S19572C11 ::~S19572C11(){ note_dtor("S19572C11", this);}
S19572C11 ::S19572C11(){ note_ctor("S19572C11", this);} // tgen

static void Test_S19572C11()
{
  extern Class_Descriptor cd_S19572C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,21)];
    init_test(&cd_S19572C11, buf);
    S19572C11 *dp, &lv = *(dp=new (buf) S19572C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S19572C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C11)");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(112,76), "S19572C11");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*), ABISELECT(112,76), "S19572C11");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(112,76), "S19572C11");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(114,78), "S19572C11");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*), ABISELECT(114,78), "S19572C11");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*), ABISELECT(114,78), "S19572C11");
    check_base_class_offset(lv, (S19572C12*), 0, "S19572C11");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*), ABISELECT(8,4), "S19572C11");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*), ABISELECT(16,8), "S19572C11");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*), ABISELECT(16,8), "S19572C11");
    check_base_class_offset(lv, (S19572C13*), ABISELECT(8,4), "S19572C11");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*), ABISELECT(24,12), "S19572C11");
    check_field_offset(lv, s19572c11f0, ABISELECT(32,16), "S19572C11.s19572c11f0");
    test_class_info(&lv, &cd_S19572C11);
    dp->~S19572C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C11(Test_S19572C11, "S19572C11", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN9S19572C11C1Ev();
extern void _ZN9S19572C11D2Ev();
Name_Map name_map_S19572C11[] = {
  NSPAIR(_ZN9S19572C11C1Ev),
  NSPAIR(_ZN9S19572C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
static Base_Class bases_S19572C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(112,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19572C5,    ABISELECT(114,78), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C10,    ABISELECT(114,78), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19572C12,    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},
  {&cd_S19572C4,    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
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    7, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19572C4,    ABISELECT(24,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19572C11[];
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY vtc_S19572C11[] = {
  ABISELECT(112,76),
  ABISELECT(114,78),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
  ABISELECT(104,72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
  ABISELECT(88,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
extern VTBL_ENTRY _ZTV9S19572C11[];
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C11[] = {
  ABISELECT(114,78),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C11[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C13__9S19572C11[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C11[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTT_ENTRY vtt_S19572C11[] = {
  {&(_ZTV9S19572C11[4]),  4,14},
  {&(_tg__ZTV9S19572C12__9S19572C11[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C11[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C13__9S19572C11[3]),  3,3},
  {&(_tg__ZTV8S19572C4__A1__9S19572C11[3]),  3,3},
  {&(_ZTV9S19572C11[9]),  9,14},
  {&(_ZTV9S19572C11[14]),  14,14},
};
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
Class_Descriptor cd_S19572C11 = {  "S19572C11", // class name
  bases_S19572C11, 9,
  &(vtc_S19572C11[0]), // expected_vtbl_contents
  &(vtt_S19572C11[0]), // expected_vtt_contents
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI9S19572C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19572C11),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C11),7, //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  S19572C8  : S19572C9 , virtual S19572C3 , S19572C11 {
  int s19572c8f0;
  virtual  ~S19572C8(); // _ZN8S19572C8D2Ev
  S19572C8(); // tgen
};
//SIG(-1 S19572C8) C1{ BC2{ BC3{ BC4{ m Fs:13}} vd} VBC5{ VBC6{ VBC4}} BC7{ VBC4 VBC3 BC8{ VBC3} BC9{ BC6 BC3 vd} BC6 vd FD[5]} vd Fi}


 S19572C8 ::~S19572C8(){ note_dtor("S19572C8", this);}
S19572C8 ::S19572C8(){ note_ctor("S19572C8", this);} // tgen

static void Test_S19572C8()
{
  extern Class_Descriptor cd_S19572C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,25)];
    init_test(&cd_S19572C8, buf);
    S19572C8 *dp, &lv = *(dp=new (buf) S19572C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,96), "sizeof(S19572C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C8)");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C9*), ABISELECT(8,4), "S19572C8");
    check_base_class_offset(lv, (S19572C10*)(S19572C9*), ABISELECT(8,4), "S19572C8");
    check_base_class_offset(lv, (S19572C9*), 0, "S19572C8");
    /*is_ambiguous_... S19572C8::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(144,92), "S19572C8");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*), ABISELECT(144,92), "S19572C8");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(144,92), "S19572C8");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*), ABISELECT(144,92), "S19572C8");
    check_base_class_offset(lv, (S19572C4*)(S19572C3*), ABISELECT(136,88), "S19572C8");
    check_base_class_offset(lv, (S19572C3*), ABISELECT(136,88), "S19572C8");
    /*is_ambiguous_... S19572C8::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(146,94), "S19572C8");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*), ABISELECT(146,94), "S19572C8");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*), ABISELECT(146,94), "S19572C8");
    check_base_class_offset(lv, (S19572C12*)(S19572C11*), ABISELECT(16,8), "S19572C8");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(24,12), "S19572C8");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(32,16), "S19572C8");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(32,16), "S19572C8");
    check_base_class_offset(lv, (S19572C13*)(S19572C11*), ABISELECT(24,12), "S19572C8");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*), ABISELECT(40,20), "S19572C8");
    check_base_class_offset(lv, (S19572C11*), ABISELECT(16,8), "S19572C8");
    check_field_offset(lv, s19572c8f0, ABISELECT(128,84), "S19572C8.s19572c8f0");
    test_class_info(&lv, &cd_S19572C8);
    dp->~S19572C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C8(Test_S19572C8, "S19572C8", ABISELECT(160,96));

#else // __cplusplus

extern void _ZN8S19572C8C1Ev();
extern void _ZN8S19572C8D2Ev();
Name_Map name_map_S19572C8[] = {
  NSPAIR(_ZN8S19572C8C1Ev),
  NSPAIR(_ZN8S19572C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C9;
extern VTBL_ENTRY _ZTI8S19572C9[];
extern  VTBL_ENTRY _ZTV8S19572C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
static Base_Class bases_S19572C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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_S19572C10,    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_S19572C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19572C5,    ABISELECT(144,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
    4, //immediately_derived
  0, 1},
  {&cd_S19572C4,    ABISELECT(136,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19572C3,    ABISELECT(136,88), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(146,94), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C10,    ABISELECT(146,94), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19572C12,    ABISELECT(16,8), //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
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(24,12), //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
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    11, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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_S19572C13,    ABISELECT(24,12), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(40,20), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19572C8[];
extern void _ZN8S19572C8D1Ev();
extern void _ZN8S19572C8D0Ev();
extern void ABISELECT(_ZThn16_N8S19572C8D1Ev,_ZThn8_N8S19572C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19572C8D0Ev,_ZThn8_N8S19572C8D0Ev)();
extern void ABISELECT(_ZThn24_N8S19572C8D1Ev,_ZThn12_N8S19572C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S19572C8D0Ev,_ZThn12_N8S19572C8D0Ev)();
static  VTBL_ENTRY vtc_S19572C8[] = {
  ABISELECT(146,94),
  ABISELECT(144,92),
  ABISELECT(136,88),
  ABISELECT(136,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&_ZN8S19572C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19572C8D0Ev,
  ABISELECT(128,84),
  ABISELECT(130,86),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19572C8D1Ev,_ZThn8_N8S19572C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19572C8D0Ev,_ZThn8_N8S19572C8D0Ev),
  ABISELECT(120,80),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19572C8D1Ev,_ZThn12_N8S19572C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19572C8D0Ev,_ZThn12_N8S19572C8D0Ev),
  ABISELECT(104,72),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  0,
  ABISELECT(8,4),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
};
extern VTBL_ENTRY _ZTV8S19572C8[];
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C11__8S19572C8[] = {
  ABISELECT(128,84),
  ABISELECT(130,86),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C11__8S19572C8[] = {
  ABISELECT(130,86),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__8S19572C8[] = {
  ABISELECT(120,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C11__A1__8S19572C8[] = {
  ABISELECT(120,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A2__8S19572C8[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C11__8S19572C8[] = {
  ABISELECT(120,80),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C11__8S19572C8[] = {
  ABISELECT(104,72),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__8S19572C8[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__8S19572C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTT_ENTRY vtt_S19572C8[] = {
  {&(_ZTV8S19572C8[6]),  6,26},
  {&(_tg__ZTV9S19572C11__8S19572C8[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C11__8S19572C8[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C11__8S19572C8[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C11__A1__8S19572C8[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C11__A2__8S19572C8[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C11__8S19572C8[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C11__8S19572C8[3]),  3,3},
  {&(_ZTV8S19572C8[26]),  26,26},
  {&(_ZTV8S19572C8[26]),  26,26},
  {&(_ZTV8S19572C8[12]),  12,26},
  {&(_ZTV8S19572C8[17]),  17,26},
  {&(_ZTV8S19572C8[22]),  22,26},
  {&(_tg__ZTV8S19572C3__8S19572C8[4]),  4,4},
  {&(_tg__ZTV8S19572C3__8S19572C8[4]),  4,4},
  {&(_tg__ZTV8S19572C4__8S19572C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19572C8[];
extern  VTBL_ENTRY _ZTV8S19572C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C8[];
Class_Descriptor cd_S19572C8 = {  "S19572C8", // class name
  bases_S19572C8, 15,
  &(vtc_S19572C8[0]), // expected_vtbl_contents
  &(vtt_S19572C8[0]), // expected_vtt_contents
  ABISELECT(160,96), // object size
  NSPAIRA(_ZTI8S19572C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19572C8),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19572C8),16, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19572C7  : virtual S19572C8 {
  void *s19572c7f0;
  virtual void  v2(); // _ZN8S19572C72v2Ev
  ~S19572C7(); // tgen
  S19572C7(); // tgen
};
//SIG(-1 S19572C7) C1{ VBC2{ BC3{ BC4{ BC5{ m Fs:13}} vd} VBC6{ VBC7{ VBC5}} BC8{ VBC5 VBC4 BC9{ VBC4} BC10{ BC7 BC4 vd} BC7 vd FD[5]} vd Fi} v1 Fp}


void  S19572C7 ::v2(){vfunc_called(this, "_ZN8S19572C72v2Ev");}
S19572C7 ::~S19572C7(){ note_dtor("S19572C7", this);} // tgen
S19572C7 ::S19572C7(){ note_ctor("S19572C7", this);} // tgen

static void Test_S19572C7()
{
  extern Class_Descriptor cd_S19572C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,26)];
    init_test(&cd_S19572C7, buf);
    S19572C7 *dp, &lv = *(dp=new (buf) S19572C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,100), "sizeof(S19572C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C7)");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C9*)(S19572C8*), ABISELECT(24,12), "S19572C7");
    check_base_class_offset(lv, (S19572C10*)(S19572C9*)(S19572C8*), ABISELECT(24,12), "S19572C7");
    check_base_class_offset(lv, (S19572C9*)(S19572C8*), ABISELECT(16,8), "S19572C7");
    /*is_ambiguous_... S19572C7::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(148,96), "S19572C7");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*)(S19572C8*), ABISELECT(148,96), "S19572C7");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(148,96), "S19572C7");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*)(S19572C8*), ABISELECT(148,96), "S19572C7");
    check_base_class_offset(lv, (S19572C4*)(S19572C3*), 0, "S19572C7");
    check_base_class_offset(lv, (S19572C3*)(S19572C8*), 0, "S19572C7");
    /*is_ambiguous_... S19572C7::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(150,98), "S19572C7");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*)(S19572C8*), ABISELECT(150,98), "S19572C7");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*)(S19572C8*), ABISELECT(150,98), "S19572C7");
    check_base_class_offset(lv, (S19572C12*)(S19572C11*)(S19572C8*), ABISELECT(32,16), "S19572C7");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(40,20), "S19572C7");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(48,24), "S19572C7");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(48,24), "S19572C7");
    check_base_class_offset(lv, (S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(40,20), "S19572C7");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*)(S19572C8*), ABISELECT(56,28), "S19572C7");
    check_base_class_offset(lv, (S19572C11*)(S19572C8*), ABISELECT(32,16), "S19572C7");
    check_base_class_offset(lv, (S19572C8*), ABISELECT(16,8), "S19572C7");
    check_field_offset(lv, s19572c7f0, ABISELECT(8,4), "S19572C7.s19572c7f0");
    test_class_info(&lv, &cd_S19572C7);
    dp->~S19572C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C7(Test_S19572C7, "S19572C7", ABISELECT(160,100));

#else // __cplusplus

extern void _ZN8S19572C7C1Ev();
extern void _ZN8S19572C7D1Ev();
Name_Map name_map_S19572C7[] = {
  NSPAIR(_ZN8S19572C7C1Ev),
  NSPAIR(_ZN8S19572C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C9;
extern VTBL_ENTRY _ZTI8S19572C9[];
extern  VTBL_ENTRY _ZTV8S19572C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
extern Class_Descriptor cd_S19572C8;
extern VTBL_ENTRY _ZTI8S19572C8[];
extern  VTBL_ENTRY _ZTV8S19572C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C8[];
static Base_Class bases_S19572C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
  0, 0},
  {&cd_S19572C10,    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
    2, //immediately_derived
  0, 0},
  {&cd_S19572C9,    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
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(148,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
    4, //immediately_derived
  0, 1},
  {&cd_S19572C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19572C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(150,98), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C10,    ABISELECT(150,98), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19572C12,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(40,20), //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
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    11, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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_S19572C13,    ABISELECT(40,20), //bcp->offset
    25, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(56,28), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(32,16), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19572C8,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19572C7[];
extern void _ZN8S19572C72v2Ev();
extern void _ZN8S19572C7D1Ev();
extern void _ZN8S19572C7D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S19572C7D1Ev,_ZTv0_n28_N8S19572C7D1Ev)();
extern void ABISELECT(_ZThn16_N8S19572C7D1Ev,_ZThn8_N8S19572C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19572C7D0Ev,_ZTv0_n28_N8S19572C7D0Ev)();
extern void ABISELECT(_ZThn16_N8S19572C7D0Ev,_ZThn8_N8S19572C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n56_N8S19572C7D1Ev,_ZTvn8_n28_N8S19572C7D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S19572C7D0Ev,_ZTvn8_n28_N8S19572C7D0Ev)();
extern void ABISELECT(_ZTvn24_n56_N8S19572C7D1Ev,_ZTvn12_n28_N8S19572C7D1Ev)();
extern void ABISELECT(_ZTvn24_n56_N8S19572C7D0Ev,_ZTvn12_n28_N8S19572C7D0Ev)();
static  VTBL_ENTRY vtc_S19572C7[] = {
  ABISELECT(150,98),
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(148,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
  (VTBL_ENTRY)&_ZN8S19572C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19572C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19572C7D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(134,90),
  ABISELECT(132,88),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19572C7D1Ev,_ZTv0_n28_N8S19572C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19572C7D0Ev,_ZTv0_n28_N8S19572C7D0Ev),
  ABISELECT(116,80),
  ABISELECT(118,82),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19572C7D1Ev,_ZTvn8_n28_N8S19572C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19572C7D0Ev,_ZTvn8_n28_N8S19572C7D0Ev),
  ABISELECT(108,76),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n56_N8S19572C7D1Ev,_ZTvn12_n28_N8S19572C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n56_N8S19572C7D0Ev,_ZTvn12_n28_N8S19572C7D0Ev),
  ABISELECT(92,68),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
};
extern VTBL_ENTRY _ZTV8S19572C7[];
extern void _ZN8S19572C8D1Ev();
extern void _ZN8S19572C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19572C8__8S19572C7[] = {
  ABISELECT(134,90),
  ABISELECT(132,88),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&_ZN8S19572C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19572C8D0Ev,
};
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C118S19572C8__8S19572C7[] = {
  ABISELECT(116,80),
  ABISELECT(118,82),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C118S19572C8__8S19572C7[] = {
  ABISELECT(118,82),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C118S19572C8__8S19572C7[] = {
  ABISELECT(108,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C118S19572C8__A1__8S19572C7[] = {
  ABISELECT(108,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C118S19572C8__A2__8S19572C7[] = {
  ABISELECT(92,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C118S19572C8__8S19572C7[] = {
  ABISELECT(108,76),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C118S19572C8__8S19572C7[] = {
  ABISELECT(92,68),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__8S19572C8__8S19572C7[] = {
  0,
  ABISELECT(148,96),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
};
extern void ABISELECT(_ZThn16_N8S19572C8D1Ev,_ZThn8_N8S19572C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19572C8D0Ev,_ZThn8_N8S19572C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C11__8S19572C8__8S19572C7[] = {
  ABISELECT(116,80),
  ABISELECT(118,82),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19572C8D1Ev,_ZThn8_N8S19572C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19572C8D0Ev,_ZThn8_N8S19572C8D0Ev),
};
extern void ABISELECT(_ZThn24_N8S19572C8D1Ev,_ZThn12_N8S19572C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S19572C8D0Ev,_ZThn12_N8S19572C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__8S19572C8__8S19572C7[] = {
  ABISELECT(108,76),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19572C8D1Ev,_ZThn12_N8S19572C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19572C8D0Ev,_ZThn12_N8S19572C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A2__8S19572C8__8S19572C7[] = {
  ABISELECT(92,68),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__8S19572C7[] = {
  0,
  ABISELECT(148,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__8S19572C7[] = {
  ABISELECT(148,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTT_ENTRY vtt_S19572C7[] = {
  {&(_ZTV8S19572C7[7]),  7,33},
  {&(_ZTV8S19572C7[17]),  17,33},
  {&(_ZTV8S19572C7[7]),  7,33},
  {&(_ZTV8S19572C7[7]),  7,33},
  {&(_ZTV8S19572C7[23]),  23,33},
  {&(_ZTV8S19572C7[28]),  28,33},
  {&(_ZTV8S19572C7[33]),  33,33},
  {&(_tg__ZTV8S19572C8__8S19572C7[6]),  6,8},
  {&(_tg__ZTV9S19572C118S19572C8__8S19572C7[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C118S19572C8__8S19572C7[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C118S19572C8__8S19572C7[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C118S19572C8__A1__8S19572C7[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C118S19572C8__A2__8S19572C7[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C118S19572C8__8S19572C7[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C118S19572C8__8S19572C7[3]),  3,3},
  {&(_tg__ZTV8S19572C3__8S19572C8__8S19572C7[4]),  4,4},
  {&(_tg__ZTV8S19572C3__8S19572C8__8S19572C7[4]),  4,4},
  {&(_tg__ZTV9S19572C11__8S19572C8__8S19572C7[4]),  4,6},
  {&(_tg__ZTV9S19572C139S19572C11__8S19572C8__8S19572C7[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A2__8S19572C8__8S19572C7[3]),  3,3},
  {&(_tg__ZTV8S19572C3__8S19572C7[4]),  4,4},
  {&(_tg__ZTV8S19572C3__8S19572C7[4]),  4,4},
  {&(_tg__ZTV8S19572C4__8S19572C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19572C7[];
extern  VTBL_ENTRY _ZTV8S19572C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C7[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19572C7D0Ev,_ZTv0_n28_N8S19572C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19572C7D0Ev,_ZThn8_N8S19572C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19572C7D1Ev,_ZTv0_n28_N8S19572C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19572C7D1Ev,_ZThn8_N8S19572C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19572C7 = {  "S19572C7", // class name
  bases_S19572C7, 16,
  &(vtc_S19572C7[0]), // expected_vtbl_contents
  &(vtt_S19572C7[0]), // expected_vtt_contents
  ABISELECT(160,100), // object size
  NSPAIRA(_ZTI8S19572C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19572C7),33, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19572C7),23, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19572C20  : virtual S19572C5 {
  ~S19572C20(); // tgen
  S19572C20(); // tgen
};
//SIG(-1 S19572C20) C1{ VBC2{ m Fs:13}}


S19572C20 ::~S19572C20(){ note_dtor("S19572C20", this);} // tgen
S19572C20 ::S19572C20(){ note_ctor("S19572C20", this);} // tgen

static void Test_S19572C20()
{
  extern Class_Descriptor cd_S19572C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19572C20, buf);
    S19572C20 *dp, &lv = *(dp=new (buf) S19572C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19572C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C20)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S19572C20");
    test_class_info(&lv, &cd_S19572C20);
    dp->~S19572C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C20(Test_S19572C20, "S19572C20", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19572C20C1Ev();
extern void _ZN9S19572C20D1Ev();
Name_Map name_map_S19572C20[] = {
  NSPAIR(_ZN9S19572C20C1Ev),
  NSPAIR(_ZN9S19572C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S19572C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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 _ZTI9S19572C20[];
static  VTBL_ENTRY vtc_S19572C20[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C20[0]),
};
extern VTBL_ENTRY _ZTV9S19572C20[];
static  VTT_ENTRY vtt_S19572C20[] = {
  {&(_ZTV9S19572C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C20[];
extern  VTBL_ENTRY _ZTV9S19572C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C20[];
Class_Descriptor cd_S19572C20 = {  "S19572C20", // class name
  bases_S19572C20, 1,
  &(vtc_S19572C20[0]), // expected_vtbl_contents
  &(vtt_S19572C20[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19572C20),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19572C20),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C20),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  S19572C19  : virtual S19572C20 , virtual S19572C4 , S19572C5 , virtual S19572C10 {
  int s19572c19f0;
  virtual  ~S19572C19(); // _ZN9S19572C19D2Ev
  S19572C19(); // tgen
};
//SIG(-1 S19572C19) C1{ VBC2{ VBC3{ m Fs:13}} VBC4{ VBC3} BC3 VBC5{ BC3} vd Fi}


 S19572C19 ::~S19572C19(){ note_dtor("S19572C19", this);}
S19572C19 ::S19572C19(){ note_ctor("S19572C19", this);} // tgen

static void Test_S19572C19()
{
  extern Class_Descriptor cd_S19572C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S19572C19, buf);
    S19572C19 *dp, &lv = *(dp=new (buf) S19572C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S19572C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C19)");
    check_base_class_offset(lv, (S19572C5*)(S19572C20*), ABISELECT(16,12), "S19572C19");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(16,12), "S19572C19");
    check_base_class_offset(lv, (S19572C20*), 0, "S19572C19");
    check_base_class_offset(lv, (S19572C4*), ABISELECT(24,16), "S19572C19");
    /*is_ambiguous_... S19572C19::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S19572C19");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(32,20), "S19572C19");
    check_base_class_offset(lv, (S19572C10*), ABISELECT(32,20), "S19572C19");
    check_field_offset(lv, s19572c19f0, ABISELECT(12,8), "S19572C19.s19572c19f0");
    test_class_info(&lv, &cd_S19572C19);
    dp->~S19572C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C19(Test_S19572C19, "S19572C19", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN9S19572C19C1Ev();
extern void _ZN9S19572C19D2Ev();
Name_Map name_map_S19572C19[] = {
  NSPAIR(_ZN9S19572C19C1Ev),
  NSPAIR(_ZN9S19572C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C20;
extern VTBL_ENTRY _ZTI9S19572C20[];
extern  VTBL_ENTRY _ZTV9S19572C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C20[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
static Base_Class bases_S19572C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(16,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
  0, 1},
  {&cd_S19572C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C4,    ABISELECT(24,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    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_S19572C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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 _ZTI9S19572C19[];
extern void _ZN9S19572C19D1Ev();
extern void _ZN9S19572C19D0Ev();
static  VTBL_ENTRY vtc_S19572C19[] = {
  ABISELECT(32,20),
  ABISELECT(24,16),
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C19[0]),
  (VTBL_ENTRY)&_ZN9S19572C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C19D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19572C19[0]),
};
extern VTBL_ENTRY _ZTV9S19572C19[];
static  VTBL_ENTRY _tg__ZTV9S19572C20__9S19572C19[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C20[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C19[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTT_ENTRY vtt_S19572C19[] = {
  {&(_ZTV9S19572C19[6]),  6,11},
  {&(_ZTV9S19572C19[6]),  6,11},
  {&(_ZTV9S19572C19[11]),  11,11},
  {&(_tg__ZTV9S19572C20__9S19572C19[3]),  3,3},
  {&(_tg__ZTV8S19572C4__9S19572C19[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C19[];
extern  VTBL_ENTRY _ZTV9S19572C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C19[];
Class_Descriptor cd_S19572C19 = {  "S19572C19", // class name
  bases_S19572C19, 6,
  &(vtc_S19572C19[0]), // expected_vtbl_contents
  &(vtt_S19572C19[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI9S19572C19),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19572C19),11, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C19),5, //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  S19572C18  : virtual S19572C10 , virtual S19572C12 , virtual S19572C11 , S19572C4 {
  ::S19572C19 s19572c18f0;
  virtual void  v3(); // _ZN9S19572C182v3Ev
  ~S19572C18(); // tgen
  S19572C18(); // tgen
};
//SIG(-1 S19572C18) C1{ VBC2{ BC3{ m Fs:13}} VBC4{ VBC2} VBC5{ VBC3 VBC2 BC4 BC6{ BC7{ VBC3} BC2 vd} BC7 vd FD[5]} BC7 v1 FC8{ VBC9{ VBC3} VBC7 BC3 VBC2 vd Fi}}


void  S19572C18 ::v3(){vfunc_called(this, "_ZN9S19572C182v3Ev");}
S19572C18 ::~S19572C18(){ note_dtor("S19572C18", this);} // tgen
S19572C18 ::S19572C18(){ note_ctor("S19572C18", this);} // tgen

static void Test_S19572C18()
{
  extern Class_Descriptor cd_S19572C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,30)];
    init_test(&cd_S19572C18, buf);
    S19572C18 *dp, &lv = *(dp=new (buf) S19572C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,116), "sizeof(S19572C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C18)");
    /*is_ambiguous_... S19572C18::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(48,28), "S19572C18");
    /*is_ambiguous_... S19572C18::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*), ABISELECT(48,28), "S19572C18");
    /*is_ambiguous_... S19572C18::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C12*), ABISELECT(48,28), "S19572C18");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*), ABISELECT(48,28), "S19572C18");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*), ABISELECT(48,28), "S19572C18");
    /*is_ambiguous_... S19572C18::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*), ABISELECT(56,32), "S19572C18");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*), ABISELECT(176,112), "S19572C18");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(176,112), "S19572C18");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*), ABISELECT(176,112), "S19572C18");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(176,112), "S19572C18");
    check_base_class_offset(lv, (S19572C12*)(S19572C11*), ABISELECT(64,36), "S19572C18");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(72,40), "S19572C18");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(80,44), "S19572C18");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(80,44), "S19572C18");
    check_base_class_offset(lv, (S19572C13*)(S19572C11*), ABISELECT(72,40), "S19572C18");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*), ABISELECT(88,48), "S19572C18");
    check_base_class_offset(lv, (S19572C11*), ABISELECT(64,36), "S19572C18");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*), 0, "S19572C18");
    check_field_offset(lv, s19572c18f0, ABISELECT(8,4), "S19572C18.s19572c18f0");
    test_class_info(&lv, &cd_S19572C18);
    dp->~S19572C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C18(Test_S19572C18, "S19572C18", ABISELECT(192,116));

#else // __cplusplus

extern void _ZN9S19572C18C1Ev();
extern void _ZN9S19572C18D1Ev();
Name_Map name_map_S19572C18[] = {
  NSPAIR(_ZN9S19572C18C1Ev),
  NSPAIR(_ZN9S19572C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
static Base_Class bases_S19572C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    1, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C12,    ABISELECT(56,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(176,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
    5, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(72,40), //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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    7, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    8, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(72,40), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(88,48), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(64,36), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C4,    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 _ZTI9S19572C18[];
extern void _ZN9S19572C182v3Ev();
extern void _ZN9S19572C18D1Ev();
extern void _ZN9S19572C18D0Ev();
extern void ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZThn64_N9S19572C18D1Ev,_ZThn36_N9S19572C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev)();
extern void ABISELECT(_ZThn64_N9S19572C18D0Ev,_ZThn36_N9S19572C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev)();
static  VTBL_ENTRY vtc_S19572C18[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  ABISELECT(-64,-36),
  ABISELECT(112,76),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev),
  ABISELECT(104,72),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev),
  ABISELECT(88,64),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern VTBL_ENTRY _ZTV9S19572C18[];
static  VTBL_ENTRY _tg__ZTV8S19572C4__A2__9S19572C18[] = {
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C18[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C18[] = {
  ABISELECT(112,76),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C11__A1__9S19572C18[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C18[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C11__9S19572C18[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A1__9S19572C18[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C11__9S19572C18[] = {
  ABISELECT(104,72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C11__9S19572C18[] = {
  ABISELECT(88,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTT_ENTRY vtt_S19572C18[] = {
  {&(_ZTV9S19572C18[6]),  6,27},
  {&(_tg__ZTV8S19572C4__A2__9S19572C18[3]),  3,3},
  {&(_ZTV9S19572C18[12]),  12,27},
  {&(_ZTV9S19572C18[17]),  17,27},
  {&(_ZTV9S19572C18[22]),  22,27},
  {&(_ZTV9S19572C18[27]),  27,27},
  {&(_tg__ZTV9S19572C12__9S19572C18[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C18[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C11__A1__9S19572C18[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C18[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C11__9S19572C18[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C11__A1__9S19572C18[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C11__9S19572C18[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C11__9S19572C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C18[];
extern  VTBL_ENTRY _ZTV9S19572C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C18[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C18D0Ev,_ZThn36_N9S19572C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C18D1Ev,_ZThn36_N9S19572C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19572C18 = {  "S19572C18", // class name
  bases_S19572C18, 12,
  &(vtc_S19572C18[0]), // expected_vtbl_contents
  &(vtt_S19572C18[0]), // expected_vtt_contents
  ABISELECT(192,116), // object size
  NSPAIRA(_ZTI9S19572C18),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19572C18),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C18),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19572C17  : virtual S19572C5 , virtual S19572C3 , virtual S19572C18 {
  int s19572c17f0;
  virtual  ~S19572C17(); // _ZN9S19572C17D2Ev
  S19572C17(); // tgen
};
//SIG(-1 S19572C17) C1{ VBC2{ m Fs:13} VBC3{ VBC4{ VBC2}} VBC5{ VBC6{ BC2} VBC7{ VBC6} VBC8{ VBC2 VBC6 BC7 BC9{ BC4 BC6 vd} BC4 vd FD[5]} BC4 v1 FC10{ VBC11{ VBC2} VBC4 BC2 VBC6 vd Fi}} vd Fi}


 S19572C17 ::~S19572C17(){ note_dtor("S19572C17", this);}
S19572C17 ::S19572C17(){ note_ctor("S19572C17", this);} // tgen

static void Test_S19572C17()
{
  extern Class_Descriptor cd_S19572C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,32)];
    init_test(&cd_S19572C17, buf);
    S19572C17 *dp, &lv = *(dp=new (buf) S19572C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S19572C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C17)");
    /*is_ambiguous_... S19572C17::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(12,8), "S19572C17");
    /*is_ambiguous_... S19572C17::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(12,8), "S19572C17");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*), ABISELECT(12,8), "S19572C17");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(12,8), "S19572C17");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*), ABISELECT(12,8), "S19572C17");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C18*), ABISELECT(12,8), "S19572C17");
    check_base_class_offset(lv, (S19572C4*)(S19572C3*), 0, "S19572C17");
    check_base_class_offset(lv, (S19572C3*), 0, "S19572C17");
    /*is_ambiguous_... S19572C17::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(64,40), "S19572C17");
    /*is_ambiguous_... S19572C18::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C18*), ABISELECT(64,40), "S19572C17");
    /*is_ambiguous_... S19572C17::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C12*), ABISELECT(64,40), "S19572C17");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*), ABISELECT(64,40), "S19572C17");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*), ABISELECT(64,40), "S19572C17");
    /*is_ambiguous_... S19572C18::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C18*), ABISELECT(72,44), "S19572C17");
    check_base_class_offset(lv, (S19572C12*)(S19572C11*), ABISELECT(80,48), "S19572C17");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(88,52), "S19572C17");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(96,56), "S19572C17");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(96,56), "S19572C17");
    check_base_class_offset(lv, (S19572C13*)(S19572C11*), ABISELECT(88,52), "S19572C17");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*), ABISELECT(104,60), "S19572C17");
    check_base_class_offset(lv, (S19572C11*)(S19572C18*), ABISELECT(80,48), "S19572C17");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C18*), ABISELECT(16,12), "S19572C17");
    check_base_class_offset(lv, (S19572C18*), ABISELECT(16,12), "S19572C17");
    check_field_offset(lv, s19572c17f0, ABISELECT(8,4), "S19572C17.s19572c17f0");
    test_class_info(&lv, &cd_S19572C17);
    dp->~S19572C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C17(Test_S19572C17, "S19572C17", ABISELECT(192,124));

#else // __cplusplus

extern void _ZN9S19572C17C1Ev();
extern void _ZN9S19572C17D2Ev();
Name_Map name_map_S19572C17[] = {
  NSPAIR(_ZN9S19572C17C1Ev),
  NSPAIR(_ZN9S19572C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C18;
extern VTBL_ENTRY _ZTI9S19572C18[];
extern  VTBL_ENTRY _ZTV9S19572C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C18[];
static Base_Class bases_S19572C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19572C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(72,44), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(80,48), //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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(88,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(96,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_S19572C10,    ABISELECT(96,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
    10, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(88,52), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(104,60), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(80,48), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19572C4,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C18,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19572C17[];
extern void _ZN9S19572C17D1Ev();
extern void _ZN9S19572C17D0Ev();
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S19572C17D1Ev,_ZThn12_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn16_N9S19572C17D0Ev,_ZThn12_N9S19572C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn80_N9S19572C17D1Ev,_ZThn48_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn80_N9S19572C17D0Ev,_ZThn48_N9S19572C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev)();
static  VTBL_ENTRY vtc_S19572C17[] = {
  ABISELECT(80,48),
  ABISELECT(72,44),
  ABISELECT(64,40),
  ABISELECT(16,12),
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C17D0Ev,
  ABISELECT(-16,-12),
  0,
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  -4,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  ABISELECT(-80,-48),
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev),
  ABISELECT(-76,-44),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev),
  ABISELECT(-92,-52),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
extern VTBL_ENTRY _ZTV9S19572C17[];
static  VTBL_ENTRY _tg__ZTV8S19572C3__9S19572C17[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C17[] = {
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void _ZN9S19572C18D1Ev();
extern void _ZN9S19572C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C17[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C18__A3__9S19572C17[] = {
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C18__9S19572C17[] = {
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZThn64_N9S19572C18D1Ev,_ZThn36_N9S19572C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev)();
extern void ABISELECT(_ZThn64_N9S19572C18D0Ev,_ZThn36_N9S19572C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C18__9S19572C17[] = {
  ABISELECT(-64,-36),
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C18__9S19572C17[] = {
  ABISELECT(-76,-44),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A1__9S19572C18__9S19572C17[] = {
  ABISELECT(-92,-52),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C17[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C17[] = {
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C11__A1__9S19572C17[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C17[] = {
  ABISELECT(-76,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C11__A1__9S19572C17[] = {
  ABISELECT(-76,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A2__9S19572C17[] = {
  ABISELECT(-92,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C11__9S19572C17[] = {
  ABISELECT(-76,-44),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C11__9S19572C17[] = {
  ABISELECT(-92,-52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTT_ENTRY vtt_S19572C17[] = {
  {&(_ZTV9S19572C17[9]),  9,40},
  {&(_ZTV9S19572C17[9]),  9,40},
  {&(_ZTV9S19572C17[9]),  9,40},
  {&(_ZTV9S19572C17[19]),  19,40},
  {&(_ZTV9S19572C17[25]),  25,40},
  {&(_ZTV9S19572C17[30]),  30,40},
  {&(_ZTV9S19572C17[35]),  35,40},
  {&(_ZTV9S19572C17[40]),  40,40},
  {&(_tg__ZTV8S19572C3__9S19572C17[4]),  4,4},
  {&(_tg__ZTV8S19572C3__9S19572C17[4]),  4,4},
  {&(_tg__ZTV8S19572C4__9S19572C17[3]),  3,3},
  {&(_tg__ZTV9S19572C18__9S19572C17[6]),  6,9},
  {&(_tg__ZTV8S19572C49S19572C18__A3__9S19572C17[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C18__9S19572C17[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C18__9S19572C17[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C18__9S19572C17[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A1__9S19572C18__9S19572C17[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C17[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C17[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C11__A1__9S19572C17[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C17[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C11__A1__9S19572C17[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C11__A2__9S19572C17[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C11__9S19572C17[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C11__9S19572C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C17[];
extern  VTBL_ENTRY _ZTV9S19572C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C17[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C18D0Ev,_ZThn36_N9S19572C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C18D1Ev,_ZThn36_N9S19572C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19572C17D0Ev,_ZThn48_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S19572C17D1Ev,_ZThn48_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19572C17D0Ev,_ZThn12_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19572C17D1Ev,_ZThn12_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19572C17 = {  "S19572C17", // class name
  bases_S19572C17, 15,
  &(vtc_S19572C17[0]), // expected_vtbl_contents
  &(vtt_S19572C17[0]), // expected_vtt_contents
  ABISELECT(192,124), // object size
  NSPAIRA(_ZTI9S19572C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19572C17),40, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C17),25, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19572C21  : virtual S19572C5 , virtual S19572C4 {
  ~S19572C21(); // tgen
  S19572C21(); // tgen
};
//SIG(-1 S19572C21) C1{ VBC2{ m Fs:13} VBC3{ VBC2}}


S19572C21 ::~S19572C21(){ note_dtor("S19572C21", this);} // tgen
S19572C21 ::S19572C21(){ note_ctor("S19572C21", this);} // tgen

static void Test_S19572C21()
{
  extern Class_Descriptor cd_S19572C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19572C21, buf);
    S19572C21 *dp, &lv = *(dp=new (buf) S19572C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19572C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19572C21)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S19572C21");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(8,4), "S19572C21");
    check_base_class_offset(lv, (S19572C4*), 0, "S19572C21");
    test_class_info(&lv, &cd_S19572C21);
    dp->~S19572C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C21(Test_S19572C21, "S19572C21", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19572C21C1Ev();
extern void _ZN9S19572C21D1Ev();
Name_Map name_map_S19572C21[] = {
  NSPAIR(_ZN9S19572C21C1Ev),
  NSPAIR(_ZN9S19572C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
static Base_Class bases_S19572C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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},
  {&cd_S19572C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19572C21[];
static  VTBL_ENTRY vtc_S19572C21[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
extern VTBL_ENTRY _ZTV9S19572C21[];
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C21[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTT_ENTRY vtt_S19572C21[] = {
  {&(_ZTV9S19572C21[4]),  4,4},
  {&(_ZTV9S19572C21[4]),  4,4},
  {&(_tg__ZTV8S19572C4__9S19572C21[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C21[];
extern  VTBL_ENTRY _ZTV9S19572C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C21[];
Class_Descriptor cd_S19572C21 = {  "S19572C21", // class name
  bases_S19572C21, 2,
  &(vtc_S19572C21[0]), // expected_vtbl_contents
  &(vtt_S19572C21[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19572C21),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19572C21),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C21),3, //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  S19572C16  : virtual S19572C13 , virtual S19572C12 , S19572C17 , S19572C21 , virtual S629C14 {
  ~S19572C16(); // tgen
  S19572C16(); // tgen
};
//SIG(-1 S19572C16) C1{ VBC2{ BC3{ VBC4{ m Fs:13}} BC5{ BC4} vd} VBC6{ VBC5} BC7{ VBC4 VBC8{ VBC3} VBC9{ VBC5 VBC6 VBC10{ VBC4 VBC5 BC6 BC2 BC3 vd FD[5]} BC3 v1 FC11{ VBC12{ VBC4} VBC3 BC4 VBC5 vd Fi}} vd Fi} BC13{ VBC4 VBC3} VBC14{ m}}


S19572C16 ::~S19572C16(){ note_dtor("S19572C16", this);} // tgen
S19572C16 ::S19572C16(){ note_ctor("S19572C16", this);} // tgen

static void Test_S19572C16()
{
  extern Class_Descriptor cd_S19572C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,34)];
    init_test(&cd_S19572C16, buf);
    S19572C16 *dp, &lv = *(dp=new (buf) S19572C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,132), "sizeof(S19572C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C16)");
    /*is_ambiguous_... S19572C16::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*), ABISELECT(34,18), "S19572C16");
    /*is_ambiguous_... S19572C17::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C17*), ABISELECT(34,18), "S19572C16");
    /*is_ambiguous_... S19572C16::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(34,18), "S19572C16");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*), ABISELECT(34,18), "S19572C16");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(34,18), "S19572C16");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*), ABISELECT(34,18), "S19572C16");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C18*), ABISELECT(34,18), "S19572C16");
    check_base_class_offset(lv, (S19572C5*)(S19572C21*), ABISELECT(34,18), "S19572C16");
    /*is_ambiguous_... S19572C16::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C13*), ABISELECT(24,12), "S19572C16");
    /*is_ambiguous_... S19572C16::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*), ABISELECT(32,16), "S19572C16");
    /*is_ambiguous_... S19572C16::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C13*), ABISELECT(32,16), "S19572C16");
    /*is_ambiguous_... S19572C16::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C13*), ABISELECT(24,12), "S19572C16");
    /*is_ambiguous_... S19572C16::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(48,24), "S19572C16");
    /*is_ambiguous_... S19572C16::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C12*), ABISELECT(48,24), "S19572C16");
    /*is_ambiguous_... S19572C18::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C18*), ABISELECT(48,24), "S19572C16");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*), ABISELECT(48,24), "S19572C16");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*), ABISELECT(48,24), "S19572C16");
    /*is_ambiguous_... S19572C16::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*), ABISELECT(40,20), "S19572C16");
    /*is_ambiguous_... S19572C18::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C18*), ABISELECT(40,20), "S19572C16");
    check_base_class_offset(lv, (S19572C4*)(S19572C3*), 0, "S19572C16");
    check_base_class_offset(lv, (S19572C4*)(S19572C21*), 0, "S19572C16");
    check_base_class_offset(lv, (S19572C3*)(S19572C17*), 0, "S19572C16");
    check_base_class_offset(lv, (S19572C12*)(S19572C11*), ABISELECT(112,56), "S19572C16");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(120,60), "S19572C16");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(128,64), "S19572C16");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(128,64), "S19572C16");
    check_base_class_offset(lv, (S19572C13*)(S19572C11*), ABISELECT(120,60), "S19572C16");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*), ABISELECT(136,68), "S19572C16");
    check_base_class_offset(lv, (S19572C11*)(S19572C18*), ABISELECT(112,56), "S19572C16");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C18*), ABISELECT(56,28), "S19572C16");
    check_base_class_offset(lv, (S19572C18*)(S19572C17*), ABISELECT(56,28), "S19572C16");
    check_base_class_offset(lv, (S19572C17*), 0, "S19572C16");
    check_base_class_offset(lv, (S19572C21*), ABISELECT(16,8), "S19572C16");
    check_base_class_offset(lv, (S629C14*), 0, "S19572C16");
    test_class_info(&lv, &cd_S19572C16);
    dp->~S19572C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C16(Test_S19572C16, "S19572C16", ABISELECT(224,132));

#else // __cplusplus

extern void _ZN9S19572C16C1Ev();
extern void _ZN9S19572C16D1Ev();
Name_Map name_map_S19572C16[] = {
  NSPAIR(_ZN9S19572C16C1Ev),
  NSPAIR(_ZN9S19572C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C18;
extern VTBL_ENTRY _ZTI9S19572C18[];
extern  VTBL_ENTRY _ZTV9S19572C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C18[];
extern Class_Descriptor cd_S19572C17;
extern VTBL_ENTRY _ZTI9S19572C17[];
extern  VTBL_ENTRY _ZTV9S19572C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C17[];
extern Class_Descriptor cd_S19572C21;
extern VTBL_ENTRY _ZTI9S19572C21[];
extern  VTBL_ENTRY _ZTV9S19572C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C21[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
static Base_Class bases_S19572C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(34,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19572C4,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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_S19572C10,    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, 0},
  {&cd_S19572C13,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    7, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(40,20), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19572C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    13, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    14, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(120,60), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(136,68), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(112,56), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19572C4,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19572C18,    ABISELECT(56,28), //bcp->offset
    26, //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
    12, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19572C17,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19572C21,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19572C16[];
extern void _ZN9S19572C16D1Ev();
extern void _ZN9S19572C16D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S19572C16D1Ev,_ZThn12_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S19572C16D0Ev,_ZThn12_N9S19572C16D0Ev)() __attribute__((weak));
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn56_N9S19572C16D1Ev,_ZThn28_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn56_N9S19572C16D0Ev,_ZThn28_N9S19572C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S19572C16D1Ev,_ZThn56_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn112_N9S19572C16D0Ev,_ZThn56_N9S19572C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N9S19572C16D1Ev,_ZTvn4_n20_N9S19572C16D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C16D0Ev,_ZTvn4_n20_N9S19572C16D0Ev)();
static  VTBL_ENTRY vtc_S19572C16[] = {
  0,
  ABISELECT(24,12),
  ABISELECT(112,56),
  ABISELECT(40,20),
  ABISELECT(48,24),
  ABISELECT(56,28),
  0,
  0,
  ABISELECT(34,18),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&_ZN9S19572C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C16D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(18,10),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  ABISELECT(-24,-12),
  ABISELECT(10,6),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev),
  ABISELECT(8,4),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  ABISELECT(-56,-28),
  0,
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(-22,-10),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev),
  ABISELECT(-112,-56),
  ABISELECT(-78,-38),
  ABISELECT(-64,-32),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev),
  ABISELECT(-86,-42),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C16D1Ev,_ZTvn4_n20_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C16D0Ev,_ZTvn4_n20_N9S19572C16D0Ev),
  ABISELECT(-102,-50),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
extern VTBL_ENTRY _ZTV9S19572C16[];
extern void _ZN9S19572C17D1Ev();
extern void _ZN9S19572C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C17__9S19572C16[] = {
  ABISELECT(112,56),
  ABISELECT(40,20),
  ABISELECT(48,24),
  ABISELECT(56,28),
  0,
  0,
  ABISELECT(34,18),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C17D0Ev,
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn56_N9S19572C17D1Ev,_ZThn28_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn56_N9S19572C17D0Ev,_ZThn28_N9S19572C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C17__9S19572C16[] = {
  ABISELECT(-56,-28),
  0,
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(-22,-10),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C17__9S19572C16[] = {
  ABISELECT(8,4),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn112_N9S19572C17D1Ev,_ZThn56_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn112_N9S19572C17D0Ev,_ZThn56_N9S19572C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C17__9S19572C16[] = {
  ABISELECT(-112,-56),
  ABISELECT(-78,-38),
  ABISELECT(-64,-32),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C17__9S19572C16[] = {
  ABISELECT(-86,-42),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A2__9S19572C17__9S19572C16[] = {
  ABISELECT(-102,-50),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C21__9S19572C16[] = {
  ABISELECT(-16,-8),
  ABISELECT(18,10),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C21__9S19572C16[] = {
  ABISELECT(34,18),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C16[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C13__9S19572C16[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C16[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__9S19572C16[] = {
  0,
  ABISELECT(34,18),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C16[] = {
  ABISELECT(34,18),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void _ZN9S19572C18D1Ev();
extern void _ZN9S19572C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C16[] = {
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(-22,-10),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C18__A4__9S19572C16[] = {
  ABISELECT(-22,-10),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C18__9S19572C16[] = {
  ABISELECT(8,4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZThn56_N9S19572C18D1Ev,_ZThn28_N9S19572C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev)();
extern void ABISELECT(_ZThn56_N9S19572C18D0Ev,_ZThn28_N9S19572C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C18__9S19572C16[] = {
  ABISELECT(-56,-28),
  ABISELECT(-78,-38),
  ABISELECT(-64,-32),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C18__9S19572C16[] = {
  ABISELECT(-86,-42),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A1__9S19572C18__9S19572C16[] = {
  ABISELECT(-102,-50),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C16[] = {
  ABISELECT(-78,-38),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C11__A1__9S19572C16[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C16[] = {
  ABISELECT(-86,-42),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C11__A2__9S19572C16[] = {
  ABISELECT(-86,-42),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C16[] = {
  ABISELECT(-102,-50),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C11__9S19572C16[] = {
  ABISELECT(-86,-42),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C11__9S19572C16[] = {
  ABISELECT(-102,-50),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTT_ENTRY vtt_S19572C16[] = {
  {&(_ZTV9S19572C16[11]),  11,52},
  {&(_tg__ZTV9S19572C17__9S19572C16[9]),  9,11},
  {&(_tg__ZTV9S19572C17__9S19572C16[9]),  9,11},
  {&(_tg__ZTV9S19572C17__9S19572C16[9]),  9,11},
  {&(_tg__ZTV9S19572C18__9S19572C17__9S19572C16[8]),  8,11},
  {&(_tg__ZTV9S19572C12__9S19572C17__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C17__9S19572C16[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C17__9S19572C16[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A2__9S19572C17__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C21__9S19572C16[4]),  4,4},
  {&(_tg__ZTV8S19572C4__9S19572C21__9S19572C16[3]),  3,3},
  {&(_ZTV9S19572C16[21]),  21,52},
  {&(_ZTV9S19572C16[26]),  26,52},
  {&(_ZTV9S19572C16[11]),  11,52},
  {&(_ZTV9S19572C16[11]),  11,52},
  {&(_ZTV9S19572C16[34]),  34,52},
  {&(_ZTV9S19572C16[42]),  42,52},
  {&(_ZTV9S19572C16[47]),  47,52},
  {&(_ZTV9S19572C16[52]),  52,52},
  {&(_ZTV9S19572C16[17]),  17,52},
  {&(_tg__ZTV9S19572C13__9S19572C16[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C13__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C16[3]),  3,3},
  {&(_tg__ZTV8S19572C3__9S19572C16[4]),  4,4},
  {&(_tg__ZTV8S19572C3__9S19572C16[4]),  4,4},
  {&(_tg__ZTV8S19572C4__A1__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C18__9S19572C16[6]),  6,9},
  {&(_tg__ZTV8S19572C49S19572C18__A4__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C18__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C18__9S19572C16[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C18__9S19572C16[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A1__9S19572C18__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C16[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C11__A1__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C16[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C11__A2__9S19572C16[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C16[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C11__9S19572C16[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C11__9S19572C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C16[];
extern  VTBL_ENTRY _ZTV9S19572C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C16[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C18D0Ev,_ZThn28_N9S19572C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C18D1Ev,_ZThn28_N9S19572C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C17D0Ev,_ZThn56_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C17D1Ev,_ZThn56_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C17D0Ev,_ZThn28_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C17D1Ev,_ZThn28_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C16D0Ev,_ZThn56_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C16D1Ev,_ZThn56_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C16D0Ev,_ZThn28_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C16D1Ev,_ZThn28_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C16D0Ev,_ZThn12_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C16D1Ev,_ZThn12_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19572C16 = {  "S19572C16", // class name
  bases_S19572C16, 22,
  &(vtc_S19572C16[0]), // expected_vtbl_contents
  &(vtt_S19572C16[0]), // expected_vtt_contents
  ABISELECT(224,132), // object size
  NSPAIRA(_ZTI9S19572C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19572C16),52, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C16),39, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19572C15  : virtual S19572C4 , virtual S19572C16 , S629C14 {
  virtual  ~S19572C15(); // _ZN9S19572C15D2Ev
  S19572C15(); // tgen
};
//SIG(-1 S19572C15) C1{ VBC2{ VBC3{ m Fs:13}} VBC4{ VBC5{ BC2 BC6{ BC3} vd} VBC7{ VBC6} BC8{ VBC3 VBC9{ VBC2} VBC10{ VBC6 VBC7 VBC11{ VBC3 VBC6 BC7 BC5 BC2 vd FD[5]} BC2 v1 FC12{ VBC13{ VBC3} VBC2 BC3 VBC6 vd Fi}} vd Fi} BC14{ VBC3 VBC2} VBC15{ m}} BC15 vd}


 S19572C15 ::~S19572C15(){ note_dtor("S19572C15", this);}
S19572C15 ::S19572C15(){ note_ctor("S19572C15", this);} // tgen

static void Test_S19572C15()
{
  extern Class_Descriptor cd_S19572C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,35)];
    init_test(&cd_S19572C15, buf);
    S19572C15 *dp, &lv = *(dp=new (buf) S19572C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,136), "sizeof(S19572C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C15)");
    /*is_ambiguous_... S19572C15::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(8,4), "S19572C15");
    /*is_ambiguous_... S19572C15::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*), ABISELECT(8,4), "S19572C15");
    /*is_ambiguous_... S19572C17::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C17*)(S19572C16*), ABISELECT(8,4), "S19572C15");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*), ABISELECT(8,4), "S19572C15");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(8,4), "S19572C15");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*), ABISELECT(8,4), "S19572C15");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C18*), ABISELECT(8,4), "S19572C15");
    check_base_class_offset(lv, (S19572C5*)(S19572C21*)(S19572C16*), ABISELECT(8,4), "S19572C15");
    /*is_ambiguous_... S19572C15::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*), ABISELECT(16,8), "S19572C15");
    check_base_class_offset(lv, (S19572C4*)(S19572C3*), ABISELECT(16,8), "S19572C15");
    check_base_class_offset(lv, (S19572C4*)(S19572C21*)(S19572C16*), ABISELECT(16,8), "S19572C15");
    /*is_ambiguous_... S19572C15::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C13*), ABISELECT(40,20), "S19572C15");
    /*is_ambiguous_... S19572C15::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*), ABISELECT(48,24), "S19572C15");
    /*is_ambiguous_... S19572C15::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C13*), ABISELECT(48,24), "S19572C15");
    /*is_ambiguous_... S19572C16::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C13*)(S19572C16*), ABISELECT(40,20), "S19572C15");
    /*is_ambiguous_... S19572C15::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(50,26), "S19572C15");
    /*is_ambiguous_... S19572C15::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C12*), ABISELECT(50,26), "S19572C15");
    /*is_ambiguous_... S19572C18::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C18*), ABISELECT(50,26), "S19572C15");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*), ABISELECT(50,26), "S19572C15");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*), ABISELECT(50,26), "S19572C15");
    /*is_ambiguous_... S19572C16::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C16*), 0, "S19572C15");
    /*is_ambiguous_... S19572C18::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C18*), 0, "S19572C15");
    check_base_class_offset(lv, (S19572C3*)(S19572C17*)(S19572C16*), ABISELECT(16,8), "S19572C15");
    check_base_class_offset(lv, (S19572C12*)(S19572C11*), ABISELECT(112,56), "S19572C15");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(120,60), "S19572C15");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(128,64), "S19572C15");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(128,64), "S19572C15");
    check_base_class_offset(lv, (S19572C13*)(S19572C11*), ABISELECT(120,60), "S19572C15");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*), ABISELECT(136,68), "S19572C15");
    check_base_class_offset(lv, (S19572C11*)(S19572C18*), ABISELECT(112,56), "S19572C15");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C18*), ABISELECT(56,28), "S19572C15");
    check_base_class_offset(lv, (S19572C18*)(S19572C17*)(S19572C16*), ABISELECT(56,28), "S19572C15");
    check_base_class_offset(lv, (S19572C17*)(S19572C16*), ABISELECT(16,8), "S19572C15");
    check_base_class_offset(lv, (S19572C21*)(S19572C16*), ABISELECT(32,16), "S19572C15");
    check_base_class_offset(lv, (S629C14*)(S19572C16*), ABISELECT(224,132), "S19572C15");
    check_base_class_offset(lv, (S19572C16*), ABISELECT(16,8), "S19572C15");
    /*is_ambiguous_... S19572C15::S629C14 */ AMB_check_base_class_offset(lv, (S629C14*), 0, "S19572C15");
    test_class_info(&lv, &cd_S19572C15);
    dp->~S19572C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C15(Test_S19572C15, "S19572C15", ABISELECT(240,136));

#else // __cplusplus

extern void _ZN9S19572C15C1Ev();
extern void _ZN9S19572C15D2Ev();
Name_Map name_map_S19572C15[] = {
  NSPAIR(_ZN9S19572C15C1Ev),
  NSPAIR(_ZN9S19572C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C18;
extern VTBL_ENTRY _ZTI9S19572C18[];
extern  VTBL_ENTRY _ZTV9S19572C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C18[];
extern Class_Descriptor cd_S19572C17;
extern VTBL_ENTRY _ZTI9S19572C17[];
extern  VTBL_ENTRY _ZTV9S19572C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C17[];
extern Class_Descriptor cd_S19572C21;
extern VTBL_ENTRY _ZTI9S19572C21[];
extern  VTBL_ENTRY _ZTV9S19572C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C21[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S19572C16;
extern VTBL_ENTRY _ZTI9S19572C16[];
extern  VTBL_ENTRY _ZTV9S19572C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C16[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
static Base_Class bases_S19572C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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, 1},
  {&cd_S19572C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C4,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    4, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    5, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(40,20), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(50,26), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C10,    ABISELECT(50,26), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19572C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19572C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    13, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    14, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(120,60), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(136,68), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(112,56), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19572C4,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    18, //immediately_derived
  0, 0},
  {&cd_S19572C18,    ABISELECT(56,28), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19572C17,    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
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19572C21,    ABISELECT(32,16), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S629C14,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C16,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19572C15[];
extern void _ZN9S19572C15D1Ev();
extern void _ZN9S19572C15D0Ev();
extern void ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn16_N9S19572C15D1Ev,_ZThn8_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn16_N9S19572C15D0Ev,_ZThn8_N9S19572C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn40_N9S19572C15D1Ev,_ZThn20_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn40_N9S19572C15D0Ev,_ZThn20_N9S19572C15D0Ev)() __attribute__((weak));
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn56_N9S19572C15D1Ev,_ZThn28_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn56_N9S19572C15D0Ev,_ZThn28_N9S19572C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn112_N9S19572C15D1Ev,_ZThn56_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn112_N9S19572C15D0Ev,_ZThn56_N9S19572C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N9S19572C15D1Ev,_ZTvn4_n20_N9S19572C15D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C15D0Ev,_ZTvn4_n20_N9S19572C15D0Ev)();
static  VTBL_ENTRY vtc_S19572C15[] = {
  ABISELECT(224,132),
  ABISELECT(112,56),
  ABISELECT(56,28),
  ABISELECT(16,8),
  0,
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(8,4),
  ABISELECT(16,8),
  ABISELECT(50,26),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&_ZN9S19572C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C15D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(208,124),
  ABISELECT(24,12),
  ABISELECT(96,48),
  ABISELECT(-16,-8),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  ABISELECT(-40,-20),
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev),
  ABISELECT(-56,-28),
  0,
  ABISELECT(56,28),
  ABISELECT(-56,-28),
  ABISELECT(-6,-2),
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev),
  ABISELECT(-112,-56),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C15D1Ev,_ZTvn4_n20_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C15D0Ev,_ZTvn4_n20_N9S19572C15D0Ev),
  ABISELECT(-128,-64),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
};
extern VTBL_ENTRY _ZTV9S19572C15[];
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C15[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void _ZN9S19572C16D1Ev();
extern void _ZN9S19572C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C16__9S19572C15[] = {
  ABISELECT(208,124),
  ABISELECT(24,12),
  ABISELECT(96,48),
  ABISELECT(-16,-8),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&_ZN9S19572C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C16D0Ev,
};
extern void _ZN9S19572C17D1Ev();
extern void _ZN9S19572C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C179S19572C16__9S19572C15[] = {
  ABISELECT(96,48),
  ABISELECT(-16,-8),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C17D0Ev,
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S19572C17D1Ev,_ZThn20_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S19572C17D0Ev,_ZThn20_N9S19572C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C179S19572C16__9S19572C15[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(56,28),
  ABISELECT(-56,-28),
  ABISELECT(-6,-2),
  ABISELECT(-48,-24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C179S19572C16__9S19572C15[] = {
  ABISELECT(50,26),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn96_N9S19572C17D1Ev,_ZThn48_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn96_N9S19572C17D0Ev,_ZThn48_N9S19572C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C179S19572C16__9S19572C15[] = {
  ABISELECT(-96,-48),
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C179S19572C16__9S19572C15[] = {
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A2__9S19572C179S19572C16__9S19572C15[] = {
  ABISELECT(-128,-64),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C219S19572C16__9S19572C15[] = {
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C219S19572C16__9S19572C15[] = {
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S19572C16D1Ev,_ZThn12_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S19572C16D0Ev,_ZThn12_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C16__9S19572C15[] = {
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C16__9S19572C15[] = {
  ABISELECT(50,26),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn40_N9S19572C16D1Ev,_ZThn20_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn40_N9S19572C16D0Ev,_ZThn20_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C16__9S19572C15[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(56,28),
  ABISELECT(-56,-28),
  ABISELECT(-6,-2),
  ABISELECT(-48,-24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn96_N9S19572C16D1Ev,_ZThn48_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn96_N9S19572C16D0Ev,_ZThn48_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C16__9S19572C15[] = {
  ABISELECT(-96,-48),
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C16D1Ev,_ZTvn4_n20_N9S19572C16D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C16D0Ev,_ZTvn4_n20_N9S19572C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C16__9S19572C15[] = {
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C16D1Ev,_ZTvn4_n20_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C16D0Ev,_ZTvn4_n20_N9S19572C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C16__9S19572C15[] = {
  ABISELECT(-128,-64),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C21__9S19572C16__9S19572C15[] = {
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C15[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C13__A1__9S19572C15[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C15[] = {
  ABISELECT(50,26),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__9S19572C15[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void _ZN9S19572C18D1Ev();
extern void _ZN9S19572C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C15[] = {
  ABISELECT(56,28),
  ABISELECT(-56,-28),
  ABISELECT(-6,-2),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C18__A4__9S19572C15[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C18__9S19572C15[] = {
  ABISELECT(50,26),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZThn56_N9S19572C18D1Ev,_ZThn28_N9S19572C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev)();
extern void ABISELECT(_ZThn56_N9S19572C18D0Ev,_ZThn28_N9S19572C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C18__9S19572C15[] = {
  ABISELECT(-56,-28),
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C18__9S19572C15[] = {
  ABISELECT(-112,-56),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A1__9S19572C18__9S19572C15[] = {
  ABISELECT(-128,-64),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C15[] = {
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C11__A1__9S19572C15[] = {
  ABISELECT(-62,-30),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C15[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C11__A2__9S19572C15[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C15[] = {
  ABISELECT(-128,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C11__9S19572C15[] = {
  ABISELECT(-112,-56),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C11__9S19572C15[] = {
  ABISELECT(-128,-64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTT_ENTRY vtt_S19572C15[] = {
  {&(_ZTV9S19572C15[12]),  12,64},
  {&(_ZTV9S19572C15[26]),  26,64},
  {&(_ZTV9S19572C15[26]),  26,64},
  {&(_ZTV9S19572C15[36]),  36,64},
  {&(_ZTV9S19572C15[12]),  12,64},
  {&(_ZTV9S19572C15[26]),  26,64},
  {&(_ZTV9S19572C15[46]),  46,64},
  {&(_ZTV9S19572C15[54]),  54,64},
  {&(_ZTV9S19572C15[59]),  59,64},
  {&(_ZTV9S19572C15[64]),  64,64},
  {&(_ZTV9S19572C15[32]),  32,64},
  {&(_tg__ZTV8S19572C4__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C16__9S19572C15[11]),  11,13},
  {&(_tg__ZTV9S19572C179S19572C16__9S19572C15[9]),  9,11},
  {&(_tg__ZTV9S19572C179S19572C16__9S19572C15[9]),  9,11},
  {&(_tg__ZTV9S19572C179S19572C16__9S19572C15[9]),  9,11},
  {&(_tg__ZTV9S19572C18__9S19572C179S19572C16__9S19572C15[8]),  8,11},
  {&(_tg__ZTV9S19572C12__9S19572C179S19572C16__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C179S19572C16__9S19572C15[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C179S19572C16__9S19572C15[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A2__9S19572C179S19572C16__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C219S19572C16__9S19572C15[4]),  4,4},
  {&(_tg__ZTV8S19572C4__9S19572C219S19572C16__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C16__9S19572C15[4]),  4,6},
  {&(_tg__ZTV9S19572C12__9S19572C16__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C16__9S19572C15[11]),  11,13},
  {&(_tg__ZTV9S19572C16__9S19572C15[11]),  11,13},
  {&(_tg__ZTV9S19572C18__9S19572C16__9S19572C15[8]),  8,11},
  {&(_tg__ZTV9S19572C11__9S19572C16__9S19572C15[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C16__9S19572C15[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C16__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C21__9S19572C16__9S19572C15[4]),  4,4},
  {&(_tg__ZTV9S19572C13__9S19572C15[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C13__A1__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C15[3]),  3,3},
  {&(_tg__ZTV8S19572C3__9S19572C15[4]),  4,4},
  {&(_tg__ZTV8S19572C3__9S19572C15[4]),  4,4},
  {&(_tg__ZTV9S19572C18__9S19572C15[6]),  6,9},
  {&(_tg__ZTV8S19572C49S19572C18__A4__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C18__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C18__9S19572C15[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C18__9S19572C15[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A1__9S19572C18__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C15[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C11__A1__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C15[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C11__A2__9S19572C15[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C15[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C11__9S19572C15[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C11__9S19572C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C15[];
extern  VTBL_ENTRY _ZTV9S19572C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C15[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C18D0Ev,_ZThn28_N9S19572C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C18D1Ev,_ZThn28_N9S19572C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19572C16D0Ev,_ZThn48_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19572C16D1Ev,_ZThn48_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C16D0Ev,_ZThn20_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C16D1Ev,_ZThn20_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C16D0Ev,_ZThn12_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C16D1Ev,_ZThn12_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19572C17D0Ev,_ZThn48_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19572C17D1Ev,_ZThn48_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C17D0Ev,_ZThn20_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C17D1Ev,_ZThn20_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C15D0Ev,_ZThn56_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C15D1Ev,_ZThn56_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C15D0Ev,_ZThn28_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C15D1Ev,_ZThn28_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C15D0Ev,_ZThn20_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C15D1Ev,_ZThn20_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19572C15D0Ev,_ZThn8_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S19572C15D1Ev,_ZThn8_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19572C15 = {  "S19572C15", // class name
  bases_S19572C15, 24,
  &(vtc_S19572C15[0]), // expected_vtbl_contents
  &(vtt_S19572C15[0]), // expected_vtt_contents
  ABISELECT(240,136), // object size
  NSPAIRA(_ZTI9S19572C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19572C15),64, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C15),50, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19572C14  : S19572C15 , S19572C6 , virtual S19572C20 {
  virtual  ~S19572C14(); // _ZN9S19572C14D2Ev
  S19572C14(); // tgen
};
//SIG(-1 S19572C14) C1{ BC2{ VBC3{ VBC4{ m Fs:13}} VBC5{ VBC6{ BC3 BC7{ BC4} vd} VBC8{ VBC7} BC9{ VBC4 VBC10{ VBC3} VBC11{ VBC7 VBC8 VBC12{ VBC4 VBC7 BC8 BC6 BC3 vd FD[5]} BC3 v1 FC13{ VBC14{ VBC4} VBC3 BC4 VBC7 vd Fi}} vd Fi} BC15{ VBC4 VBC3} VBC16{ m}} BC16 vd} BC17{ v2 Fi} VBC14 vd}


 S19572C14 ::~S19572C14(){ note_dtor("S19572C14", this);}
S19572C14 ::S19572C14(){ note_ctor("S19572C14", this);} // tgen

static void Test_S19572C14()
{
  extern Class_Descriptor cd_S19572C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,37)];
    init_test(&cd_S19572C14, buf);
    S19572C14 *dp, &lv = *(dp=new (buf) S19572C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,144), "sizeof(S19572C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C14)");
    /*is_ambiguous_... S19572C14::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(20,12), "S19572C14");
    /*is_ambiguous_... S19572C14::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*), ABISELECT(20,12), "S19572C14");
    /*is_ambiguous_... S19572C17::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C17*)(S19572C16*), ABISELECT(20,12), "S19572C14");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*), ABISELECT(20,12), "S19572C14");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(20,12), "S19572C14");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*), ABISELECT(20,12), "S19572C14");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C18*), ABISELECT(20,12), "S19572C14");
    check_base_class_offset(lv, (S19572C5*)(S19572C21*)(S19572C16*), ABISELECT(20,12), "S19572C14");
    check_base_class_offset(lv, (S19572C5*)(S19572C20*), ABISELECT(20,12), "S19572C14");
    /*is_ambiguous_... S19572C15::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C15*), ABISELECT(24,16), "S19572C14");
    check_base_class_offset(lv, (S19572C4*)(S19572C3*), ABISELECT(24,16), "S19572C14");
    check_base_class_offset(lv, (S19572C4*)(S19572C21*)(S19572C16*), ABISELECT(24,16), "S19572C14");
    /*is_ambiguous_... S19572C14::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C13*), ABISELECT(48,28), "S19572C14");
    /*is_ambiguous_... S19572C14::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*), ABISELECT(56,32), "S19572C14");
    /*is_ambiguous_... S19572C14::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C13*), ABISELECT(56,32), "S19572C14");
    /*is_ambiguous_... S19572C16::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C13*)(S19572C16*), ABISELECT(48,28), "S19572C14");
    /*is_ambiguous_... S19572C14::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(58,34), "S19572C14");
    /*is_ambiguous_... S19572C14::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C12*), ABISELECT(58,34), "S19572C14");
    /*is_ambiguous_... S19572C18::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C18*), ABISELECT(58,34), "S19572C14");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*), ABISELECT(58,34), "S19572C14");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*), ABISELECT(58,34), "S19572C14");
    /*is_ambiguous_... S19572C16::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C16*), 0, "S19572C14");
    /*is_ambiguous_... S19572C18::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C18*), 0, "S19572C14");
    check_base_class_offset(lv, (S19572C3*)(S19572C17*)(S19572C16*), ABISELECT(24,16), "S19572C14");
    check_base_class_offset(lv, (S19572C12*)(S19572C11*), ABISELECT(112,64), "S19572C14");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(120,68), "S19572C14");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(128,72), "S19572C14");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(128,72), "S19572C14");
    check_base_class_offset(lv, (S19572C13*)(S19572C11*), ABISELECT(120,68), "S19572C14");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*), ABISELECT(136,76), "S19572C14");
    check_base_class_offset(lv, (S19572C11*)(S19572C18*), ABISELECT(112,64), "S19572C14");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C18*), ABISELECT(64,36), "S19572C14");
    check_base_class_offset(lv, (S19572C18*)(S19572C17*)(S19572C16*), ABISELECT(64,36), "S19572C14");
    check_base_class_offset(lv, (S19572C17*)(S19572C16*), ABISELECT(24,16), "S19572C14");
    check_base_class_offset(lv, (S19572C21*)(S19572C16*), ABISELECT(40,24), "S19572C14");
    check_base_class_offset(lv, (S629C14*)(S19572C16*), ABISELECT(224,140), "S19572C14");
    check_base_class_offset(lv, (S19572C16*)(S19572C15*), ABISELECT(24,16), "S19572C14");
    /*is_ambiguous_... S19572C15::S629C14 */ AMB_check_base_class_offset(lv, (S629C14*)(S19572C15*), 0, "S19572C14");
    check_base_class_offset(lv, (S19572C15*), 0, "S19572C14");
    check_base_class_offset(lv, (S19572C6*), ABISELECT(8,4), "S19572C14");
    check_base_class_offset(lv, (S19572C20*), ABISELECT(224,140), "S19572C14");
    test_class_info(&lv, &cd_S19572C14);
    dp->~S19572C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C14(Test_S19572C14, "S19572C14", ABISELECT(240,144));

#else // __cplusplus

extern void _ZN9S19572C14C1Ev();
extern void _ZN9S19572C14D2Ev();
Name_Map name_map_S19572C14[] = {
  NSPAIR(_ZN9S19572C14C1Ev),
  NSPAIR(_ZN9S19572C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C18;
extern VTBL_ENTRY _ZTI9S19572C18[];
extern  VTBL_ENTRY _ZTV9S19572C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C18[];
extern Class_Descriptor cd_S19572C17;
extern VTBL_ENTRY _ZTI9S19572C17[];
extern  VTBL_ENTRY _ZTV9S19572C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C17[];
extern Class_Descriptor cd_S19572C21;
extern VTBL_ENTRY _ZTI9S19572C21[];
extern  VTBL_ENTRY _ZTV9S19572C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C21[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S19572C16;
extern VTBL_ENTRY _ZTI9S19572C16[];
extern  VTBL_ENTRY _ZTV9S19572C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C16[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S19572C15;
extern VTBL_ENTRY _ZTI9S19572C15[];
extern  VTBL_ENTRY _ZTV9S19572C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C15[];
extern Class_Descriptor cd_S19572C6;
extern VTBL_ENTRY _ZTI8S19572C6[];
extern  VTBL_ENTRY _ZTV8S19572C6[];
extern Class_Descriptor cd_S19572C20;
extern VTBL_ENTRY _ZTI9S19572C20[];
extern  VTBL_ENTRY _ZTV9S19572C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C20[];
static Base_Class bases_S19572C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(20,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
  0, 1},
  {&cd_S19572C4,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19572C4,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    4, //immediately_derived
  0, 0},
  {&cd_S19572C10,    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
    5, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(48,28), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(58,34), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C10,    ABISELECT(58,34), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19572C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19572C3,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(112,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(120,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C10,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C13,    ABISELECT(120,68), //bcp->offset
    60, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(136,76), //bcp->offset
    65, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(112,64), //bcp->offset
    53, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19572C4,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19572C18,    ABISELECT(64,36), //bcp->offset
    42, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19572C17,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19572C21,    ABISELECT(40,24), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S629C14,    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
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19572C16,    ABISELECT(24,16), //bcp->offset
    18, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19572C15,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19572C6,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_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_S19572C20,    ABISELECT(224,140), //bcp->offset
    68, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19572C14[];
extern void _ZN9S19572C14D1Ev();
extern void _ZN9S19572C14D0Ev();
extern void _ZN8S19572C62v1Ev();
extern void ABISELECT(_ZTv0_n96_N9S19572C14D1Ev,_ZTv0_n48_N9S19572C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19572C14D1Ev,_ZThn16_N9S19572C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19572C14D0Ev,_ZTv0_n48_N9S19572C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19572C14D0Ev,_ZThn16_N9S19572C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C14D1Ev,_ZTv0_n16_N9S19572C14D1Ev)();
extern void ABISELECT(_ZThn48_N9S19572C14D1Ev,_ZThn28_N9S19572C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C14D0Ev,_ZTv0_n16_N9S19572C14D0Ev)();
extern void ABISELECT(_ZThn48_N9S19572C14D0Ev,_ZThn28_N9S19572C14D0Ev)() __attribute__((weak));
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C14D1Ev,_ZTv0_n32_N9S19572C14D1Ev)();
extern void ABISELECT(_ZThn64_N9S19572C14D1Ev,_ZThn36_N9S19572C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C14D0Ev,_ZTv0_n32_N9S19572C14D0Ev)();
extern void ABISELECT(_ZThn64_N9S19572C14D0Ev,_ZThn36_N9S19572C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C14D1Ev,_ZTv0_n20_N9S19572C14D1Ev)();
extern void ABISELECT(_ZThn112_N9S19572C14D1Ev,_ZThn64_N9S19572C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C14D0Ev,_ZTv0_n20_N9S19572C14D0Ev)();
extern void ABISELECT(_ZThn112_N9S19572C14D0Ev,_ZThn64_N9S19572C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N9S19572C14D1Ev,_ZTvn4_n20_N9S19572C14D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C14D0Ev,_ZTvn4_n20_N9S19572C14D0Ev)();
static  VTBL_ENTRY vtc_S19572C14[] = {
  ABISELECT(224,140),
  ABISELECT(224,140),
  ABISELECT(112,64),
  ABISELECT(64,36),
  ABISELECT(24,16),
  0,
  ABISELECT(48,28),
  ABISELECT(24,16),
  ABISELECT(20,12),
  ABISELECT(24,16),
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&_ZN9S19572C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C14D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&_ZN8S19572C62v1Ev,
  ABISELECT(-24,-16),
  ABISELECT(200,124),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  -4,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C14D1Ev,_ZTv0_n48_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C14D0Ev,_ZTv0_n48_N9S19572C14D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-20,-12),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  ABISELECT(-48,-28),
  ABISELECT(-28,-16),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C14D1Ev,_ZTv0_n16_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C14D0Ev,_ZTv0_n16_N9S19572C14D0Ev),
  ABISELECT(-64,-36),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-44,-24),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C14D1Ev,_ZTv0_n32_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C14D0Ev,_ZTv0_n32_N9S19572C14D0Ev),
  ABISELECT(-112,-64),
  ABISELECT(-92,-52),
  ABISELECT(-54,-30),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C14D1Ev,_ZTv0_n20_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C14D0Ev,_ZTv0_n20_N9S19572C14D0Ev),
  ABISELECT(-100,-56),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C14D1Ev,_ZTvn4_n20_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C14D0Ev,_ZTvn4_n20_N9S19572C14D0Ev),
  ABISELECT(-116,-64),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  ABISELECT(-204,-128),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
};
extern VTBL_ENTRY _ZTV9S19572C14[];
extern void _ZN9S19572C15D1Ev();
extern void _ZN9S19572C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C15__9S19572C14[] = {
  ABISELECT(224,140),
  ABISELECT(112,64),
  ABISELECT(64,36),
  ABISELECT(24,16),
  0,
  ABISELECT(48,28),
  ABISELECT(24,16),
  ABISELECT(20,12),
  ABISELECT(24,16),
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&_ZN9S19572C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C15D0Ev,
};
extern void ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S19572C15D1Ev,_ZThn16_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S19572C15D0Ev,_ZThn16_N9S19572C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C16__9S19572C15__9S19572C14[] = {
  ABISELECT(-24,-16),
  ABISELECT(200,124),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  -4,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn48_N9S19572C15D1Ev,_ZThn28_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn48_N9S19572C15D0Ev,_ZThn28_N9S19572C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C15__9S19572C14[] = {
  ABISELECT(-48,-28),
  ABISELECT(-28,-16),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev),
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn64_N9S19572C15D1Ev,_ZThn36_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn64_N9S19572C15D0Ev,_ZThn36_N9S19572C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C15__9S19572C14[] = {
  ABISELECT(-64,-36),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-44,-24),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn112_N9S19572C15D1Ev,_ZThn64_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn112_N9S19572C15D0Ev,_ZThn64_N9S19572C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C15__9S19572C14[] = {
  ABISELECT(-112,-64),
  ABISELECT(-92,-52),
  ABISELECT(-54,-30),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C15D1Ev,_ZTvn4_n20_N9S19572C15D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C15D0Ev,_ZTvn4_n20_N9S19572C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C15__9S19572C14[] = {
  ABISELECT(-100,-56),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C15D1Ev,_ZTvn4_n20_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C15D0Ev,_ZTvn4_n20_N9S19572C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C15__9S19572C14[] = {
  ABISELECT(-116,-64),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C219S19572C16__9S19572C15__9S19572C14[] = {
  ABISELECT(-16,-8),
  ABISELECT(-20,-12),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C14[] = {
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void _ZN9S19572C16D1Ev();
extern void _ZN9S19572C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C16__9S19572C14[] = {
  ABISELECT(200,124),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&_ZN9S19572C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C16D0Ev,
};
extern void _ZN9S19572C17D1Ev();
extern void _ZN9S19572C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C179S19572C16__9S19572C14[] = {
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C17D0Ev,
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S19572C17D1Ev,_ZThn20_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S19572C17D0Ev,_ZThn20_N9S19572C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C179S19572C16__9S19572C14[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-44,-24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C179S19572C16__9S19572C14[] = {
  ABISELECT(58,34),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn88_N9S19572C17D1Ev,_ZThn48_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn88_N9S19572C17D0Ev,_ZThn48_N9S19572C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C179S19572C16__9S19572C14[] = {
  ABISELECT(-88,-48),
  ABISELECT(-92,-52),
  ABISELECT(-54,-30),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C179S19572C16__9S19572C14[] = {
  ABISELECT(-100,-56),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A2__9S19572C179S19572C16__9S19572C14[] = {
  ABISELECT(-116,-64),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C219S19572C16__9S19572C14[] = {
  ABISELECT(-16,-8),
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C219S19572C16__9S19572C14[] = {
  -4,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S19572C16D1Ev,_ZThn12_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S19572C16D0Ev,_ZThn12_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C16__9S19572C14[] = {
  ABISELECT(-24,-12),
  ABISELECT(-28,-16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C16__9S19572C14[] = {
  ABISELECT(58,34),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn40_N9S19572C16D1Ev,_ZThn20_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn40_N9S19572C16D0Ev,_ZThn20_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C16__9S19572C14[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-44,-24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn88_N9S19572C16D1Ev,_ZThn48_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn88_N9S19572C16D0Ev,_ZThn48_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C16__9S19572C14[] = {
  ABISELECT(-88,-48),
  ABISELECT(-92,-52),
  ABISELECT(-54,-30),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C16D1Ev,_ZTvn4_n20_N9S19572C16D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C16D0Ev,_ZTvn4_n20_N9S19572C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C16__9S19572C14[] = {
  ABISELECT(-100,-56),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C16D1Ev,_ZTvn4_n20_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C16D0Ev,_ZTvn4_n20_N9S19572C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C16__9S19572C14[] = {
  ABISELECT(-116,-64),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C21__9S19572C16__9S19572C14[] = {
  ABISELECT(-16,-8),
  ABISELECT(-20,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C14[] = {
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C13__A1__9S19572C14[] = {
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C14[] = {
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__9S19572C14[] = {
  0,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void _ZN9S19572C18D1Ev();
extern void _ZN9S19572C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C14[] = {
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-44,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C18__A4__9S19572C14[] = {
  ABISELECT(-44,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C18__9S19572C14[] = {
  ABISELECT(58,34),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZThn48_N9S19572C18D1Ev,_ZThn28_N9S19572C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev)();
extern void ABISELECT(_ZThn48_N9S19572C18D0Ev,_ZThn28_N9S19572C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C18__9S19572C14[] = {
  ABISELECT(-48,-28),
  ABISELECT(-92,-52),
  ABISELECT(-54,-30),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C18__9S19572C14[] = {
  ABISELECT(-100,-56),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A1__9S19572C18__9S19572C14[] = {
  ABISELECT(-116,-64),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C14[] = {
  ABISELECT(-92,-52),
  ABISELECT(-54,-30),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C11__A1__9S19572C14[] = {
  ABISELECT(-54,-30),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C14[] = {
  ABISELECT(-100,-56),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C11__A2__9S19572C14[] = {
  ABISELECT(-100,-56),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C14[] = {
  ABISELECT(-116,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C11__9S19572C14[] = {
  ABISELECT(-100,-56),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C11__9S19572C14[] = {
  ABISELECT(-116,-64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C20__9S19572C14[] = {
  ABISELECT(-204,-128),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C20[0]),
};
static  VTT_ENTRY vtt_S19572C14[] = {
  {&(_ZTV9S19572C14[13]),  13,71},
  {&(_tg__ZTV9S19572C15__9S19572C14[12]),  12,14},
  {&(_tg__ZTV9S19572C16__9S19572C15__9S19572C14[12]),  12,14},
  {&(_tg__ZTV9S19572C16__9S19572C15__9S19572C14[12]),  12,14},
  {&(_tg__ZTV9S19572C13__9S19572C15__9S19572C14[4]),  4,6},
  {&(_tg__ZTV9S19572C15__9S19572C14[12]),  12,14},
  {&(_tg__ZTV9S19572C16__9S19572C15__9S19572C14[12]),  12,14},
  {&(_tg__ZTV9S19572C18__9S19572C15__9S19572C14[8]),  8,11},
  {&(_tg__ZTV9S19572C11__9S19572C15__9S19572C14[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C15__9S19572C14[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C15__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C219S19572C16__9S19572C15__9S19572C14[4]),  4,4},
  {&(_ZTV9S19572C14[30]),  30,71},
  {&(_ZTV9S19572C14[30]),  30,71},
  {&(_ZTV9S19572C14[40]),  40,71},
  {&(_ZTV9S19572C14[13]),  13,71},
  {&(_ZTV9S19572C14[30]),  30,71},
  {&(_ZTV9S19572C14[50]),  50,71},
  {&(_ZTV9S19572C14[58]),  58,71},
  {&(_ZTV9S19572C14[63]),  63,71},
  {&(_ZTV9S19572C14[68]),  68,71},
  {&(_ZTV9S19572C14[36]),  36,71},
  {&(_ZTV9S19572C14[71]),  71,71},
  {&(_tg__ZTV8S19572C4__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C16__9S19572C14[11]),  11,13},
  {&(_tg__ZTV9S19572C179S19572C16__9S19572C14[9]),  9,11},
  {&(_tg__ZTV9S19572C179S19572C16__9S19572C14[9]),  9,11},
  {&(_tg__ZTV9S19572C179S19572C16__9S19572C14[9]),  9,11},
  {&(_tg__ZTV9S19572C18__9S19572C179S19572C16__9S19572C14[8]),  8,11},
  {&(_tg__ZTV9S19572C12__9S19572C179S19572C16__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C179S19572C16__9S19572C14[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C179S19572C16__9S19572C14[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A2__9S19572C179S19572C16__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C219S19572C16__9S19572C14[4]),  4,4},
  {&(_tg__ZTV8S19572C4__9S19572C219S19572C16__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C16__9S19572C14[4]),  4,6},
  {&(_tg__ZTV9S19572C12__9S19572C16__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C16__9S19572C14[11]),  11,13},
  {&(_tg__ZTV9S19572C16__9S19572C14[11]),  11,13},
  {&(_tg__ZTV9S19572C18__9S19572C16__9S19572C14[8]),  8,11},
  {&(_tg__ZTV9S19572C11__9S19572C16__9S19572C14[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C16__9S19572C14[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C16__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C21__9S19572C16__9S19572C14[4]),  4,4},
  {&(_tg__ZTV9S19572C13__9S19572C14[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C13__A1__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C14[3]),  3,3},
  {&(_tg__ZTV8S19572C3__9S19572C14[4]),  4,4},
  {&(_tg__ZTV8S19572C3__9S19572C14[4]),  4,4},
  {&(_tg__ZTV9S19572C18__9S19572C14[6]),  6,9},
  {&(_tg__ZTV8S19572C49S19572C18__A4__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C18__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C18__9S19572C14[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C18__9S19572C14[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A1__9S19572C18__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C14[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C11__A1__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C14[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C11__A2__9S19572C14[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C11__9S19572C14[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C11__9S19572C14[3]),  3,3},
  {&(_tg__ZTV9S19572C20__9S19572C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19572C14[];
extern  VTBL_ENTRY _ZTV9S19572C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C14[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C18D0Ev,_ZThn28_N9S19572C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C18D1Ev,_ZThn28_N9S19572C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19572C16D0Ev,_ZThn48_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19572C16D1Ev,_ZThn48_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C16D0Ev,_ZThn20_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C16D1Ev,_ZThn20_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C16D0Ev,_ZThn12_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C16D1Ev,_ZThn12_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19572C17D0Ev,_ZThn48_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19572C17D1Ev,_ZThn48_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C17D0Ev,_ZThn20_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C17D1Ev,_ZThn20_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C15D0Ev,_ZThn64_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C15D1Ev,_ZThn64_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C15D0Ev,_ZThn36_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C15D1Ev,_ZThn36_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C15D0Ev,_ZThn28_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C15D1Ev,_ZThn28_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C15D0Ev,_ZThn16_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C15D1Ev,_ZThn16_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C14D0Ev,_ZTv0_n20_N9S19572C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C14D0Ev,_ZThn64_N9S19572C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C14D1Ev,_ZTv0_n20_N9S19572C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19572C14D1Ev,_ZThn64_N9S19572C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C14D0Ev,_ZTv0_n32_N9S19572C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C14D0Ev,_ZThn36_N9S19572C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C14D1Ev,_ZTv0_n32_N9S19572C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C14D1Ev,_ZThn36_N9S19572C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C14D0Ev,_ZTv0_n16_N9S19572C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C14D0Ev,_ZThn28_N9S19572C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C14D1Ev,_ZTv0_n16_N9S19572C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C14D1Ev,_ZThn28_N9S19572C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C14D0Ev,_ZTv0_n48_N9S19572C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C14D0Ev,_ZThn16_N9S19572C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C14D1Ev,_ZTv0_n48_N9S19572C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C14D1Ev,_ZThn16_N9S19572C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19572C14 = {  "S19572C14", // class name
  bases_S19572C14, 27,
  &(vtc_S19572C14[0]), // expected_vtbl_contents
  &(vtt_S19572C14[0]), // expected_vtt_contents
  ABISELECT(240,144), // object size
  NSPAIRA(_ZTI9S19572C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19572C14),71, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19572C14),63, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19572C1  : virtual S19572C2 , S19572C7 , virtual S19572C14 {
  ~S19572C1(); // tgen
  S19572C1(); // tgen
};
//SIG(1 S19572C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ m Fs:13}}} VBC6{ v1 Fi} Fp} BC7{ VBC8{ BC9{ BC10{ BC5} vd} VBC3 BC11{ VBC5 VBC10 BC12{ VBC10} BC13{ BC4 BC10 vd} BC4 vd FD[5]} vd Fi} v2 Fp} VBC14{ BC15{ VBC4 VBC16{ VBC13 VBC12 BC17{ VBC5 VBC3 VBC18{ VBC10 VBC12 VBC11 BC4 v3 FC19{ VBC20{ VBC5} VBC4 BC5 VBC10 vd Fi}} vd Fi} BC21{ VBC5 VBC4} VBC22{ m}} BC22 vd} BC6 VBC20 vd}}


S19572C1 ::~S19572C1(){ note_dtor("S19572C1", this);} // tgen
S19572C1 ::S19572C1(){ note_ctor("S19572C1", this);} // tgen

static void Test_S19572C1()
{
  extern Class_Descriptor cd_S19572C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(29,66)];
    init_test(&cd_S19572C1, buf);
    S19572C1 *dp, &lv = *(dp=new (buf) S19572C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,260), "sizeof(S19572C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19572C1)");
    /*is_ambiguous_... S19572C1::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*), ABISELECT(32,16), "S19572C1");
    /*is_ambiguous_... S19572C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*)(S19572C8*), ABISELECT(32,16), "S19572C1");
    check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(32,16), "S19572C1");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*)(S19572C8*), ABISELECT(32,16), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*), ABISELECT(32,16), "S19572C1");
    /*is_ambiguous_... S19572C17::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C17*)(S19572C16*), ABISELECT(32,16), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C11*), ABISELECT(32,16), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(32,16), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C11*), ABISELECT(32,16), "S19572C1");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C4*)(S19572C18*), ABISELECT(32,16), "S19572C1");
    check_base_class_offset(lv, (S19572C5*)(S19572C21*)(S19572C16*), ABISELECT(32,16), "S19572C1");
    check_base_class_offset(lv, (S19572C5*)(S19572C20*), ABISELECT(32,16), "S19572C1");
    check_base_class_offset(lv, (S19572C4*)(S19572C3*)(S19572C2*), ABISELECT(16,8), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C3 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C3*), ABISELECT(16,8), "S19572C1");
    /*is_ambiguous_... S19572C15::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C15*)(S19572C14*), ABISELECT(16,8), "S19572C1");
    check_base_class_offset(lv, (S19572C4*)(S19572C21*)(S19572C16*), ABISELECT(16,8), "S19572C1");
    check_base_class_offset(lv, (S19572C3*)(S19572C2*), ABISELECT(16,8), "S19572C1");
    check_base_class_offset(lv, (S19572C6*)(S19572C2*), ABISELECT(40,20), "S19572C1");
    check_base_class_offset(lv, (S19572C2*), ABISELECT(16,8), "S19572C1");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C9*)(S19572C8*), ABISELECT(72,32), "S19572C1");
    check_base_class_offset(lv, (S19572C10*)(S19572C9*)(S19572C8*), ABISELECT(72,32), "S19572C1");
    check_base_class_offset(lv, (S19572C9*)(S19572C8*), ABISELECT(64,28), "S19572C1");
    check_base_class_offset(lv, (S19572C3*)(S19572C8*), 0, "S19572C1");
    check_base_class_offset(lv, (S19572C3*)(S19572C17*)(S19572C16*), 0, "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*), ABISELECT(196,116), "S19572C1");
    /*is_ambiguous_... S19572C11::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*)(S19572C8*), ABISELECT(196,116), "S19572C1");
    check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*)(S19572C8*), ABISELECT(196,116), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C12*), ABISELECT(196,116), "S19572C1");
    /*is_ambiguous_... S19572C18::S19572C10 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C18*), ABISELECT(196,116), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C11*), ABISELECT(196,116), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C12*)(S19572C11*), ABISELECT(196,116), "S19572C1");
    check_base_class_offset(lv, (S19572C12*)(S19572C11*)(S19572C8*), ABISELECT(80,36), "S19572C1");
    check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(88,40), "S19572C1");
    check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(96,44), "S19572C1");
    check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(96,44), "S19572C1");
    check_base_class_offset(lv, (S19572C13*)(S19572C11*)(S19572C8*), ABISELECT(88,40), "S19572C1");
    /*is_ambiguous_... S19572C11::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*)(S19572C8*), ABISELECT(104,48), "S19572C1");
    check_base_class_offset(lv, (S19572C11*)(S19572C8*), ABISELECT(80,36), "S19572C1");
    check_base_class_offset(lv, (S19572C8*)(S19572C7*), ABISELECT(64,28), "S19572C1");
    check_base_class_offset(lv, (S19572C7*), 0, "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C13*), ABISELECT(248,144), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*), ABISELECT(256,148), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C13*), ABISELECT(256,148), "S19572C1");
    /*is_ambiguous_... S19572C16::S19572C13 */ AMB_check_base_class_offset(lv, (S19572C13*)(S19572C16*), ABISELECT(248,144), "S19572C1");
    /*is_ambiguous_... S19572C16::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C16*), ABISELECT(200,120), "S19572C1");
    /*is_ambiguous_... S19572C18::S19572C12 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C18*), ABISELECT(200,120), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C12*)(S19572C11*), ABISELECT(320,180), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C13*)(S19572C11*), ABISELECT(328,184), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C5*)(S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(336,188), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C10*)(S19572C13*)(S19572C11*), ABISELECT(336,188), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C13*)(S19572C11*), ABISELECT(328,184), "S19572C1");
    /*is_ambiguous_... S19572C1::S19572C11 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C11*), ABISELECT(344,192), "S19572C1");
    check_base_class_offset(lv, (S19572C11*)(S19572C18*), ABISELECT(320,180), "S19572C1");
    /*is_ambiguous_... S19572C18::S19572C4 */ AMB_check_base_class_offset(lv, (S19572C4*)(S19572C18*), ABISELECT(264,152), "S19572C1");
    check_base_class_offset(lv, (S19572C18*)(S19572C17*)(S19572C16*), ABISELECT(264,152), "S19572C1");
    check_base_class_offset(lv, (S19572C17*)(S19572C16*), ABISELECT(224,132), "S19572C1");
    check_base_class_offset(lv, (S19572C21*)(S19572C16*), ABISELECT(240,140), "S19572C1");
    check_base_class_offset(lv, (S629C14*)(S19572C16*), 0, "S19572C1");
    check_base_class_offset(lv, (S19572C16*)(S19572C15*)(S19572C14*), ABISELECT(224,132), "S19572C1");
    /*is_ambiguous_... S19572C15::S629C14 */ AMB_check_base_class_offset(lv, (S629C14*)(S19572C15*)(S19572C14*), ABISELECT(200,120), "S19572C1");
    check_base_class_offset(lv, (S19572C15*)(S19572C14*), ABISELECT(200,120), "S19572C1");
    check_base_class_offset(lv, (S19572C6*)(S19572C14*), ABISELECT(208,124), "S19572C1");
    check_base_class_offset(lv, (S19572C20*)(S19572C14*), ABISELECT(432,256), "S19572C1");
    check_base_class_offset(lv, (S19572C14*), ABISELECT(200,120), "S19572C1");
    test_class_info(&lv, &cd_S19572C1);
    dp->~S19572C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19572C1(Test_S19572C1, "S19572C1", ABISELECT(448,260));

#else // __cplusplus

extern void _ZN8S19572C1C1Ev();
extern void _ZN8S19572C1D1Ev();
Name_Map name_map_S19572C1[] = {
  NSPAIR(_ZN8S19572C1C1Ev),
  NSPAIR(_ZN8S19572C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C6;
extern VTBL_ENTRY _ZTI8S19572C6[];
extern  VTBL_ENTRY _ZTV8S19572C6[];
extern Class_Descriptor cd_S19572C2;
extern VTBL_ENTRY _ZTI8S19572C2[];
extern  VTBL_ENTRY _ZTV8S19572C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C2[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C9;
extern VTBL_ENTRY _ZTI8S19572C9[];
extern  VTBL_ENTRY _ZTV8S19572C9[];
extern Class_Descriptor cd_S19572C3;
extern VTBL_ENTRY _ZTI8S19572C3[];
extern  VTBL_ENTRY _ZTV8S19572C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C3[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
extern Class_Descriptor cd_S19572C8;
extern VTBL_ENTRY _ZTI8S19572C8[];
extern  VTBL_ENTRY _ZTV8S19572C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C8[];
extern Class_Descriptor cd_S19572C7;
extern VTBL_ENTRY _ZTI8S19572C7[];
extern  VTBL_ENTRY _ZTV8S19572C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C7[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C12;
extern VTBL_ENTRY _ZTI9S19572C12[];
extern  VTBL_ENTRY _ZTV9S19572C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C12[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C10;
extern VTBL_ENTRY _ZTI9S19572C10[];
extern Class_Descriptor cd_S19572C13;
extern VTBL_ENTRY _ZTI9S19572C13[];
extern  VTBL_ENTRY _ZTV9S19572C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C13[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C11;
extern VTBL_ENTRY _ZTI9S19572C11[];
extern  VTBL_ENTRY _ZTV9S19572C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C11[];
extern Class_Descriptor cd_S19572C4;
extern VTBL_ENTRY _ZTI8S19572C4[];
extern  VTBL_ENTRY _ZTV8S19572C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C4[];
extern Class_Descriptor cd_S19572C18;
extern VTBL_ENTRY _ZTI9S19572C18[];
extern  VTBL_ENTRY _ZTV9S19572C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C18[];
extern Class_Descriptor cd_S19572C17;
extern VTBL_ENTRY _ZTI9S19572C17[];
extern  VTBL_ENTRY _ZTV9S19572C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C17[];
extern Class_Descriptor cd_S19572C21;
extern VTBL_ENTRY _ZTI9S19572C21[];
extern  VTBL_ENTRY _ZTV9S19572C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C21[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S19572C16;
extern VTBL_ENTRY _ZTI9S19572C16[];
extern  VTBL_ENTRY _ZTV9S19572C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C16[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S19572C15;
extern VTBL_ENTRY _ZTI9S19572C15[];
extern  VTBL_ENTRY _ZTV9S19572C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C15[];
extern Class_Descriptor cd_S19572C6;
extern VTBL_ENTRY _ZTI8S19572C6[];
extern  VTBL_ENTRY _ZTV8S19572C6[];
extern Class_Descriptor cd_S19572C20;
extern VTBL_ENTRY _ZTI9S19572C20[];
extern  VTBL_ENTRY _ZTV9S19572C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C20[];
extern Class_Descriptor cd_S19572C14;
extern VTBL_ENTRY _ZTI9S19572C14[];
extern  VTBL_ENTRY _ZTV9S19572C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19572C14[];
static Base_Class bases_S19572C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    1, //immediately_derived
  0, 1},
  {&cd_S19572C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19572C3,    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
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19572C6,    ABISELECT(40,20), //bcp->offset
    25, //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
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19572C2,    ABISELECT(16,8), //bcp->offset
    20, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(72,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
    6, //immediately_derived
  0, 0},
  {&cd_S19572C10,    ABISELECT(72,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
    7, //immediately_derived
  0, 0},
  {&cd_S19572C9,    ABISELECT(64,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
    6, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19572C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(196,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C10,    ABISELECT(196,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19572C12,    ABISELECT(80,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(88,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(96,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
    14, //immediately_derived
  0, 0},
  {&cd_S19572C10,    ABISELECT(96,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
    15, //immediately_derived
  0, 0},
  {&cd_S19572C13,    ABISELECT(88,40), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(104,48), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(80,36), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19572C8,    ABISELECT(64,28), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19572C7,    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
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19572C4,    ABISELECT(248,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(256,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C10,    ABISELECT(256,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C13,    ABISELECT(248,144), //bcp->offset
    90, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    37, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(200,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    94, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    33, //immediately_derived
  0, 1},
  {&cd_S19572C12,    ABISELECT(320,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    102, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(328,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(336,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C10,    ABISELECT(336,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19572C13,    ABISELECT(328,184), //bcp->offset
    114, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19572C4,    ABISELECT(344,192), //bcp->offset
    119, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    105, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19572C11,    ABISELECT(320,180), //bcp->offset
    107, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    101, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    33, //immediately_derived
  0, 1},
  {&cd_S19572C4,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    96, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19572C18,    ABISELECT(264,152), //bcp->offset
    96, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    95, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    34, //immediately_derived
  0, 1},
  {&cd_S19572C17,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19572C21,    ABISELECT(240,140), //bcp->offset
    86, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 1},
  {&cd_S19572C16,    ABISELECT(224,132), //bcp->offset
    72, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    39, //immediately_derived
  0, 1},
  {&cd_S629C14,    ABISELECT(200,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19572C15,    ABISELECT(200,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19572C6,    ABISELECT(208,124), //bcp->offset
    69, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S19572C20,    ABISELECT(432,256), //bcp->offset
    122, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    42, //immediately_derived
  0, 1},
  {&cd_S19572C14,    ABISELECT(200,120), //bcp->offset
    52, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19572C1[];
extern void _ZN8S19572C72v2Ev();
extern void _ZN8S19572C1D1Ev();
extern void _ZN8S19572C1D0Ev();
extern void _ZN8S19572C62v1Ev();
extern void ABISELECT(_ZTv0_n56_N8S19572C1D1Ev,_ZTv0_n28_N8S19572C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S19572C1D1Ev,_ZThn28_N8S19572C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19572C1D0Ev,_ZTv0_n28_N8S19572C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S19572C1D0Ev,_ZThn28_N8S19572C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n56_N8S19572C1D1Ev,_ZTvn8_n28_N8S19572C1D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S19572C1D0Ev,_ZTvn8_n28_N8S19572C1D0Ev)();
extern void ABISELECT(_ZTvn24_n56_N8S19572C1D1Ev,_ZTvn12_n28_N8S19572C1D1Ev)();
extern void ABISELECT(_ZTvn24_n56_N8S19572C1D0Ev,_ZTvn12_n28_N8S19572C1D0Ev)();
extern void ABISELECT(_ZTv0_n112_N8S19572C1D1Ev,_ZTv0_n56_N8S19572C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S19572C1D1Ev,_ZThn120_N8S19572C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S19572C1D0Ev,_ZTv0_n56_N8S19572C1D0Ev)();
extern void ABISELECT(_ZThn200_N8S19572C1D0Ev,_ZThn120_N8S19572C1D0Ev)() __attribute__((weak));
extern void _ZN8S19572C62v1Ev();
extern void ABISELECT(_ZTv0_n96_N8S19572C1D1Ev,_ZTv0_n48_N8S19572C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S19572C1D1Ev,_ZThn132_N8S19572C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19572C1D0Ev,_ZTv0_n48_N8S19572C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S19572C1D0Ev,_ZThn132_N8S19572C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19572C1D1Ev,_ZTv0_n16_N8S19572C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S19572C1D1Ev,_ZThn144_N8S19572C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19572C1D0Ev,_ZTv0_n16_N8S19572C1D0Ev)();
extern void ABISELECT(_ZThn248_N8S19572C1D0Ev,_ZThn144_N8S19572C1D0Ev)() __attribute__((weak));
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S19572C1D1Ev,_ZTv0_n32_N8S19572C1D1Ev)();
extern void ABISELECT(_ZThn264_N8S19572C1D1Ev,_ZThn152_N8S19572C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19572C1D0Ev,_ZTv0_n32_N8S19572C1D0Ev)();
extern void ABISELECT(_ZThn264_N8S19572C1D0Ev,_ZThn152_N8S19572C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19572C1D1Ev,_ZTv0_n20_N8S19572C1D1Ev)();
extern void ABISELECT(_ZThn320_N8S19572C1D1Ev,_ZThn180_N8S19572C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19572C1D0Ev,_ZTv0_n20_N8S19572C1D0Ev)();
extern void ABISELECT(_ZThn320_N8S19572C1D0Ev,_ZThn180_N8S19572C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N8S19572C1D1Ev,_ZTvn4_n20_N8S19572C1D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S19572C1D0Ev,_ZTvn4_n20_N8S19572C1D0Ev)();
static  VTBL_ENTRY vtc_S19572C1[] = {
  ABISELECT(432,256),
  0,
  ABISELECT(320,180),
  ABISELECT(264,152),
  ABISELECT(200,120),
  ABISELECT(248,144),
  ABISELECT(224,132),
  ABISELECT(200,120),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(196,116),
  0,
  ABISELECT(64,28),
  ABISELECT(16,8),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&_ZN8S19572C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19572C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19572C1D0Ev,
  ABISELECT(24,12),
  0,
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&_ZN8S19572C62v1Ev,
  ABISELECT(-64,-28),
  ABISELECT(132,88),
  ABISELECT(-32,-12),
  ABISELECT(-48,-20),
  ABISELECT(-64,-28),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19572C1D1Ev,_ZTv0_n28_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19572C1D0Ev,_ZTv0_n28_N8S19572C1D0Ev),
  ABISELECT(-48,-20),
  ABISELECT(116,80),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19572C1D1Ev,_ZTvn8_n28_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19572C1D0Ev,_ZTvn8_n28_N8S19572C1D0Ev),
  ABISELECT(-56,-24),
  ABISELECT(-88,-40),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n56_N8S19572C1D1Ev,_ZTvn12_n28_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n56_N8S19572C1D0Ev,_ZTvn12_n28_N8S19572C1D0Ev),
  ABISELECT(-72,-32),
  ABISELECT(-104,-48),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  ABISELECT(8,4),
  ABISELECT(-200,-120),
  ABISELECT(232,136),
  ABISELECT(-200,-120),
  ABISELECT(120,60),
  ABISELECT(64,32),
  ABISELECT(-200,-120),
  0,
  ABISELECT(48,24),
  ABISELECT(24,12),
  ABISELECT(-168,-104),
  ABISELECT(-184,-112),
  -4,
  ABISELECT(-200,-120),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S19572C1D1Ev,_ZTv0_n56_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S19572C1D0Ev,_ZTv0_n56_N8S19572C1D0Ev),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&_ZN8S19572C62v1Ev,
  ABISELECT(-224,-132),
  ABISELECT(-224,-132),
  ABISELECT(24,12),
  ABISELECT(96,48),
  ABISELECT(-24,-12),
  ABISELECT(-28,-16),
  ABISELECT(40,20),
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-192,-116),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19572C1D1Ev,_ZTv0_n48_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19572C1D0Ev,_ZTv0_n48_N8S19572C1D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-240,-140),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  ABISELECT(-248,-144),
  ABISELECT(-216,-128),
  ABISELECT(-248,-144),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19572C1D1Ev,_ZTv0_n16_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19572C1D0Ev,_ZTv0_n16_N8S19572C1D0Ev),
  ABISELECT(-264,-152),
  0,
  ABISELECT(56,28),
  ABISELECT(-64,-32),
  ABISELECT(-68,-36),
  ABISELECT(-232,-136),
  ABISELECT(-264,-152),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19572C1D1Ev,_ZTv0_n32_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19572C1D0Ev,_ZTv0_n32_N8S19572C1D0Ev),
  ABISELECT(-320,-180),
  ABISELECT(-288,-164),
  ABISELECT(-124,-64),
  ABISELECT(-320,-180),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19572C1D1Ev,_ZTv0_n20_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19572C1D0Ev,_ZTv0_n20_N8S19572C1D0Ev),
  ABISELECT(-296,-168),
  ABISELECT(-328,-184),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S19572C1D1Ev,_ZTvn4_n20_N8S19572C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S19572C1D0Ev,_ZTvn4_n20_N8S19572C1D0Ev),
  ABISELECT(-312,-176),
  ABISELECT(-344,-192),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
  ABISELECT(-400,-240),
  ABISELECT(-432,-256),
  (VTBL_ENTRY)&(_ZTI8S19572C1[0]),
};
extern VTBL_ENTRY _ZTV8S19572C1[];
extern void _ZN8S19572C72v2Ev();
extern void _ZN8S19572C7D1Ev();
extern void _ZN8S19572C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19572C7__8S19572C1[] = {
  ABISELECT(196,116),
  0,
  ABISELECT(64,28),
  ABISELECT(16,8),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
  (VTBL_ENTRY)&_ZN8S19572C72v2Ev,
  (VTBL_ENTRY)&_ZN8S19572C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19572C7D0Ev,
};
extern void ABISELECT(_ZTv0_n56_N8S19572C7D1Ev,_ZTv0_n28_N8S19572C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S19572C7D1Ev,_ZThn28_N8S19572C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19572C7D0Ev,_ZTv0_n28_N8S19572C7D0Ev)();
extern void ABISELECT(_ZThn64_N8S19572C7D0Ev,_ZThn28_N8S19572C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19572C8__8S19572C7__8S19572C1[] = {
  ABISELECT(-64,-28),
  ABISELECT(132,88),
  ABISELECT(-32,-12),
  ABISELECT(-48,-20),
  ABISELECT(-64,-28),
  ABISELECT(-64,-28),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19572C7D1Ev,_ZTv0_n28_N8S19572C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19572C7D0Ev,_ZTv0_n28_N8S19572C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__8S19572C7__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
};
extern void ABISELECT(_ZTvn16_n56_N8S19572C7D1Ev,_ZTvn8_n28_N8S19572C7D1Ev)();
extern void ABISELECT(_ZTvn16_n56_N8S19572C7D0Ev,_ZTvn8_n28_N8S19572C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C118S19572C8__8S19572C7__8S19572C1[] = {
  ABISELECT(-48,-20),
  ABISELECT(116,80),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19572C7D1Ev,_ZTvn8_n28_N8S19572C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n56_N8S19572C7D0Ev,_ZTvn8_n28_N8S19572C7D0Ev),
};
extern void ABISELECT(_ZTvn24_n56_N8S19572C7D1Ev,_ZTvn12_n28_N8S19572C7D1Ev)();
extern void ABISELECT(_ZTvn24_n56_N8S19572C7D0Ev,_ZTvn12_n28_N8S19572C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C118S19572C8__8S19572C7__8S19572C1[] = {
  ABISELECT(-56,-24),
  ABISELECT(-88,-40),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n56_N8S19572C7D1Ev,_ZTvn12_n28_N8S19572C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n56_N8S19572C7D0Ev,_ZTvn12_n28_N8S19572C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C118S19572C8__A2__8S19572C7__8S19572C1[] = {
  ABISELECT(-72,-32),
  ABISELECT(-104,-48),
  (VTBL_ENTRY)&(_ZTI8S19572C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C2__8S19572C1[] = {
  ABISELECT(24,12),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C38S19572C2__8S19572C1[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
extern void _ZN8S19572C62v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19572C6__8S19572C2__8S19572C1[] = {
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19572C2[0]),
  (VTBL_ENTRY)&_ZN8S19572C62v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__8S19572C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void _ZN8S19572C8D1Ev();
extern void _ZN8S19572C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19572C8__8S19572C1[] = {
  ABISELECT(132,88),
  ABISELECT(-32,-12),
  ABISELECT(-48,-20),
  ABISELECT(-64,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&_ZN8S19572C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19572C8D0Ev,
};
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C118S19572C8__8S19572C1[] = {
  ABISELECT(-48,-20),
  ABISELECT(116,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C118S19572C8__8S19572C1[] = {
  ABISELECT(116,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C118S19572C8__8S19572C1[] = {
  ABISELECT(-56,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C118S19572C8__A1__8S19572C1[] = {
  ABISELECT(-56,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C118S19572C8__A2__8S19572C1[] = {
  ABISELECT(-72,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C118S19572C8__8S19572C1[] = {
  ABISELECT(-56,-24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C118S19572C8__8S19572C1[] = {
  ABISELECT(-72,-32),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__8S19572C8__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(32,16),
  ABISELECT(64,28),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__8S19572C8__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(48,20),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
};
extern void ABISELECT(_ZThn16_N8S19572C8D1Ev,_ZThn8_N8S19572C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S19572C8D0Ev,_ZThn8_N8S19572C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C11__8S19572C8__8S19572C1[] = {
  ABISELECT(-48,-20),
  ABISELECT(116,80),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19572C8D1Ev,_ZThn8_N8S19572C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19572C8D0Ev,_ZThn8_N8S19572C8D0Ev),
};
extern void ABISELECT(_ZThn24_N8S19572C8D1Ev,_ZThn12_N8S19572C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S19572C8D0Ev,_ZThn12_N8S19572C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__8S19572C8__8S19572C1[] = {
  ABISELECT(-56,-24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19572C8D1Ev,_ZThn12_N8S19572C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19572C8D0Ev,_ZThn12_N8S19572C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A2__8S19572C8__8S19572C1[] = {
  ABISELECT(-72,-32),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19572C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__A1__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__8S19572C3__A1__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19572C3[0]),
};
extern void _ZN9S19572C14D1Ev();
extern void _ZN9S19572C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C14__8S19572C1[] = {
  ABISELECT(232,136),
  ABISELECT(-200,-120),
  ABISELECT(120,60),
  ABISELECT(64,32),
  ABISELECT(-200,-120),
  0,
  ABISELECT(48,24),
  ABISELECT(24,12),
  ABISELECT(-168,-104),
  ABISELECT(-184,-112),
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&_ZN9S19572C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C14D0Ev,
};
extern void _ZN9S19572C15D1Ev();
extern void _ZN9S19572C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(-200,-120),
  ABISELECT(120,60),
  ABISELECT(64,32),
  ABISELECT(-200,-120),
  0,
  ABISELECT(48,24),
  ABISELECT(24,12),
  ABISELECT(-168,-104),
  ABISELECT(-184,-112),
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&_ZN9S19572C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(184,112),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
};
extern void ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn24_N9S19572C15D1Ev,_ZThn12_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn24_N9S19572C15D0Ev,_ZThn12_N9S19572C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C16__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-224,-132),
  ABISELECT(24,12),
  ABISELECT(96,48),
  ABISELECT(-24,-12),
  ABISELECT(-28,-16),
  ABISELECT(40,20),
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-192,-116),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn48_N9S19572C15D1Ev,_ZThn24_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn48_N9S19572C15D0Ev,_ZThn24_N9S19572C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-216,-128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(32,16),
  ABISELECT(200,120),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn64_N9S19572C15D1Ev,_ZThn32_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn64_N9S19572C15D0Ev,_ZThn32_N9S19572C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(-64,-32),
  0,
  ABISELECT(56,28),
  ABISELECT(-64,-32),
  ABISELECT(-68,-36),
  ABISELECT(-232,-136),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev)();
extern void ABISELECT(_ZThn120_N9S19572C15D1Ev,_ZThn60_N9S19572C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev)();
extern void ABISELECT(_ZThn120_N9S19572C15D0Ev,_ZThn60_N9S19572C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(-120,-60),
  ABISELECT(-288,-164),
  ABISELECT(-124,-64),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C15D1Ev,_ZTvn4_n20_N9S19572C15D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C15D0Ev,_ZTvn4_n20_N9S19572C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(-296,-168),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C15D1Ev,_ZTvn4_n20_N9S19572C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C15D0Ev,_ZTvn4_n20_N9S19572C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(-312,-176),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C219S19572C16__9S19572C159S19572C14__8S19572C1[] = {
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C14__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(184,112),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
};
extern void ABISELECT(_ZTv0_n96_N9S19572C14D1Ev,_ZTv0_n48_N9S19572C14D1Ev)();
extern void ABISELECT(_ZThn24_N9S19572C14D1Ev,_ZThn12_N9S19572C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19572C14D0Ev,_ZTv0_n48_N9S19572C14D0Ev)();
extern void ABISELECT(_ZThn24_N9S19572C14D0Ev,_ZThn12_N9S19572C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C16__9S19572C14__8S19572C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-224,-132),
  ABISELECT(24,12),
  ABISELECT(96,48),
  ABISELECT(-24,-12),
  ABISELECT(-28,-16),
  ABISELECT(40,20),
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-192,-116),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C14D1Ev,_ZTv0_n48_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19572C14D0Ev,_ZTv0_n48_N9S19572C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19572C14D1Ev,_ZTv0_n16_N9S19572C14D1Ev)();
extern void ABISELECT(_ZThn48_N9S19572C14D1Ev,_ZThn24_N9S19572C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C14D0Ev,_ZTv0_n16_N9S19572C14D0Ev)();
extern void ABISELECT(_ZThn48_N9S19572C14D0Ev,_ZThn24_N9S19572C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C14__8S19572C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-216,-128),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C14D1Ev,_ZTv0_n16_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C14D0Ev,_ZTv0_n16_N9S19572C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__9S19572C14__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(32,16),
  ABISELECT(200,120),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C14D1Ev,_ZTv0_n32_N9S19572C14D1Ev)();
extern void ABISELECT(_ZThn64_N9S19572C14D1Ev,_ZThn32_N9S19572C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C14D0Ev,_ZTv0_n32_N9S19572C14D0Ev)();
extern void ABISELECT(_ZThn64_N9S19572C14D0Ev,_ZThn32_N9S19572C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C14__8S19572C1[] = {
  ABISELECT(-64,-32),
  0,
  ABISELECT(56,28),
  ABISELECT(-64,-32),
  ABISELECT(-68,-36),
  ABISELECT(-232,-136),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C14D1Ev,_ZTv0_n32_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C14D0Ev,_ZTv0_n32_N9S19572C14D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C14D1Ev,_ZTv0_n20_N9S19572C14D1Ev)();
extern void ABISELECT(_ZThn120_N9S19572C14D1Ev,_ZThn60_N9S19572C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C14D0Ev,_ZTv0_n20_N9S19572C14D0Ev)();
extern void ABISELECT(_ZThn120_N9S19572C14D0Ev,_ZThn60_N9S19572C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C14__8S19572C1[] = {
  ABISELECT(-120,-60),
  ABISELECT(-288,-164),
  ABISELECT(-124,-64),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C14D1Ev,_ZTv0_n20_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C14D0Ev,_ZTv0_n20_N9S19572C14D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C14D1Ev,_ZTvn4_n20_N9S19572C14D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C14D0Ev,_ZTvn4_n20_N9S19572C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C14__8S19572C1[] = {
  ABISELECT(-296,-168),
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C14D1Ev,_ZTvn4_n20_N9S19572C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C14D0Ev,_ZTvn4_n20_N9S19572C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C14__8S19572C1[] = {
  ABISELECT(-312,-176),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C219S19572C16__9S19572C14__8S19572C1[] = {
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C20__9S19572C14__8S19572C1[] = {
  ABISELECT(-400,-240),
  ABISELECT(-232,-136),
  (VTBL_ENTRY)&(_ZTI9S19572C14[0]),
};
extern void _ZN9S19572C16D1Ev();
extern void _ZN9S19572C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C16__8S19572C1[] = {
  ABISELECT(-224,-132),
  ABISELECT(24,12),
  ABISELECT(96,48),
  ABISELECT(-24,-12),
  ABISELECT(-28,-16),
  ABISELECT(40,20),
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-192,-116),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&_ZN9S19572C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C16D0Ev,
};
extern void _ZN9S19572C17D1Ev();
extern void _ZN9S19572C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C179S19572C16__8S19572C1[] = {
  ABISELECT(96,48),
  ABISELECT(-24,-12),
  ABISELECT(-28,-16),
  ABISELECT(40,20),
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-192,-116),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__9S19572C179S19572C16__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(32,16),
  ABISELECT(224,132),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C179S19572C16__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(208,124),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S19572C17D1Ev,_ZThn20_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S19572C17D0Ev,_ZThn20_N9S19572C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C179S19572C16__8S19572C1[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(56,28),
  ABISELECT(-64,-32),
  ABISELECT(-68,-36),
  ABISELECT(-232,-136),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C179S19572C16__8S19572C1[] = {
  -4,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZThn96_N9S19572C17D1Ev,_ZThn48_N9S19572C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev)();
extern void ABISELECT(_ZThn96_N9S19572C17D0Ev,_ZThn48_N9S19572C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C179S19572C16__8S19572C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(-288,-164),
  ABISELECT(-124,-64),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C179S19572C16__8S19572C1[] = {
  ABISELECT(-296,-168),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D1Ev,_ZTvn4_n20_N9S19572C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C17D0Ev,_ZTvn4_n20_N9S19572C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A2__9S19572C179S19572C16__8S19572C1[] = {
  ABISELECT(-312,-176),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C17[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C219S19572C16__8S19572C1[] = {
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__9S19572C219S19572C16__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(224,132),
  (VTBL_ENTRY)&(_ZTI9S19572C21[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn24_N9S19572C16D1Ev,_ZThn12_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn24_N9S19572C16D0Ev,_ZThn12_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C16__8S19572C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-216,-128),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C16__8S19572C1[] = {
  -4,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C3__9S19572C16__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(32,16),
  ABISELECT(224,132),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C16__8S19572C1[] = {
  ABISELECT(16,8),
  ABISELECT(208,124),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn40_N9S19572C16D1Ev,_ZThn20_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn40_N9S19572C16D0Ev,_ZThn20_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C18__9S19572C16__8S19572C1[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(56,28),
  ABISELECT(-64,-32),
  ABISELECT(-68,-36),
  ABISELECT(-232,-136),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev)();
extern void ABISELECT(_ZThn96_N9S19572C16D1Ev,_ZThn48_N9S19572C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev)();
extern void ABISELECT(_ZThn96_N9S19572C16D0Ev,_ZThn48_N9S19572C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C16__8S19572C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(-288,-164),
  ABISELECT(-124,-64),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C16D1Ev,_ZTvn4_n20_N9S19572C16D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C16D0Ev,_ZTvn4_n20_N9S19572C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A1__9S19572C16__8S19572C1[] = {
  ABISELECT(-296,-168),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C16D1Ev,_ZTvn4_n20_N9S19572C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C16D0Ev,_ZTvn4_n20_N9S19572C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A3__9S19572C16__8S19572C1[] = {
  ABISELECT(-312,-176),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C21__9S19572C16__8S19572C1[] = {
  ABISELECT(-224,-132),
  ABISELECT(-208,-124),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19572C16[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C13__A1__8S19572C1[] = {
  ABISELECT(-216,-128),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C13__A3__8S19572C1[] = {
  ABISELECT(-216,-128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__A1__8S19572C1[] = {
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C182v3Ev();
extern void _ZN9S19572C18D1Ev();
extern void _ZN9S19572C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C18__8S19572C1[] = {
  ABISELECT(56,28),
  ABISELECT(-64,-32),
  ABISELECT(-68,-36),
  ABISELECT(-232,-136),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&_ZN9S19572C182v3Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C18D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C18__A6__8S19572C1[] = {
  ABISELECT(-232,-136),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C12__9S19572C18__8S19572C1[] = {
  -4,
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZThn56_N9S19572C18D1Ev,_ZThn28_N9S19572C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev)();
extern void ABISELECT(_ZThn56_N9S19572C18D0Ev,_ZThn28_N9S19572C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19572C11__9S19572C18__8S19572C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-288,-164),
  ABISELECT(-124,-64),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__9S19572C18__8S19572C1[] = {
  ABISELECT(-296,-168),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D1Ev,_ZTvn4_n20_N9S19572C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N9S19572C18D0Ev,_ZTvn4_n20_N9S19572C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A1__9S19572C18__8S19572C1[] = {
  ABISELECT(-312,-176),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI9S19572C18[0]),
};
extern void _ZN9S19572C11D1Ev();
extern void _ZN9S19572C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C11__A1__8S19572C1[] = {
  ABISELECT(-288,-164),
  ABISELECT(-124,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&_ZN9S19572C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19572C129S19572C11__A2__8S19572C1[] = {
  ABISELECT(-124,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C12[0]),
};
extern void _ZN9S19572C13D1Ev();
extern void _ZN9S19572C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19572C139S19572C11__A2__8S19572C1[] = {
  ABISELECT(-296,-168),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C13[0]),
  (VTBL_ENTRY)&_ZN9S19572C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19572C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C139S19572C11__A4__8S19572C1[] = {
  ABISELECT(-296,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19572C49S19572C11__A5__8S19572C1[] = {
  ABISELECT(-312,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S19572C4[0]),
};
extern void ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19572C13__9S19572C11__A1__8S19572C1[] = {
  ABISELECT(-296,-168),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D1Ev,_ZThn4_N9S19572C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N9S19572C11D0Ev,_ZThn4_N9S19572C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19572C4__A1__9S19572C11__A1__8S19572C1[] = {
  ABISELECT(-312,-176),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19572C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19572C20__8S19572C1[] = {
  ABISELECT(-400,-240),
  0,
  (VTBL_ENTRY)&(_ZTI9S19572C20[0]),
};
static  VTT_ENTRY vtt_S19572C1[] = {
  {&(_ZTV8S19572C1[17]),  17,125},
  {&(_tg__ZTV8S19572C7__8S19572C1[7]),  7,10},
  {&(_tg__ZTV8S19572C8__8S19572C7__8S19572C1[7]),  7,9},
  {&(_tg__ZTV8S19572C7__8S19572C1[7]),  7,10},
  {&(_tg__ZTV8S19572C4__8S19572C7__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C118S19572C8__8S19572C7__8S19572C1[4]),  4,6},
  {&(_tg__ZTV9S19572C139S19572C118S19572C8__8S19572C7__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C118S19572C8__A2__8S19572C7__8S19572C1[3]),  3,3},
  {&(_ZTV8S19572C1[25]),  25,125},
  {&(_ZTV8S19572C1[25]),  25,125},
  {&(_ZTV8S19572C1[28]),  28,125},
  {&(_ZTV8S19572C1[36]),  36,125},
  {&(_ZTV8S19572C1[17]),  17,125},
  {&(_ZTV8S19572C1[42]),  42,125},
  {&(_ZTV8S19572C1[47]),  47,125},
  {&(_ZTV8S19572C1[52]),  52,125},
  {&(_ZTV8S19572C1[67]),  67,125},
  {&(_ZTV8S19572C1[84]),  84,125},
  {&(_ZTV8S19572C1[94]),  94,125},
  {&(_ZTV8S19572C1[67]),  67,125},
  {&(_ZTV8S19572C1[104]),  104,125},
  {&(_ZTV8S19572C1[112]),  112,125},
  {&(_ZTV8S19572C1[117]),  117,125},
  {&(_ZTV8S19572C1[122]),  122,125},
  {&(_ZTV8S19572C1[90]),  90,125},
  {&(_ZTV8S19572C1[71]),  71,125},
  {&(_ZTV8S19572C1[125]),  125,125},
  {&(_tg__ZTV8S19572C2__8S19572C1[5]),  5,5},
  {&(_tg__ZTV8S19572C38S19572C2__8S19572C1[4]),  4,4},
  {&(_tg__ZTV8S19572C38S19572C2__8S19572C1[4]),  4,4},
  {&(_tg__ZTV8S19572C2__8S19572C1[5]),  5,5},
  {&(_tg__ZTV8S19572C6__8S19572C2__8S19572C1[3]),  3,4},
  {&(_tg__ZTV8S19572C4__8S19572C1[3]),  3,3},
  {&(_tg__ZTV8S19572C8__8S19572C1[6]),  6,8},
  {&(_tg__ZTV9S19572C118S19572C8__8S19572C1[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C118S19572C8__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C118S19572C8__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C118S19572C8__A1__8S19572C1[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C118S19572C8__A2__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C118S19572C8__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C118S19572C8__8S19572C1[3]),  3,3},
  {&(_tg__ZTV8S19572C3__8S19572C8__8S19572C1[4]),  4,4},
  {&(_tg__ZTV8S19572C4__8S19572C8__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C11__8S19572C8__8S19572C1[4]),  4,6},
  {&(_tg__ZTV9S19572C139S19572C11__8S19572C8__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A2__8S19572C8__8S19572C1[3]),  3,3},
  {&(_tg__ZTV8S19572C3__A1__8S19572C1[4]),  4,4},
  {&(_tg__ZTV8S19572C4__8S19572C3__A1__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C14__8S19572C1[13]),  13,15},
  {&(_tg__ZTV9S19572C159S19572C14__8S19572C1[12]),  12,14},
  {&(_tg__ZTV8S19572C4__9S19572C159S19572C14__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C16__9S19572C159S19572C14__8S19572C1[12]),  12,14},
  {&(_tg__ZTV9S19572C13__9S19572C159S19572C14__8S19572C1[4]),  4,6},
  {&(_tg__ZTV9S19572C159S19572C14__8S19572C1[12]),  12,14},
  {&(_tg__ZTV8S19572C3__9S19572C159S19572C14__8S19572C1[4]),  4,4},
  {&(_tg__ZTV9S19572C18__9S19572C159S19572C14__8S19572C1[8]),  8,11},
  {&(_tg__ZTV9S19572C11__9S19572C159S19572C14__8S19572C1[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C159S19572C14__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C159S19572C14__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C219S19572C16__9S19572C159S19572C14__8S19572C1[4]),  4,4},
  {&(_tg__ZTV8S19572C4__9S19572C14__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C16__9S19572C14__8S19572C1[12]),  12,14},
  {&(_tg__ZTV9S19572C13__9S19572C14__8S19572C1[4]),  4,6},
  {&(_tg__ZTV9S19572C14__8S19572C1[13]),  13,15},
  {&(_tg__ZTV8S19572C3__9S19572C14__8S19572C1[4]),  4,4},
  {&(_tg__ZTV9S19572C18__9S19572C14__8S19572C1[8]),  8,11},
  {&(_tg__ZTV9S19572C11__9S19572C14__8S19572C1[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C14__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C14__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C219S19572C16__9S19572C14__8S19572C1[4]),  4,4},
  {&(_tg__ZTV9S19572C20__9S19572C14__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C16__8S19572C1[11]),  11,13},
  {&(_tg__ZTV9S19572C179S19572C16__8S19572C1[9]),  9,11},
  {&(_tg__ZTV8S19572C3__9S19572C179S19572C16__8S19572C1[4]),  4,4},
  {&(_tg__ZTV8S19572C4__9S19572C179S19572C16__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C18__9S19572C179S19572C16__8S19572C1[8]),  8,11},
  {&(_tg__ZTV9S19572C12__9S19572C179S19572C16__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C179S19572C16__8S19572C1[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C179S19572C16__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A2__9S19572C179S19572C16__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C219S19572C16__8S19572C1[4]),  4,4},
  {&(_tg__ZTV8S19572C4__9S19572C219S19572C16__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C16__8S19572C1[4]),  4,6},
  {&(_tg__ZTV9S19572C12__9S19572C16__8S19572C1[3]),  3,3},
  {&(_tg__ZTV8S19572C3__9S19572C16__8S19572C1[4]),  4,4},
  {&(_tg__ZTV8S19572C4__A1__9S19572C16__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C18__9S19572C16__8S19572C1[8]),  8,11},
  {&(_tg__ZTV9S19572C11__9S19572C16__8S19572C1[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__A1__9S19572C16__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A3__9S19572C16__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C21__9S19572C16__8S19572C1[4]),  4,4},
  {&(_tg__ZTV9S19572C13__A1__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C13__A3__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C12__A1__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C18__8S19572C1[6]),  6,9},
  {&(_tg__ZTV8S19572C49S19572C18__A6__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C12__9S19572C18__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C11__9S19572C18__8S19572C1[5]),  5,7},
  {&(_tg__ZTV9S19572C139S19572C11__9S19572C18__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C11__A1__9S19572C18__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C11__A1__8S19572C1[4]),  4,6},
  {&(_tg__ZTV9S19572C129S19572C11__A2__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C139S19572C11__A2__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C49S19572C139S19572C11__A4__8S19572C1[3]),  3,3},
  {&(_tg__ZTV8S19572C49S19572C11__A5__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C13__9S19572C11__A1__8S19572C1[3]),  3,5},
  {&(_tg__ZTV8S19572C4__A1__9S19572C11__A1__8S19572C1[3]),  3,3},
  {&(_tg__ZTV9S19572C20__8S19572C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19572C1[];
extern  VTBL_ENTRY _ZTV8S19572C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19572C1[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D0Ev,_ZTv0_n20_N9S19572C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C18D0Ev,_ZThn28_N9S19572C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C18D1Ev,_ZTv0_n20_N9S19572C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S19572C18D1Ev,_ZThn28_N9S19572C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C16D0Ev,_ZTv0_n20_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19572C16D0Ev,_ZThn48_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C16D1Ev,_ZTv0_n20_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19572C16D1Ev,_ZThn48_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C16D0Ev,_ZTv0_n32_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C16D0Ev,_ZThn20_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C16D1Ev,_ZTv0_n32_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C16D1Ev,_ZThn20_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C16D0Ev,_ZTv0_n16_N9S19572C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C16D0Ev,_ZThn12_N9S19572C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C16D1Ev,_ZTv0_n16_N9S19572C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C16D1Ev,_ZThn12_N9S19572C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D0Ev,_ZTv0_n20_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19572C17D0Ev,_ZThn48_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C17D1Ev,_ZTv0_n20_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S19572C17D1Ev,_ZThn48_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D0Ev,_ZTv0_n32_N9S19572C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C17D0Ev,_ZThn20_N9S19572C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C17D1Ev,_ZTv0_n32_N9S19572C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S19572C17D1Ev,_ZThn20_N9S19572C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C14D0Ev,_ZTv0_n20_N9S19572C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19572C14D0Ev,_ZThn60_N9S19572C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C14D1Ev,_ZTv0_n20_N9S19572C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19572C14D1Ev,_ZThn60_N9S19572C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C14D0Ev,_ZTv0_n32_N9S19572C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C14D0Ev,_ZThn32_N9S19572C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C14D1Ev,_ZTv0_n32_N9S19572C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C14D1Ev,_ZThn32_N9S19572C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C14D0Ev,_ZTv0_n16_N9S19572C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C14D0Ev,_ZThn24_N9S19572C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C14D1Ev,_ZTv0_n16_N9S19572C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C14D1Ev,_ZThn24_N9S19572C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C14D0Ev,_ZTv0_n48_N9S19572C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C14D0Ev,_ZThn12_N9S19572C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C14D1Ev,_ZTv0_n48_N9S19572C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C14D1Ev,_ZThn12_N9S19572C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C15D0Ev,_ZTv0_n20_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19572C15D0Ev,_ZThn60_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19572C15D1Ev,_ZTv0_n20_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19572C15D1Ev,_ZThn60_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C15D0Ev,_ZTv0_n32_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C15D0Ev,_ZThn32_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19572C15D1Ev,_ZTv0_n32_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19572C15D1Ev,_ZThn32_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C15D0Ev,_ZTv0_n16_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C15D0Ev,_ZThn24_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19572C15D1Ev,_ZTv0_n16_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19572C15D1Ev,_ZThn24_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C15D0Ev,_ZTv0_n48_N9S19572C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C15D0Ev,_ZThn12_N9S19572C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19572C15D1Ev,_ZTv0_n48_N9S19572C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S19572C15D1Ev,_ZThn12_N9S19572C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19572C7D0Ev,_ZTv0_n28_N8S19572C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19572C7D0Ev,_ZThn28_N8S19572C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19572C7D1Ev,_ZTv0_n28_N8S19572C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19572C7D1Ev,_ZThn28_N8S19572C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19572C1D0Ev,_ZTv0_n20_N8S19572C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19572C1D0Ev,_ZThn180_N8S19572C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19572C1D1Ev,_ZTv0_n20_N8S19572C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S19572C1D1Ev,_ZThn180_N8S19572C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19572C1D0Ev,_ZTv0_n32_N8S19572C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19572C1D0Ev,_ZThn152_N8S19572C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19572C1D1Ev,_ZTv0_n32_N8S19572C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S19572C1D1Ev,_ZThn152_N8S19572C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19572C1D0Ev,_ZTv0_n16_N8S19572C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19572C1D0Ev,_ZThn144_N8S19572C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19572C1D1Ev,_ZTv0_n16_N8S19572C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S19572C1D1Ev,_ZThn144_N8S19572C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19572C1D0Ev,_ZTv0_n48_N8S19572C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19572C1D0Ev,_ZThn132_N8S19572C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19572C1D1Ev,_ZTv0_n48_N8S19572C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S19572C1D1Ev,_ZThn132_N8S19572C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S19572C1D0Ev,_ZTv0_n56_N8S19572C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S19572C1D0Ev,_ZThn120_N8S19572C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S19572C1D1Ev,_ZTv0_n56_N8S19572C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S19572C1D1Ev,_ZThn120_N8S19572C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19572C1D0Ev,_ZTv0_n28_N8S19572C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19572C1D0Ev,_ZThn28_N8S19572C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19572C1D1Ev,_ZTv0_n28_N8S19572C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19572C1D1Ev,_ZThn28_N8S19572C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19572C1 = {  "S19572C1", // class name
  bases_S19572C1, 43,
  &(vtc_S19572C1[0]), // expected_vtbl_contents
  &(vtt_S19572C1[0]), // expected_vtt_contents
  ABISELECT(448,260), // object size
  NSPAIRA(_ZTI8S19572C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19572C1),125, //virtual function table var
  17, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19572C1),108, //virtual table table var
  30, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4266C3_nt  {
  virtual  ~S4266C3_nt(); // _ZN10S4266C3_ntD1Ev
  virtual void  v14(); // _ZN10S4266C3_nt3v14Ev
  virtual void  v15(); // _ZN10S4266C3_nt3v15Ev
  virtual void  v16(); // _ZN10S4266C3_nt3v16Ev
  virtual void  v17(); // _ZN10S4266C3_nt3v17Ev
  virtual void  v18(); // _ZN10S4266C3_nt3v18Ev
  virtual void  v19(); // _ZN10S4266C3_nt3v19Ev
  virtual void  v20(); // _ZN10S4266C3_nt3v20Ev
  virtual void  v21(); // _ZN10S4266C3_nt3v21Ev
  virtual void  v22(); // _ZN10S4266C3_nt3v22Ev
  virtual void  v23(); // _ZN10S4266C3_nt3v23Ev
  virtual void  v24(); // _ZN10S4266C3_nt3v24Ev
  virtual void  v25(); // _ZN10S4266C3_nt3v25Ev
  virtual void  v26(); // _ZN10S4266C3_nt3v26Ev
  virtual void  v27(); // _ZN10S4266C3_nt3v27Ev
  virtual void  v28(); // _ZN10S4266C3_nt3v28Ev
  virtual void  v29(); // _ZN10S4266C3_nt3v29Ev
  virtual void  v30(); // _ZN10S4266C3_nt3v30Ev
  virtual void  v31(); // _ZN10S4266C3_nt3v31Ev
  virtual void  v32(); // _ZN10S4266C3_nt3v32Ev
  virtual void  v33(); // _ZN10S4266C3_nt3v33Ev
  virtual void  v34(); // _ZN10S4266C3_nt3v34Ev
  virtual void  v35(); // _ZN10S4266C3_nt3v35Ev
  virtual void  v36(); // _ZN10S4266C3_nt3v36Ev
  virtual void  v37(); // _ZN10S4266C3_nt3v37Ev
  virtual void  v38(); // _ZN10S4266C3_nt3v38Ev
  virtual void  v39(); // _ZN10S4266C3_nt3v39Ev
  S4266C3_nt(); // tgen
};
//SIG(-1 S4266C3_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}


 S4266C3_nt ::~S4266C3_nt(){ note_dtor("S4266C3_nt", this);}
void  S4266C3_nt ::v14(){vfunc_called(this, "_ZN10S4266C3_nt3v14Ev");}
void  S4266C3_nt ::v15(){vfunc_called(this, "_ZN10S4266C3_nt3v15Ev");}
void  S4266C3_nt ::v16(){vfunc_called(this, "_ZN10S4266C3_nt3v16Ev");}
void  S4266C3_nt ::v17(){vfunc_called(this, "_ZN10S4266C3_nt3v17Ev");}
void  S4266C3_nt ::v18(){vfunc_called(this, "_ZN10S4266C3_nt3v18Ev");}
void  S4266C3_nt ::v19(){vfunc_called(this, "_ZN10S4266C3_nt3v19Ev");}
void  S4266C3_nt ::v20(){vfunc_called(this, "_ZN10S4266C3_nt3v20Ev");}
void  S4266C3_nt ::v21(){vfunc_called(this, "_ZN10S4266C3_nt3v21Ev");}
void  S4266C3_nt ::v22(){vfunc_called(this, "_ZN10S4266C3_nt3v22Ev");}
void  S4266C3_nt ::v23(){vfunc_called(this, "_ZN10S4266C3_nt3v23Ev");}
void  S4266C3_nt ::v24(){vfunc_called(this, "_ZN10S4266C3_nt3v24Ev");}
void  S4266C3_nt ::v25(){vfunc_called(this, "_ZN10S4266C3_nt3v25Ev");}
void  S4266C3_nt ::v26(){vfunc_called(this, "_ZN10S4266C3_nt3v26Ev");}
void  S4266C3_nt ::v27(){vfunc_called(this, "_ZN10S4266C3_nt3v27Ev");}
void  S4266C3_nt ::v28(){vfunc_called(this, "_ZN10S4266C3_nt3v28Ev");}
void  S4266C3_nt ::v29(){vfunc_called(this, "_ZN10S4266C3_nt3v29Ev");}
void  S4266C3_nt ::v30(){vfunc_called(this, "_ZN10S4266C3_nt3v30Ev");}
void  S4266C3_nt ::v31(){vfunc_called(this, "_ZN10S4266C3_nt3v31Ev");}
void  S4266C3_nt ::v32(){vfunc_called(this, "_ZN10S4266C3_nt3v32Ev");}
void  S4266C3_nt ::v33(){vfunc_called(this, "_ZN10S4266C3_nt3v33Ev");}
void  S4266C3_nt ::v34(){vfunc_called(this, "_ZN10S4266C3_nt3v34Ev");}
void  S4266C3_nt ::v35(){vfunc_called(this, "_ZN10S4266C3_nt3v35Ev");}
void  S4266C3_nt ::v36(){vfunc_called(this, "_ZN10S4266C3_nt3v36Ev");}
void  S4266C3_nt ::v37(){vfunc_called(this, "_ZN10S4266C3_nt3v37Ev");}
void  S4266C3_nt ::v38(){vfunc_called(this, "_ZN10S4266C3_nt3v38Ev");}
void  S4266C3_nt ::v39(){vfunc_called(this, "_ZN10S4266C3_nt3v39Ev");}
S4266C3_nt ::S4266C3_nt(){ note_ctor("S4266C3_nt", this);} // tgen

//skip512 S4266C3_nt

#else // __cplusplus

extern void _ZN10S4266C3_ntC1Ev();
extern void _ZN10S4266C3_ntD1Ev();
Name_Map name_map_S4266C3_nt[] = {
  NSPAIR(_ZN10S4266C3_ntC1Ev),
  NSPAIR(_ZN10S4266C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4266C3_nt[];
extern void _ZN10S4266C3_ntD1Ev();
extern void _ZN10S4266C3_ntD0Ev();
extern void _ZN10S4266C3_nt3v14Ev();
extern void _ZN10S4266C3_nt3v15Ev();
extern void _ZN10S4266C3_nt3v16Ev();
extern void _ZN10S4266C3_nt3v17Ev();
extern void _ZN10S4266C3_nt3v18Ev();
extern void _ZN10S4266C3_nt3v19Ev();
extern void _ZN10S4266C3_nt3v20Ev();
extern void _ZN10S4266C3_nt3v21Ev();
extern void _ZN10S4266C3_nt3v22Ev();
extern void _ZN10S4266C3_nt3v23Ev();
extern void _ZN10S4266C3_nt3v24Ev();
extern void _ZN10S4266C3_nt3v25Ev();
extern void _ZN10S4266C3_nt3v26Ev();
extern void _ZN10S4266C3_nt3v27Ev();
extern void _ZN10S4266C3_nt3v28Ev();
extern void _ZN10S4266C3_nt3v29Ev();
extern void _ZN10S4266C3_nt3v30Ev();
extern void _ZN10S4266C3_nt3v31Ev();
extern void _ZN10S4266C3_nt3v32Ev();
extern void _ZN10S4266C3_nt3v33Ev();
extern void _ZN10S4266C3_nt3v34Ev();
extern void _ZN10S4266C3_nt3v35Ev();
extern void _ZN10S4266C3_nt3v36Ev();
extern void _ZN10S4266C3_nt3v37Ev();
extern void _ZN10S4266C3_nt3v38Ev();
extern void _ZN10S4266C3_nt3v39Ev();
static  VTBL_ENTRY vtc_S4266C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4266C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4266C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v39Ev,
};
extern VTBL_ENTRY _ZTI10S4266C3_nt[];
VTBL_ENTRY *P__ZTI10S4266C3_nt = _ZTI10S4266C3_nt; 
extern  VTBL_ENTRY _ZTV10S4266C3_nt[];
Class_Descriptor cd_S4266C3_nt = {  "S4266C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4266C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4266C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4266C3_nt),30, //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  S4266C4_nt  {
  int s4266c4f0[2];
};
//SIG(-1 S4266C4_nt) C1{ Fi[2]}



//skip512 S4266C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4266C2_nt  : S4266C3_nt {
  void *s4266c2f0[2];
  int s4266c2f1[4];
  ::S4266C4_nt s4266c2f2;
  void *s4266c2f3;
  char s4266c2f4;
  void *s4266c2f5;
  virtual  ~S4266C2_nt(); // _ZN10S4266C2_ntD1Ev
  virtual void  v40(); // _ZN10S4266C2_nt3v40Ev
  virtual void  v41(); // _ZN10S4266C2_nt3v41Ev
  virtual void  v42(); // _ZN10S4266C2_nt3v42Ev
  virtual void  v43(); // _ZN10S4266C2_nt3v43Ev
  virtual void  v44(); // _ZN10S4266C2_nt3v44Ev
  virtual void  v45(); // _ZN10S4266C2_nt3v45Ev
  virtual void  v46(); // _ZN10S4266C2_nt3v46Ev
  virtual void  v47(); // _ZN10S4266C2_nt3v47Ev
  virtual void  v48(); // _ZN10S4266C2_nt3v48Ev
  virtual void  v49(); // _ZN10S4266C2_nt3v49Ev
  virtual void  v50(); // _ZN10S4266C2_nt3v50Ev
  virtual void  v51(); // _ZN10S4266C2_nt3v51Ev
  virtual void  v52(); // _ZN10S4266C2_nt3v52Ev
  virtual void  v53(); // _ZN10S4266C2_nt3v53Ev
  S4266C2_nt(); // tgen
};
//SIG(-1 S4266C2_nt) C1{ BC2{ 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} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[2] Fi[4] FC3{ Fi[2]} Fp Fc Fp}


 S4266C2_nt ::~S4266C2_nt(){ note_dtor("S4266C2_nt", this);}
void  S4266C2_nt ::v40(){vfunc_called(this, "_ZN10S4266C2_nt3v40Ev");}
void  S4266C2_nt ::v41(){vfunc_called(this, "_ZN10S4266C2_nt3v41Ev");}
void  S4266C2_nt ::v42(){vfunc_called(this, "_ZN10S4266C2_nt3v42Ev");}
void  S4266C2_nt ::v43(){vfunc_called(this, "_ZN10S4266C2_nt3v43Ev");}
void  S4266C2_nt ::v44(){vfunc_called(this, "_ZN10S4266C2_nt3v44Ev");}
void  S4266C2_nt ::v45(){vfunc_called(this, "_ZN10S4266C2_nt3v45Ev");}
void  S4266C2_nt ::v46(){vfunc_called(this, "_ZN10S4266C2_nt3v46Ev");}
void  S4266C2_nt ::v47(){vfunc_called(this, "_ZN10S4266C2_nt3v47Ev");}
void  S4266C2_nt ::v48(){vfunc_called(this, "_ZN10S4266C2_nt3v48Ev");}
void  S4266C2_nt ::v49(){vfunc_called(this, "_ZN10S4266C2_nt3v49Ev");}
void  S4266C2_nt ::v50(){vfunc_called(this, "_ZN10S4266C2_nt3v50Ev");}
void  S4266C2_nt ::v51(){vfunc_called(this, "_ZN10S4266C2_nt3v51Ev");}
void  S4266C2_nt ::v52(){vfunc_called(this, "_ZN10S4266C2_nt3v52Ev");}
void  S4266C2_nt ::v53(){vfunc_called(this, "_ZN10S4266C2_nt3v53Ev");}
S4266C2_nt ::S4266C2_nt(){ note_ctor("S4266C2_nt", this);} // tgen

//skip512 S4266C2_nt

#else // __cplusplus

extern void _ZN10S4266C2_ntC1Ev();
extern void _ZN10S4266C2_ntD1Ev();
Name_Map name_map_S4266C2_nt[] = {
  NSPAIR(_ZN10S4266C2_ntC1Ev),
  NSPAIR(_ZN10S4266C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4266C3_nt;
extern VTBL_ENTRY _ZTI10S4266C3_nt[];
extern  VTBL_ENTRY _ZTV10S4266C3_nt[];
static Base_Class bases_S4266C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4266C3_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 _ZTI10S4266C2_nt[];
extern void _ZN10S4266C2_ntD1Ev();
extern void _ZN10S4266C2_ntD0Ev();
extern void _ZN10S4266C3_nt3v14Ev();
extern void _ZN10S4266C3_nt3v15Ev();
extern void _ZN10S4266C3_nt3v16Ev();
extern void _ZN10S4266C3_nt3v17Ev();
extern void _ZN10S4266C3_nt3v18Ev();
extern void _ZN10S4266C3_nt3v19Ev();
extern void _ZN10S4266C3_nt3v20Ev();
extern void _ZN10S4266C3_nt3v21Ev();
extern void _ZN10S4266C3_nt3v22Ev();
extern void _ZN10S4266C3_nt3v23Ev();
extern void _ZN10S4266C3_nt3v24Ev();
extern void _ZN10S4266C3_nt3v25Ev();
extern void _ZN10S4266C3_nt3v26Ev();
extern void _ZN10S4266C3_nt3v27Ev();
extern void _ZN10S4266C3_nt3v28Ev();
extern void _ZN10S4266C3_nt3v29Ev();
extern void _ZN10S4266C3_nt3v30Ev();
extern void _ZN10S4266C3_nt3v31Ev();
extern void _ZN10S4266C3_nt3v32Ev();
extern void _ZN10S4266C3_nt3v33Ev();
extern void _ZN10S4266C3_nt3v34Ev();
extern void _ZN10S4266C3_nt3v35Ev();
extern void _ZN10S4266C3_nt3v36Ev();
extern void _ZN10S4266C3_nt3v37Ev();
extern void _ZN10S4266C3_nt3v38Ev();
extern void _ZN10S4266C3_nt3v39Ev();
extern void _ZN10S4266C2_nt3v40Ev();
extern void _ZN10S4266C2_nt3v41Ev();
extern void _ZN10S4266C2_nt3v42Ev();
extern void _ZN10S4266C2_nt3v43Ev();
extern void _ZN10S4266C2_nt3v44Ev();
extern void _ZN10S4266C2_nt3v45Ev();
extern void _ZN10S4266C2_nt3v46Ev();
extern void _ZN10S4266C2_nt3v47Ev();
extern void _ZN10S4266C2_nt3v48Ev();
extern void _ZN10S4266C2_nt3v49Ev();
extern void _ZN10S4266C2_nt3v50Ev();
extern void _ZN10S4266C2_nt3v51Ev();
extern void _ZN10S4266C2_nt3v52Ev();
extern void _ZN10S4266C2_nt3v53Ev();
static  VTBL_ENTRY vtc_S4266C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4266C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4266C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v53Ev,
};
extern VTBL_ENTRY _ZTI10S4266C2_nt[];
VTBL_ENTRY *P__ZTI10S4266C2_nt = _ZTI10S4266C2_nt; 
extern  VTBL_ENTRY _ZTV10S4266C2_nt[];
Class_Descriptor cd_S4266C2_nt = {  "S4266C2_nt", // class name
  bases_S4266C2_nt, 1,
  &(vtc_S4266C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI10S4266C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4266C2_nt),44, //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  S4266C5_nt  {
  void *s4266c5f0;
  char s4266c5f1[32];
  int s4266c5f2[6];
  char s4266c5f3;
  int s4266c5f4[2];
  virtual  ~S4266C5_nt(); // _ZN10S4266C5_ntD1Ev
  virtual void  v54(); // _ZN10S4266C5_nt3v54Ev
  virtual void  v55(); // _ZN10S4266C5_nt3v55Ev
  S4266C5_nt(); // tgen
};
//SIG(-1 S4266C5_nt) C1{ vd v1 v2 Fp Fc[32] Fi[6] Fc Fi[2]}


 S4266C5_nt ::~S4266C5_nt(){ note_dtor("S4266C5_nt", this);}
void  S4266C5_nt ::v54(){vfunc_called(this, "_ZN10S4266C5_nt3v54Ev");}
void  S4266C5_nt ::v55(){vfunc_called(this, "_ZN10S4266C5_nt3v55Ev");}
S4266C5_nt ::S4266C5_nt(){ note_ctor("S4266C5_nt", this);} // tgen

//skip512 S4266C5_nt

#else // __cplusplus

extern void _ZN10S4266C5_ntC1Ev();
extern void _ZN10S4266C5_ntD1Ev();
Name_Map name_map_S4266C5_nt[] = {
  NSPAIR(_ZN10S4266C5_ntC1Ev),
  NSPAIR(_ZN10S4266C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4266C5_nt[];
extern void _ZN10S4266C5_ntD1Ev();
extern void _ZN10S4266C5_ntD0Ev();
extern void _ZN10S4266C5_nt3v54Ev();
extern void _ZN10S4266C5_nt3v55Ev();
static  VTBL_ENTRY vtc_S4266C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4266C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S4266C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4266C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4266C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S4266C5_nt3v55Ev,
};
extern VTBL_ENTRY _ZTI10S4266C5_nt[];
VTBL_ENTRY *P__ZTI10S4266C5_nt = _ZTI10S4266C5_nt; 
extern  VTBL_ENTRY _ZTV10S4266C5_nt[];
Class_Descriptor cd_S4266C5_nt = {  "S4266C5_nt", // class name
  0,0,//no base classes
  &(vtc_S4266C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,76), // object size
  NSPAIRA(_ZTI10S4266C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4266C5_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  S4266C1  : S4266C2_nt , S4266C5_nt {
  void *s4266c1f0[2];
  int s4266c1f1[3];
  virtual  ~S4266C1(); // _ZN7S4266C1D1Ev
  virtual void  v1(); // _ZN7S4266C12v1Ev
  virtual void  v2(); // _ZN7S4266C12v2Ev
  virtual void  v3(); // _ZN7S4266C12v3Ev
  virtual void  v4(); // _ZN7S4266C12v4Ev
  virtual void  v5(); // _ZN7S4266C12v5Ev
  virtual void  v6(); // _ZN7S4266C12v6Ev
  virtual void  v7(); // _ZN7S4266C12v7Ev
  virtual void  v8(); // _ZN7S4266C12v8Ev
  virtual void  v9(); // _ZN7S4266C12v9Ev
  virtual void  v10(); // _ZN7S4266C13v10Ev
  virtual void  v11(); // _ZN7S4266C13v11Ev
  virtual void  v12(); // _ZN7S4266C13v12Ev
  virtual void  v13(); // _ZN7S4266C13v13Ev
  S4266C1(); // tgen
};
//SIG(1 S4266C1) C1{ BC2{ BC3{ vd 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} vd v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 Fp[2] Fi[4] FC4{ Fi[2]} Fp Fc Fp} BC5{ vd v54 v55 Fp Fc[32] Fi[6] Fc Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp[2] Fi[3]}


 S4266C1 ::~S4266C1(){ note_dtor("S4266C1", this);}
void  S4266C1 ::v1(){vfunc_called(this, "_ZN7S4266C12v1Ev");}
void  S4266C1 ::v2(){vfunc_called(this, "_ZN7S4266C12v2Ev");}
void  S4266C1 ::v3(){vfunc_called(this, "_ZN7S4266C12v3Ev");}
void  S4266C1 ::v4(){vfunc_called(this, "_ZN7S4266C12v4Ev");}
void  S4266C1 ::v5(){vfunc_called(this, "_ZN7S4266C12v5Ev");}
void  S4266C1 ::v6(){vfunc_called(this, "_ZN7S4266C12v6Ev");}
void  S4266C1 ::v7(){vfunc_called(this, "_ZN7S4266C12v7Ev");}
void  S4266C1 ::v8(){vfunc_called(this, "_ZN7S4266C12v8Ev");}
void  S4266C1 ::v9(){vfunc_called(this, "_ZN7S4266C12v9Ev");}
void  S4266C1 ::v10(){vfunc_called(this, "_ZN7S4266C13v10Ev");}
void  S4266C1 ::v11(){vfunc_called(this, "_ZN7S4266C13v11Ev");}
void  S4266C1 ::v12(){vfunc_called(this, "_ZN7S4266C13v12Ev");}
void  S4266C1 ::v13(){vfunc_called(this, "_ZN7S4266C13v13Ev");}
S4266C1 ::S4266C1(){ note_ctor("S4266C1", this);} // tgen

static void Test_S4266C1()
{
  extern Class_Descriptor cd_S4266C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,37)];
    init_test(&cd_S4266C1, buf);
    S4266C1 *dp, &lv = *(dp=new (buf) S4266C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,144), "sizeof(S4266C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4266C1)");
    check_base_class_offset(lv, (S4266C3_nt*)(S4266C2_nt*), 0, "S4266C1");
    check_base_class_offset(lv, (S4266C2_nt*), 0, "S4266C1");
    check_base_class_offset(lv, (S4266C5_nt*), ABISELECT(72,48), "S4266C1");
    check_field_offset(lv, s4266c1f0, ABISELECT(160,124), "S4266C1.s4266c1f0");
    check_field_offset(lv, s4266c1f1, ABISELECT(176,132), "S4266C1.s4266c1f1");
    test_class_info(&lv, &cd_S4266C1);
    dp->~S4266C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4266C1(Test_S4266C1, "S4266C1", ABISELECT(192,144));

#else // __cplusplus

extern void _ZN7S4266C1C1Ev();
extern void _ZN7S4266C1D1Ev();
Name_Map name_map_S4266C1[] = {
  NSPAIR(_ZN7S4266C1C1Ev),
  NSPAIR(_ZN7S4266C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4266C3_nt;
extern VTBL_ENTRY _ZTI10S4266C3_nt[];
extern  VTBL_ENTRY _ZTV10S4266C3_nt[];
extern Class_Descriptor cd_S4266C2_nt;
extern VTBL_ENTRY _ZTI10S4266C2_nt[];
extern  VTBL_ENTRY _ZTV10S4266C2_nt[];
extern Class_Descriptor cd_S4266C5_nt;
extern VTBL_ENTRY _ZTI10S4266C5_nt[];
extern  VTBL_ENTRY _ZTV10S4266C5_nt[];
static Base_Class bases_S4266C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4266C3_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_S4266C2_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},
  {&cd_S4266C5_nt,    ABISELECT(72,48), //bcp->offset
    57, //bcp->virtual_function_table_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 _ZTI7S4266C1[];
extern void _ZN7S4266C1D1Ev();
extern void _ZN7S4266C1D0Ev();
extern void _ZN10S4266C3_nt3v14Ev();
extern void _ZN10S4266C3_nt3v15Ev();
extern void _ZN10S4266C3_nt3v16Ev();
extern void _ZN10S4266C3_nt3v17Ev();
extern void _ZN10S4266C3_nt3v18Ev();
extern void _ZN10S4266C3_nt3v19Ev();
extern void _ZN10S4266C3_nt3v20Ev();
extern void _ZN10S4266C3_nt3v21Ev();
extern void _ZN10S4266C3_nt3v22Ev();
extern void _ZN10S4266C3_nt3v23Ev();
extern void _ZN10S4266C3_nt3v24Ev();
extern void _ZN10S4266C3_nt3v25Ev();
extern void _ZN10S4266C3_nt3v26Ev();
extern void _ZN10S4266C3_nt3v27Ev();
extern void _ZN10S4266C3_nt3v28Ev();
extern void _ZN10S4266C3_nt3v29Ev();
extern void _ZN10S4266C3_nt3v30Ev();
extern void _ZN10S4266C3_nt3v31Ev();
extern void _ZN10S4266C3_nt3v32Ev();
extern void _ZN10S4266C3_nt3v33Ev();
extern void _ZN10S4266C3_nt3v34Ev();
extern void _ZN10S4266C3_nt3v35Ev();
extern void _ZN10S4266C3_nt3v36Ev();
extern void _ZN10S4266C3_nt3v37Ev();
extern void _ZN10S4266C3_nt3v38Ev();
extern void _ZN10S4266C3_nt3v39Ev();
extern void _ZN10S4266C2_nt3v40Ev();
extern void _ZN10S4266C2_nt3v41Ev();
extern void _ZN10S4266C2_nt3v42Ev();
extern void _ZN10S4266C2_nt3v43Ev();
extern void _ZN10S4266C2_nt3v44Ev();
extern void _ZN10S4266C2_nt3v45Ev();
extern void _ZN10S4266C2_nt3v46Ev();
extern void _ZN10S4266C2_nt3v47Ev();
extern void _ZN10S4266C2_nt3v48Ev();
extern void _ZN10S4266C2_nt3v49Ev();
extern void _ZN10S4266C2_nt3v50Ev();
extern void _ZN10S4266C2_nt3v51Ev();
extern void _ZN10S4266C2_nt3v52Ev();
extern void _ZN10S4266C2_nt3v53Ev();
extern void _ZN7S4266C12v1Ev();
extern void _ZN7S4266C12v2Ev();
extern void _ZN7S4266C12v3Ev();
extern void _ZN7S4266C12v4Ev();
extern void _ZN7S4266C12v5Ev();
extern void _ZN7S4266C12v6Ev();
extern void _ZN7S4266C12v7Ev();
extern void _ZN7S4266C12v8Ev();
extern void _ZN7S4266C12v9Ev();
extern void _ZN7S4266C13v10Ev();
extern void _ZN7S4266C13v11Ev();
extern void _ZN7S4266C13v12Ev();
extern void _ZN7S4266C13v13Ev();
extern void ABISELECT(_ZThn72_N7S4266C1D1Ev,_ZThn48_N7S4266C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4266C1D0Ev,_ZThn48_N7S4266C1D0Ev)();
extern void _ZN10S4266C5_nt3v54Ev();
extern void _ZN10S4266C5_nt3v55Ev();
static  VTBL_ENTRY vtc_S4266C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4266C1[0]),
  (VTBL_ENTRY)&_ZN7S4266C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4266C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S4266C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S4266C2_nt3v53Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4266C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4266C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4266C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4266C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4266C13v13Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S4266C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4266C1D1Ev,_ZThn48_N7S4266C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4266C1D0Ev,_ZThn48_N7S4266C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4266C5_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S4266C5_nt3v55Ev,
};
extern VTBL_ENTRY _ZTI7S4266C1[];
extern  VTBL_ENTRY _ZTV7S4266C1[];
Class_Descriptor cd_S4266C1 = {  "S4266C1", // class name
  bases_S4266C1, 3,
  &(vtc_S4266C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,144), // object size
  NSPAIRA(_ZTI7S4266C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4266C1),63, //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  S4474C4_nt  {
  void *s4474c4f0;
  virtual  ~S4474C4_nt(); // _ZN10S4474C4_ntD1Ev
  virtual void  v8(); // _ZN10S4474C4_nt2v8Ev
  virtual void  v9(); // _ZN10S4474C4_nt2v9Ev
  virtual void  v10(); // _ZN10S4474C4_nt3v10Ev
  virtual void  v11(); // _ZN10S4474C4_nt3v11Ev
  virtual void  v12(); // _ZN10S4474C4_nt3v12Ev
  virtual void  v13(); // _ZN10S4474C4_nt3v13Ev
  virtual void  v14(); // _ZN10S4474C4_nt3v14Ev
  virtual void  v15(); // _ZN10S4474C4_nt3v15Ev
  virtual void  v16(); // _ZN10S4474C4_nt3v16Ev
  S4474C4_nt(); // tgen
};
//SIG(-1 S4474C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp}


 S4474C4_nt ::~S4474C4_nt(){ note_dtor("S4474C4_nt", this);}
void  S4474C4_nt ::v8(){vfunc_called(this, "_ZN10S4474C4_nt2v8Ev");}
void  S4474C4_nt ::v9(){vfunc_called(this, "_ZN10S4474C4_nt2v9Ev");}
void  S4474C4_nt ::v10(){vfunc_called(this, "_ZN10S4474C4_nt3v10Ev");}
void  S4474C4_nt ::v11(){vfunc_called(this, "_ZN10S4474C4_nt3v11Ev");}
void  S4474C4_nt ::v12(){vfunc_called(this, "_ZN10S4474C4_nt3v12Ev");}
void  S4474C4_nt ::v13(){vfunc_called(this, "_ZN10S4474C4_nt3v13Ev");}
void  S4474C4_nt ::v14(){vfunc_called(this, "_ZN10S4474C4_nt3v14Ev");}
void  S4474C4_nt ::v15(){vfunc_called(this, "_ZN10S4474C4_nt3v15Ev");}
void  S4474C4_nt ::v16(){vfunc_called(this, "_ZN10S4474C4_nt3v16Ev");}
S4474C4_nt ::S4474C4_nt(){ note_ctor("S4474C4_nt", this);} // tgen

//skip512 S4474C4_nt

#else // __cplusplus

extern void _ZN10S4474C4_ntC1Ev();
extern void _ZN10S4474C4_ntD1Ev();
Name_Map name_map_S4474C4_nt[] = {
  NSPAIR(_ZN10S4474C4_ntC1Ev),
  NSPAIR(_ZN10S4474C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4474C4_nt[];
extern void _ZN10S4474C4_ntD1Ev();
extern void _ZN10S4474C4_ntD0Ev();
extern void _ZN10S4474C4_nt2v8Ev();
extern void _ZN10S4474C4_nt2v9Ev();
extern void _ZN10S4474C4_nt3v10Ev();
extern void _ZN10S4474C4_nt3v11Ev();
extern void _ZN10S4474C4_nt3v12Ev();
extern void _ZN10S4474C4_nt3v13Ev();
extern void _ZN10S4474C4_nt3v14Ev();
extern void _ZN10S4474C4_nt3v15Ev();
extern void _ZN10S4474C4_nt3v16Ev();
static  VTBL_ENTRY vtc_S4474C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4474C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S4474C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S4474C4_nt3v16Ev,
};
extern VTBL_ENTRY _ZTI10S4474C4_nt[];
VTBL_ENTRY *P__ZTI10S4474C4_nt = _ZTI10S4474C4_nt; 
extern  VTBL_ENTRY _ZTV10S4474C4_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4474C5_nt  {
  int s4474c5f0[2];
  void  mf4474c5(); // _ZN10S4474C5_nt8mf4474c5Ev
  virtual  ~S4474C5_nt(); // _ZN10S4474C5_ntD1Ev
  S4474C5_nt(); // tgen
};
//SIG(-1 S4474C5_nt) C1{ vd m Fi[2]}


void  S4474C5_nt ::mf4474c5(){}
 S4474C5_nt ::~S4474C5_nt(){ note_dtor("S4474C5_nt", this);}
S4474C5_nt ::S4474C5_nt(){ note_ctor("S4474C5_nt", this);} // tgen

//skip512 S4474C5_nt

#else // __cplusplus

extern void _ZN10S4474C5_ntC1Ev();
extern void _ZN10S4474C5_ntD1Ev();
Name_Map name_map_S4474C5_nt[] = {
  NSPAIR(_ZN10S4474C5_ntC1Ev),
  NSPAIR(_ZN10S4474C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4474C5_nt[];
extern void _ZN10S4474C5_ntD1Ev();
extern void _ZN10S4474C5_ntD0Ev();
static  VTBL_ENTRY vtc_S4474C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4474C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S4474C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4474C5_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4474C5_nt[];
VTBL_ENTRY *P__ZTI10S4474C5_nt = _ZTI10S4474C5_nt; 
extern  VTBL_ENTRY _ZTV10S4474C5_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4474C3_nt  {
  int s4474c3f0[4];
  ::S4474C4_nt s4474c3f1;
  int s4474c3f2;
  char s4474c3f3;
  ::S4474C5_nt s4474c3f4;
  int s4474c3f5;
  virtual  ~S4474C3_nt(); // _ZN10S4474C3_ntD1Ev
  virtual void  v2(); // _ZN10S4474C3_nt2v2Ev
  virtual void  v3(); // _ZN10S4474C3_nt2v3Ev
  virtual void  v4(); // _ZN10S4474C3_nt2v4Ev
  S4474C3_nt(); // tgen
};
//SIG(-1 S4474C3_nt) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4474C3_nt ::~S4474C3_nt(){ note_dtor("S4474C3_nt", this);}
void  S4474C3_nt ::v2(){vfunc_called(this, "_ZN10S4474C3_nt2v2Ev");}
void  S4474C3_nt ::v3(){vfunc_called(this, "_ZN10S4474C3_nt2v3Ev");}
void  S4474C3_nt ::v4(){vfunc_called(this, "_ZN10S4474C3_nt2v4Ev");}
S4474C3_nt ::S4474C3_nt(){ note_ctor("S4474C3_nt", this);} // tgen

//skip512 S4474C3_nt

#else // __cplusplus

extern void _ZN10S4474C3_ntC1Ev();
extern void _ZN10S4474C3_ntD1Ev();
Name_Map name_map_S4474C3_nt[] = {
  NSPAIR(_ZN10S4474C3_ntC1Ev),
  NSPAIR(_ZN10S4474C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4474C3_nt[];
extern void _ZN10S4474C3_ntD1Ev();
extern void _ZN10S4474C3_ntD0Ev();
extern void _ZN10S4474C3_nt2v2Ev();
extern void _ZN10S4474C3_nt2v3Ev();
extern void _ZN10S4474C3_nt2v4Ev();
static  VTBL_ENTRY vtc_S4474C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4474C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4474C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S4474C3_nt[];
VTBL_ENTRY *P__ZTI10S4474C3_nt = _ZTI10S4474C3_nt; 
extern  VTBL_ENTRY _ZTV10S4474C3_nt[];
Class_Descriptor cd_S4474C3_nt = {  "S4474C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4474C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI10S4474C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4474C3_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  S4474C6_nt  {
  virtual  ~S4474C6_nt(); // _ZN10S4474C6_ntD1Ev
  virtual void  v5(); // _ZN10S4474C6_nt2v5Ev
  S4474C6_nt(); // tgen
};
//SIG(-1 S4474C6_nt) C1{ vd v1}


 S4474C6_nt ::~S4474C6_nt(){ note_dtor("S4474C6_nt", this);}
void  S4474C6_nt ::v5(){vfunc_called(this, "_ZN10S4474C6_nt2v5Ev");}
S4474C6_nt ::S4474C6_nt(){ note_ctor("S4474C6_nt", this);} // tgen

//skip512 S4474C6_nt

#else // __cplusplus

extern void _ZN10S4474C6_ntC1Ev();
extern void _ZN10S4474C6_ntD1Ev();
Name_Map name_map_S4474C6_nt[] = {
  NSPAIR(_ZN10S4474C6_ntC1Ev),
  NSPAIR(_ZN10S4474C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4474C6_nt[];
extern void _ZN10S4474C6_ntD1Ev();
extern void _ZN10S4474C6_ntD0Ev();
extern void _ZN10S4474C6_nt2v5Ev();
static  VTBL_ENTRY vtc_S4474C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4474C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S4474C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4474C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4474C6_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S4474C6_nt[];
VTBL_ENTRY *P__ZTI10S4474C6_nt = _ZTI10S4474C6_nt; 
extern  VTBL_ENTRY _ZTV10S4474C6_nt[];
Class_Descriptor cd_S4474C6_nt = {  "S4474C6_nt", // class name
  0,0,//no base classes
  &(vtc_S4474C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4474C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4474C6_nt),5, //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  S4474C2  : S4474C3_nt , S4474C6_nt {
  void *s4474c2f0;
  int s4474c2f1;
  void *s4474c2f2;
  virtual  ~S4474C2(); // _ZN7S4474C2D1Ev
  virtual void  v6(); // _ZN7S4474C22v6Ev
  virtual void  v7(); // _ZN7S4474C22v7Ev
  S4474C2(); // tgen
};
//SIG(-1 S4474C2) C1{ BC2{ vd v3 v4 v5 Fi[4] FC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} BC5{ vd v6} vd v1 v2 Fp Fi Fp}


 S4474C2 ::~S4474C2(){ note_dtor("S4474C2", this);}
void  S4474C2 ::v6(){vfunc_called(this, "_ZN7S4474C22v6Ev");}
void  S4474C2 ::v7(){vfunc_called(this, "_ZN7S4474C22v7Ev");}
S4474C2 ::S4474C2(){ note_ctor("S4474C2", this);} // tgen

static void Test_S4474C2()
{
  extern Class_Descriptor cd_S4474C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4474C2, buf);
    S4474C2 *dp, &lv = *(dp=new (buf) S4474C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4474C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4474C2)");
    check_base_class_offset(lv, (S4474C3_nt*), 0, "S4474C2");
    check_base_class_offset(lv, (S4474C6_nt*), ABISELECT(72,52), "S4474C2");
    check_field_offset(lv, s4474c2f0, ABISELECT(80,56), "S4474C2.s4474c2f0");
    check_field_offset(lv, s4474c2f1, ABISELECT(88,60), "S4474C2.s4474c2f1");
    check_field_offset(lv, s4474c2f2, ABISELECT(96,64), "S4474C2.s4474c2f2");
    test_class_info(&lv, &cd_S4474C2);
    dp->~S4474C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4474C2(Test_S4474C2, "S4474C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4474C2C1Ev();
extern void _ZN7S4474C2D1Ev();
Name_Map name_map_S4474C2[] = {
  NSPAIR(_ZN7S4474C2C1Ev),
  NSPAIR(_ZN7S4474C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4474C3_nt;
extern VTBL_ENTRY _ZTI10S4474C3_nt[];
extern  VTBL_ENTRY _ZTV10S4474C3_nt[];
extern Class_Descriptor cd_S4474C6_nt;
extern VTBL_ENTRY _ZTI10S4474C6_nt[];
extern  VTBL_ENTRY _ZTV10S4474C6_nt[];
static Base_Class bases_S4474C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4474C3_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_S4474C6_nt,    ABISELECT(72,52), //bcp->offset
    9, //bcp->virtual_function_table_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 _ZTI7S4474C2[];
extern void _ZN7S4474C2D1Ev();
extern void _ZN7S4474C2D0Ev();
extern void _ZN10S4474C3_nt2v2Ev();
extern void _ZN10S4474C3_nt2v3Ev();
extern void _ZN10S4474C3_nt2v4Ev();
extern void _ZN7S4474C22v6Ev();
extern void _ZN7S4474C22v7Ev();
extern void ABISELECT(_ZThn72_N7S4474C2D1Ev,_ZThn52_N7S4474C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S4474C2D0Ev,_ZThn52_N7S4474C2D0Ev)();
extern void _ZN10S4474C6_nt2v5Ev();
static  VTBL_ENTRY vtc_S4474C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4474C2[0]),
  (VTBL_ENTRY)&_ZN7S4474C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4474C2D0Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S4474C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4474C22v7Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4474C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4474C2D1Ev,_ZThn52_N7S4474C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4474C2D0Ev,_ZThn52_N7S4474C2D0Ev),
  (VTBL_ENTRY)&_ZN10S4474C6_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI7S4474C2[];
extern  VTBL_ENTRY _ZTV7S4474C2[];
Class_Descriptor cd_S4474C2 = {  "S4474C2", // class name
  bases_S4474C2, 2,
  &(vtc_S4474C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4474C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4474C2),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  S4474C11_nt  {
  char s4474c11f0;
  void  mf4474c11(); // _ZN11S4474C11_nt9mf4474c11Ev
  virtual  ~S4474C11_nt(); // _ZN11S4474C11_ntD1Ev
  S4474C11_nt(); // tgen
};
//SIG(-1 S4474C11_nt) C1{ vd m Fc}


void  S4474C11_nt ::mf4474c11(){}
 S4474C11_nt ::~S4474C11_nt(){ note_dtor("S4474C11_nt", this);}
S4474C11_nt ::S4474C11_nt(){ note_ctor("S4474C11_nt", this);} // tgen

//skip512 S4474C11_nt

#else // __cplusplus

extern void _ZN11S4474C11_ntC1Ev();
extern void _ZN11S4474C11_ntD1Ev();
Name_Map name_map_S4474C11_nt[] = {
  NSPAIR(_ZN11S4474C11_ntC1Ev),
  NSPAIR(_ZN11S4474C11_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S4474C11_nt[];
extern void _ZN11S4474C11_ntD1Ev();
extern void _ZN11S4474C11_ntD0Ev();
static  VTBL_ENTRY vtc_S4474C11_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S4474C11_nt[0]),
  (VTBL_ENTRY)&_ZN11S4474C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S4474C11_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S4474C11_nt[];
VTBL_ENTRY *P__ZTI11S4474C11_nt = _ZTI11S4474C11_nt; 
extern  VTBL_ENTRY _ZTV11S4474C11_nt[];
Class_Descriptor cd_S4474C11_nt = {  "S4474C11_nt", // class name
  0,0,//no base classes
  &(vtc_S4474C11_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S4474C11_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S4474C11_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  S4474C10_nt  : S4474C11_nt {
  __tsi64 s4474c10f0[2];
  virtual  ~S4474C10_nt(); // _ZN11S4474C10_ntD1Ev
  S4474C10_nt(); // tgen
};
//SIG(-1 S4474C10_nt) C1{ BC2{ vd m Fc} vd FL[2]}


 S4474C10_nt ::~S4474C10_nt(){ note_dtor("S4474C10_nt", this);}
S4474C10_nt ::S4474C10_nt(){ note_ctor("S4474C10_nt", this);} // tgen

//skip512 S4474C10_nt

#else // __cplusplus

extern void _ZN11S4474C10_ntC1Ev();
extern void _ZN11S4474C10_ntD1Ev();
Name_Map name_map_S4474C10_nt[] = {
  NSPAIR(_ZN11S4474C10_ntC1Ev),
  NSPAIR(_ZN11S4474C10_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4474C11_nt;
extern VTBL_ENTRY _ZTI11S4474C11_nt[];
extern  VTBL_ENTRY _ZTV11S4474C11_nt[];
static Base_Class bases_S4474C10_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4474C11_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 _ZTI11S4474C10_nt[];
extern void _ZN11S4474C10_ntD1Ev();
extern void _ZN11S4474C10_ntD0Ev();
static  VTBL_ENTRY vtc_S4474C10_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S4474C10_nt[0]),
  (VTBL_ENTRY)&_ZN11S4474C10_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S4474C10_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S4474C10_nt[];
VTBL_ENTRY *P__ZTI11S4474C10_nt = _ZTI11S4474C10_nt; 
extern  VTBL_ENTRY _ZTV11S4474C10_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4474C7_nt  {
  ::S2366C5_nt s4474c7f0;
  ::S4474C10_nt s4474c7f1;
  int s4474c7f2[2];
  void  mf4474c7(); // _ZN10S4474C7_nt8mf4474c7Ev
  virtual  ~S4474C7_nt(); // _ZN10S4474C7_ntD1Ev
  S4474C7_nt(); // tgen
};
//SIG(-1 S4474C7_nt) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC4{ BC5{ vd m Fc} vd FL[2]} Fi[2]}


void  S4474C7_nt ::mf4474c7(){}
 S4474C7_nt ::~S4474C7_nt(){ note_dtor("S4474C7_nt", this);}
S4474C7_nt ::S4474C7_nt(){ note_ctor("S4474C7_nt", this);} // tgen

//skip512 S4474C7_nt

#else // __cplusplus

extern void _ZN10S4474C7_ntC1Ev();
extern void _ZN10S4474C7_ntD1Ev();
Name_Map name_map_S4474C7_nt[] = {
  NSPAIR(_ZN10S4474C7_ntC1Ev),
  NSPAIR(_ZN10S4474C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4474C7_nt[];
extern void _ZN10S4474C7_ntD1Ev();
extern void _ZN10S4474C7_ntD0Ev();
static  VTBL_ENTRY vtc_S4474C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4474C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S4474C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4474C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4474C7_nt[];
VTBL_ENTRY *P__ZTI10S4474C7_nt = _ZTI10S4474C7_nt; 
extern  VTBL_ENTRY _ZTV10S4474C7_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4474C15_nt  {
  __tsi64 s4474c15f0;
  char s4474c15f1;
  void  mf4474c15(); // _ZN11S4474C15_nt9mf4474c15Ev
  virtual  ~S4474C15_nt(); // _ZN11S4474C15_ntD1Ev
  S4474C15_nt(); // tgen
};
//SIG(-1 S4474C15_nt) C1{ vd m FL Fc}


void  S4474C15_nt ::mf4474c15(){}
 S4474C15_nt ::~S4474C15_nt(){ note_dtor("S4474C15_nt", this);}
S4474C15_nt ::S4474C15_nt(){ note_ctor("S4474C15_nt", this);} // tgen

//skip512 S4474C15_nt

#else // __cplusplus

extern void _ZN11S4474C15_ntC1Ev();
extern void _ZN11S4474C15_ntD1Ev();
Name_Map name_map_S4474C15_nt[] = {
  NSPAIR(_ZN11S4474C15_ntC1Ev),
  NSPAIR(_ZN11S4474C15_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S4474C15_nt[];
extern void _ZN11S4474C15_ntD1Ev();
extern void _ZN11S4474C15_ntD0Ev();
static  VTBL_ENTRY vtc_S4474C15_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S4474C15_nt[0]),
  (VTBL_ENTRY)&_ZN11S4474C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S4474C15_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S4474C15_nt[];
VTBL_ENTRY *P__ZTI11S4474C15_nt = _ZTI11S4474C15_nt; 
extern  VTBL_ENTRY _ZTV11S4474C15_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4474C14_nt  {
  ::S4474C15_nt s4474c14f0;
  ::S4474C15_nt s4474c14f1;
  void  mf4474c14(); // _ZN11S4474C14_nt9mf4474c14Ev
};
//SIG(-1 S4474C14_nt) C1{ m FC2{ vd m FL Fc} FC2}


void  S4474C14_nt ::mf4474c14(){}

//skip512 S4474C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4474C13  {
  void *s4474c13f0;
  ::S4474C14_nt s4474c13f1;
  void *s4474c13f2;
  int s4474c13f3;
  char s4474c13f4;
  int s4474c13f5;
  void  mf4474c13(); // _ZN8S4474C139mf4474c13Ev
};
//SIG(-1 S4474C13) C1{ m Fp FC2{ m FC3{ vd m FL Fc} FC3} Fp Fi Fc Fi}


void  S4474C13 ::mf4474c13(){}

static void Test_S4474C13()
{
  {
    init_simple_test("S4474C13");
    S4474C13 lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S4474C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4474C13)");
    check_field_offset(lv, s4474c13f0, 0, "S4474C13.s4474c13f0");
    check_field_offset(lv, s4474c13f1, ABISELECT(8,4), "S4474C13.s4474c13f1");
    check_field_offset(lv, s4474c13f2, ABISELECT(56,36), "S4474C13.s4474c13f2");
    check_field_offset(lv, s4474c13f3, ABISELECT(64,40), "S4474C13.s4474c13f3");
    check_field_offset(lv, s4474c13f4, ABISELECT(68,44), "S4474C13.s4474c13f4");
    check_field_offset(lv, s4474c13f5, ABISELECT(72,48), "S4474C13.s4474c13f5");
  }
}
static Arrange_To_Call_Me vS4474C13(Test_S4474C13, "S4474C13", ABISELECT(80,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4474C17_nt  {
  void  mf4474c17(); // _ZN11S4474C17_nt9mf4474c17Ev
  virtual  ~S4474C17_nt(); // _ZN11S4474C17_ntD1Ev
  S4474C17_nt(); // tgen
};
//SIG(-1 S4474C17_nt) C1{ vd m}


void  S4474C17_nt ::mf4474c17(){}
 S4474C17_nt ::~S4474C17_nt(){ note_dtor("S4474C17_nt", this);}
S4474C17_nt ::S4474C17_nt(){ note_ctor("S4474C17_nt", this);} // tgen

//skip512 S4474C17_nt

#else // __cplusplus

extern void _ZN11S4474C17_ntC1Ev();
extern void _ZN11S4474C17_ntD1Ev();
Name_Map name_map_S4474C17_nt[] = {
  NSPAIR(_ZN11S4474C17_ntC1Ev),
  NSPAIR(_ZN11S4474C17_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S4474C17_nt[];
extern void _ZN11S4474C17_ntD1Ev();
extern void _ZN11S4474C17_ntD0Ev();
static  VTBL_ENTRY vtc_S4474C17_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S4474C17_nt[0]),
  (VTBL_ENTRY)&_ZN11S4474C17_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S4474C17_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S4474C17_nt[];
VTBL_ENTRY *P__ZTI11S4474C17_nt = _ZTI11S4474C17_nt; 
extern  VTBL_ENTRY _ZTV11S4474C17_nt[];
Class_Descriptor cd_S4474C17_nt = {  "S4474C17_nt", // class name
  0,0,//no base classes
  &(vtc_S4474C17_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S4474C17_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S4474C17_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  S4474C18  : S4474C17_nt {
  void *s4474c18f0;
  int s4474c18f1[2];
  virtual  ~S4474C18(); // _ZN8S4474C18D1Ev
  S4474C18(); // tgen
};
//SIG(-1 S4474C18) C1{ BC2{ vd m} vd Fp Fi[2]}


 S4474C18 ::~S4474C18(){ note_dtor("S4474C18", this);}
S4474C18 ::S4474C18(){ note_ctor("S4474C18", this);} // tgen

static void Test_S4474C18()
{
  extern Class_Descriptor cd_S4474C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S4474C18, buf);
    S4474C18 *dp, &lv = *(dp=new (buf) S4474C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4474C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4474C18)");
    check_base_class_offset(lv, (S4474C17_nt*), 0, "S4474C18");
    check_field_offset(lv, s4474c18f0, ABISELECT(8,4), "S4474C18.s4474c18f0");
    check_field_offset(lv, s4474c18f1, ABISELECT(16,8), "S4474C18.s4474c18f1");
    test_class_info(&lv, &cd_S4474C18);
    dp->~S4474C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4474C18(Test_S4474C18, "S4474C18", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S4474C18C1Ev();
extern void _ZN8S4474C18D1Ev();
Name_Map name_map_S4474C18[] = {
  NSPAIR(_ZN8S4474C18C1Ev),
  NSPAIR(_ZN8S4474C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4474C17_nt;
extern VTBL_ENTRY _ZTI11S4474C17_nt[];
extern  VTBL_ENTRY _ZTV11S4474C17_nt[];
static Base_Class bases_S4474C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4474C17_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 _ZTI8S4474C18[];
extern void _ZN8S4474C18D1Ev();
extern void _ZN8S4474C18D0Ev();
static  VTBL_ENTRY vtc_S4474C18[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4474C18[0]),
  (VTBL_ENTRY)&_ZN8S4474C18D1Ev,
  (VTBL_ENTRY)&_ZN8S4474C18D0Ev,
};
extern VTBL_ENTRY _ZTI8S4474C18[];
extern  VTBL_ENTRY _ZTV8S4474C18[];
Class_Descriptor cd_S4474C18 = {  "S4474C18", // class name
  bases_S4474C18, 1,
  &(vtc_S4474C18[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S4474C18),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S4474C18),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  S4474C16  : S4474C17_nt {
  void *s4474c16f0;
  ::S4474C18 s4474c16f1;
  virtual  ~S4474C16(); // _ZN8S4474C16D1Ev
  S4474C16(); // tgen
};
//SIG(-1 S4474C16) C1{ BC2{ vd m} vd Fp FC3{ BC2 vd Fp Fi[2]}}


 S4474C16 ::~S4474C16(){ note_dtor("S4474C16", this);}
S4474C16 ::S4474C16(){ note_ctor("S4474C16", this);} // tgen

static void Test_S4474C16()
{
  extern Class_Descriptor cd_S4474C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S4474C16, buf);
    S4474C16 *dp, &lv = *(dp=new (buf) S4474C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S4474C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4474C16)");
    check_base_class_offset(lv, (S4474C17_nt*), 0, "S4474C16");
    check_field_offset(lv, s4474c16f0, ABISELECT(8,4), "S4474C16.s4474c16f0");
    check_field_offset(lv, s4474c16f1, ABISELECT(16,8), "S4474C16.s4474c16f1");
    test_class_info(&lv, &cd_S4474C16);
    dp->~S4474C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4474C16(Test_S4474C16, "S4474C16", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S4474C16C1Ev();
extern void _ZN8S4474C16D1Ev();
Name_Map name_map_S4474C16[] = {
  NSPAIR(_ZN8S4474C16C1Ev),
  NSPAIR(_ZN8S4474C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4474C17_nt;
extern VTBL_ENTRY _ZTI11S4474C17_nt[];
extern  VTBL_ENTRY _ZTV11S4474C17_nt[];
static Base_Class bases_S4474C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4474C17_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 _ZTI8S4474C16[];
extern void _ZN8S4474C16D1Ev();
extern void _ZN8S4474C16D0Ev();
static  VTBL_ENTRY vtc_S4474C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4474C16[0]),
  (VTBL_ENTRY)&_ZN8S4474C16D1Ev,
  (VTBL_ENTRY)&_ZN8S4474C16D0Ev,
};
extern VTBL_ENTRY _ZTI8S4474C16[];
extern  VTBL_ENTRY _ZTV8S4474C16[];
Class_Descriptor cd_S4474C16 = {  "S4474C16", // class name
  bases_S4474C16, 1,
  &(vtc_S4474C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S4474C16),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S4474C16),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4474C1  : S4474C2 {
  ::S4474C7_nt s4474c1f0;
  void *s4474c1f1;
  ::S629C14 s4474c1f2;
  ::S4474C13 s4474c1f3;
  ::S4474C16 s4474c1f4;
  virtual  ~S4474C1(); // _ZN7S4474C1D1Ev
  virtual void  v1(); // _ZN7S4474C12v1Ev
  S4474C1(); // tgen
};
//SIG(1 S4474C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} BC6{ vd v5} vd v6 v7 Fp Fi Fp} vd v1 FC7{ vd m FC8{ m Fp Fi FC9{ m}} FC10{ BC11{ vd m Fc} vd FL[2]} Fi[2]} Fp FC9 FC12{ m Fp FC13{ m FC14{ vd m FL Fc} FC14} Fp Fi Fc Fi} FC15{ BC16{ vd m} vd Fp FC17{ BC16 vd Fp Fi[2]}}}


 S4474C1 ::~S4474C1(){ note_dtor("S4474C1", this);}
void  S4474C1 ::v1(){vfunc_called(this, "_ZN7S4474C12v1Ev");}
S4474C1 ::S4474C1(){ note_ctor("S4474C1", this);} // tgen

static void Test_S4474C1()
{
  extern Class_Descriptor cd_S4474C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,51)];
    init_test(&cd_S4474C1, buf);
    S4474C1 *dp, &lv = *(dp=new (buf) S4474C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,200), "sizeof(S4474C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4474C1)");
    check_base_class_offset(lv, (S4474C3_nt*)(S4474C2*), 0, "S4474C1");
    check_base_class_offset(lv, (S4474C6_nt*)(S4474C2*), ABISELECT(72,52), "S4474C1");
    check_base_class_offset(lv, (S4474C2*), 0, "S4474C1");
    check_field_offset(lv, s4474c1f0, ABISELECT(104,68), "S4474C1.s4474c1f0");
    check_field_offset(lv, s4474c1f1, ABISELECT(168,116), "S4474C1.s4474c1f1");
    check_field_offset(lv, s4474c1f2, ABISELECT(176,120), "S4474C1.s4474c1f2");
    check_field_offset(lv, s4474c1f3, ABISELECT(184,124), "S4474C1.s4474c1f3");
    check_field_offset(lv, s4474c1f4, ABISELECT(264,176), "S4474C1.s4474c1f4");
    test_class_info(&lv, &cd_S4474C1);
    dp->~S4474C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4474C1(Test_S4474C1, "S4474C1", ABISELECT(304,200));

#else // __cplusplus

extern void _ZN7S4474C1C1Ev();
extern void _ZN7S4474C1D1Ev();
Name_Map name_map_S4474C1[] = {
  NSPAIR(_ZN7S4474C1C1Ev),
  NSPAIR(_ZN7S4474C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4474C3_nt;
extern VTBL_ENTRY _ZTI10S4474C3_nt[];
extern  VTBL_ENTRY _ZTV10S4474C3_nt[];
extern Class_Descriptor cd_S4474C6_nt;
extern VTBL_ENTRY _ZTI10S4474C6_nt[];
extern  VTBL_ENTRY _ZTV10S4474C6_nt[];
extern Class_Descriptor cd_S4474C2;
extern VTBL_ENTRY _ZTI7S4474C2[];
extern  VTBL_ENTRY _ZTV7S4474C2[];
static Base_Class bases_S4474C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4474C3_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_S4474C6_nt,    ABISELECT(72,52), //bcp->offset
    10, //bcp->virtual_function_table_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_S4474C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4474C1[];
extern void _ZN7S4474C1D1Ev();
extern void _ZN7S4474C1D0Ev();
extern void _ZN10S4474C3_nt2v2Ev();
extern void _ZN10S4474C3_nt2v3Ev();
extern void _ZN10S4474C3_nt2v4Ev();
extern void _ZN7S4474C22v6Ev();
extern void _ZN7S4474C22v7Ev();
extern void _ZN7S4474C12v1Ev();
extern void ABISELECT(_ZThn72_N7S4474C1D1Ev,_ZThn52_N7S4474C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4474C1D0Ev,_ZThn52_N7S4474C1D0Ev)();
extern void _ZN10S4474C6_nt2v5Ev();
static  VTBL_ENTRY vtc_S4474C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4474C1[0]),
  (VTBL_ENTRY)&_ZN7S4474C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4474C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4474C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S4474C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4474C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4474C12v1Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4474C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4474C1D1Ev,_ZThn52_N7S4474C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4474C1D0Ev,_ZThn52_N7S4474C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4474C6_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI7S4474C1[];
extern  VTBL_ENTRY _ZTV7S4474C1[];
Class_Descriptor cd_S4474C1 = {  "S4474C1", // class name
  bases_S4474C1, 3,
  &(vtc_S4474C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,200), // object size
  NSPAIRA(_ZTI7S4474C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4474C1),15, //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  S4476C3  {
  int s4476c3f0[4];
  ::S4474C4_nt s4476c3f1;
  int s4476c3f2;
  char s4476c3f3;
  ::S4474C5_nt s4476c3f4;
  int s4476c3f5;
  virtual  ~S4476C3(); // _ZN7S4476C3D1Ev
  virtual void  v2(); // _ZN7S4476C32v2Ev
  virtual void  v3(); // _ZN7S4476C32v3Ev
  virtual void  v4(); // _ZN7S4476C32v4Ev
  S4476C3(); // tgen
};
//SIG(-1 S4476C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4476C3 ::~S4476C3(){ note_dtor("S4476C3", this);}
void  S4476C3 ::v2(){vfunc_called(this, "_ZN7S4476C32v2Ev");}
void  S4476C3 ::v3(){vfunc_called(this, "_ZN7S4476C32v3Ev");}
void  S4476C3 ::v4(){vfunc_called(this, "_ZN7S4476C32v4Ev");}
S4476C3 ::S4476C3(){ note_ctor("S4476C3", this);} // tgen

static void Test_S4476C3()
{
  extern Class_Descriptor cd_S4476C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4476C3, buf);
    S4476C3 *dp, &lv = *(dp=new (buf) S4476C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4476C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4476C3)");
    check_field_offset(lv, s4476c3f0, ABISELECT(8,4), "S4476C3.s4476c3f0");
    check_field_offset(lv, s4476c3f1, ABISELECT(24,20), "S4476C3.s4476c3f1");
    check_field_offset(lv, s4476c3f2, ABISELECT(40,28), "S4476C3.s4476c3f2");
    check_field_offset(lv, s4476c3f3, ABISELECT(44,32), "S4476C3.s4476c3f3");
    check_field_offset(lv, s4476c3f4, ABISELECT(48,36), "S4476C3.s4476c3f4");
    check_field_offset(lv, s4476c3f5, ABISELECT(64,48), "S4476C3.s4476c3f5");
    test_class_info(&lv, &cd_S4476C3);
    dp->~S4476C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4476C3(Test_S4476C3, "S4476C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4476C3C1Ev();
extern void _ZN7S4476C3D1Ev();
Name_Map name_map_S4476C3[] = {
  NSPAIR(_ZN7S4476C3C1Ev),
  NSPAIR(_ZN7S4476C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4476C3[];
extern void _ZN7S4476C3D1Ev();
extern void _ZN7S4476C3D0Ev();
extern void _ZN7S4476C32v2Ev();
extern void _ZN7S4476C32v3Ev();
extern void _ZN7S4476C32v4Ev();
static  VTBL_ENTRY vtc_S4476C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4476C3[0]),
  (VTBL_ENTRY)&_ZN7S4476C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4476C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4476C3[];
extern  VTBL_ENTRY _ZTV7S4476C3[];
Class_Descriptor cd_S4476C3 = {  "S4476C3", // class name
  0,0,//no base classes
  &(vtc_S4476C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4476C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4476C3),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  S4476C6  {
  virtual  ~S4476C6(); // _ZN7S4476C6D1Ev
  virtual void  v5(); // _ZN7S4476C62v5Ev
  S4476C6(); // tgen
};
//SIG(-1 S4476C6) C1{ vd v1}


 S4476C6 ::~S4476C6(){ note_dtor("S4476C6", this);}
void  S4476C6 ::v5(){vfunc_called(this, "_ZN7S4476C62v5Ev");}
S4476C6 ::S4476C6(){ note_ctor("S4476C6", this);} // tgen

static void Test_S4476C6()
{
  extern Class_Descriptor cd_S4476C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4476C6, buf);
    S4476C6 *dp, &lv = *(dp=new (buf) S4476C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4476C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4476C6)");
    test_class_info(&lv, &cd_S4476C6);
    dp->~S4476C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4476C6(Test_S4476C6, "S4476C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4476C6C1Ev();
extern void _ZN7S4476C6D1Ev();
Name_Map name_map_S4476C6[] = {
  NSPAIR(_ZN7S4476C6C1Ev),
  NSPAIR(_ZN7S4476C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4476C6[];
extern void _ZN7S4476C6D1Ev();
extern void _ZN7S4476C6D0Ev();
extern void _ZN7S4476C62v5Ev();
static  VTBL_ENTRY vtc_S4476C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4476C6[0]),
  (VTBL_ENTRY)&_ZN7S4476C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4476C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4476C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4476C6[];
extern  VTBL_ENTRY _ZTV7S4476C6[];
Class_Descriptor cd_S4476C6 = {  "S4476C6", // class name
  0,0,//no base classes
  &(vtc_S4476C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4476C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4476C6),5, //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  S4476C2  : S4476C3 , S4476C6 {
  void *s4476c2f0;
  int s4476c2f1;
  void *s4476c2f2;
  virtual  ~S4476C2(); // _ZN7S4476C2D1Ev
  virtual void  v6(); // _ZN7S4476C22v6Ev
  virtual void  v7(); // _ZN7S4476C22v7Ev
  S4476C2(); // tgen
};
//SIG(-1 S4476C2) C1{ BC2{ vd v3 v4 v5 Fi[4] FC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} BC5{ vd v6} vd v1 v2 Fp Fi Fp}


 S4476C2 ::~S4476C2(){ note_dtor("S4476C2", this);}
void  S4476C2 ::v6(){vfunc_called(this, "_ZN7S4476C22v6Ev");}
void  S4476C2 ::v7(){vfunc_called(this, "_ZN7S4476C22v7Ev");}
S4476C2 ::S4476C2(){ note_ctor("S4476C2", this);} // tgen

static void Test_S4476C2()
{
  extern Class_Descriptor cd_S4476C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4476C2, buf);
    S4476C2 *dp, &lv = *(dp=new (buf) S4476C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4476C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4476C2)");
    check_base_class_offset(lv, (S4476C3*), 0, "S4476C2");
    check_base_class_offset(lv, (S4476C6*), ABISELECT(72,52), "S4476C2");
    check_field_offset(lv, s4476c2f0, ABISELECT(80,56), "S4476C2.s4476c2f0");
    check_field_offset(lv, s4476c2f1, ABISELECT(88,60), "S4476C2.s4476c2f1");
    check_field_offset(lv, s4476c2f2, ABISELECT(96,64), "S4476C2.s4476c2f2");
    test_class_info(&lv, &cd_S4476C2);
    dp->~S4476C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4476C2(Test_S4476C2, "S4476C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4476C2C1Ev();
extern void _ZN7S4476C2D1Ev();
Name_Map name_map_S4476C2[] = {
  NSPAIR(_ZN7S4476C2C1Ev),
  NSPAIR(_ZN7S4476C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4476C3;
extern VTBL_ENTRY _ZTI7S4476C3[];
extern  VTBL_ENTRY _ZTV7S4476C3[];
extern Class_Descriptor cd_S4476C6;
extern VTBL_ENTRY _ZTI7S4476C6[];
extern  VTBL_ENTRY _ZTV7S4476C6[];
static Base_Class bases_S4476C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4476C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4476C6,    ABISELECT(72,52), //bcp->offset
    9, //bcp->virtual_function_table_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 _ZTI7S4476C2[];
extern void _ZN7S4476C2D1Ev();
extern void _ZN7S4476C2D0Ev();
extern void _ZN7S4476C32v2Ev();
extern void _ZN7S4476C32v3Ev();
extern void _ZN7S4476C32v4Ev();
extern void _ZN7S4476C22v6Ev();
extern void _ZN7S4476C22v7Ev();
extern void ABISELECT(_ZThn72_N7S4476C2D1Ev,_ZThn52_N7S4476C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S4476C2D0Ev,_ZThn52_N7S4476C2D0Ev)();
extern void _ZN7S4476C62v5Ev();
static  VTBL_ENTRY vtc_S4476C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4476C2[0]),
  (VTBL_ENTRY)&_ZN7S4476C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4476C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4476C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4476C22v7Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4476C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4476C2D1Ev,_ZThn52_N7S4476C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4476C2D0Ev,_ZThn52_N7S4476C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4476C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4476C2[];
extern  VTBL_ENTRY _ZTV7S4476C2[];
Class_Descriptor cd_S4476C2 = {  "S4476C2", // class name
  bases_S4476C2, 2,
  &(vtc_S4476C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4476C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4476C2),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  S4476C7_nt  {
  ::S2366C5_nt s4476c7f0;
  ::S2366C5_nt s4476c7f1;
  ::S4474C10_nt s4476c7f2;
  ::S4474C10_nt s4476c7f3;
  int s4476c7f4;
  char s4476c7f5;
  ::S2366C5_nt s4476c7f6;
  void  mf4476c7(); // _ZN10S4476C7_nt8mf4476c7Ev
  virtual  ~S4476C7_nt(); // _ZN10S4476C7_ntD1Ev
  S4476C7_nt(); // tgen
};
//SIG(-1 S4476C7_nt) C1{ vd m FC2{ m Fp Fi FC3{ m}} FC2 FC4{ BC5{ vd m Fc} vd FL[2]} FC4 Fi Fc FC2}


void  S4476C7_nt ::mf4476c7(){}
 S4476C7_nt ::~S4476C7_nt(){ note_dtor("S4476C7_nt", this);}
S4476C7_nt ::S4476C7_nt(){ note_ctor("S4476C7_nt", this);} // tgen

//skip512 S4476C7_nt

#else // __cplusplus

extern void _ZN10S4476C7_ntC1Ev();
extern void _ZN10S4476C7_ntD1Ev();
Name_Map name_map_S4476C7_nt[] = {
  NSPAIR(_ZN10S4476C7_ntC1Ev),
  NSPAIR(_ZN10S4476C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4476C7_nt[];
extern void _ZN10S4476C7_ntD1Ev();
extern void _ZN10S4476C7_ntD0Ev();
static  VTBL_ENTRY vtc_S4476C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4476C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S4476C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4476C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4476C7_nt[];
VTBL_ENTRY *P__ZTI10S4476C7_nt = _ZTI10S4476C7_nt; 
extern  VTBL_ENTRY _ZTV10S4476C7_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4476C12  {
  void *s4476c12f0;
  int s4476c12f1;
  void *s4476c12f2;
  int s4476c12f3;
  ::S4474C14_nt s4476c12f4;
  ::S4474C14_nt s4476c12f5;
  int s4476c12f6[2];
  void *s4476c12f7;
  int s4476c12f8;
  char s4476c12f9[3];
  void  mf4476c12(); // _ZN8S4476C129mf4476c12Ev
};
//SIG(-1 S4476C12) C1{ m Fp Fi Fp Fi FC2{ m FC3{ vd m FL Fc} FC3} FC2 Fi[2] Fp Fi Fc[3]}


void  S4476C12 ::mf4476c12(){}

static void Test_S4476C12()
{
  {
    init_simple_test("S4476C12");
    S4476C12 lv;
    check2(sizeof(lv), ABISELECT(152,100), "sizeof(S4476C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4476C12)");
    check_field_offset(lv, s4476c12f0, 0, "S4476C12.s4476c12f0");
    check_field_offset(lv, s4476c12f1, ABISELECT(8,4), "S4476C12.s4476c12f1");
    check_field_offset(lv, s4476c12f2, ABISELECT(16,8), "S4476C12.s4476c12f2");
    check_field_offset(lv, s4476c12f3, ABISELECT(24,12), "S4476C12.s4476c12f3");
    check_field_offset(lv, s4476c12f4, ABISELECT(32,16), "S4476C12.s4476c12f4");
    check_field_offset(lv, s4476c12f5, ABISELECT(80,48), "S4476C12.s4476c12f5");
    check_field_offset(lv, s4476c12f6, ABISELECT(128,80), "S4476C12.s4476c12f6");
    check_field_offset(lv, s4476c12f7, ABISELECT(136,88), "S4476C12.s4476c12f7");
    check_field_offset(lv, s4476c12f8, ABISELECT(144,92), "S4476C12.s4476c12f8");
    check_field_offset(lv, s4476c12f9, ABISELECT(148,96), "S4476C12.s4476c12f9");
  }
}
static Arrange_To_Call_Me vS4476C12(Test_S4476C12, "S4476C12", ABISELECT(152,100));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4476C15_nt  {
  void *s4476c15f0[3];
  void  mf4476c15(); // _ZN11S4476C15_nt9mf4476c15Ev
  virtual  ~S4476C15_nt(); // _ZN11S4476C15_ntD1Ev
  S4476C15_nt(); // tgen
};
//SIG(-1 S4476C15_nt) C1{ vd m Fp[3]}


void  S4476C15_nt ::mf4476c15(){}
 S4476C15_nt ::~S4476C15_nt(){ note_dtor("S4476C15_nt", this);}
S4476C15_nt ::S4476C15_nt(){ note_ctor("S4476C15_nt", this);} // tgen

//skip512 S4476C15_nt

#else // __cplusplus

extern void _ZN11S4476C15_ntC1Ev();
extern void _ZN11S4476C15_ntD1Ev();
Name_Map name_map_S4476C15_nt[] = {
  NSPAIR(_ZN11S4476C15_ntC1Ev),
  NSPAIR(_ZN11S4476C15_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S4476C15_nt[];
extern void _ZN11S4476C15_ntD1Ev();
extern void _ZN11S4476C15_ntD0Ev();
static  VTBL_ENTRY vtc_S4476C15_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S4476C15_nt[0]),
  (VTBL_ENTRY)&_ZN11S4476C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S4476C15_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S4476C15_nt[];
VTBL_ENTRY *P__ZTI11S4476C15_nt = _ZTI11S4476C15_nt; 
extern  VTBL_ENTRY _ZTV11S4476C15_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4476C1  : S4476C2 {
  ::S4476C7_nt s4476c1f0;
  void *s4476c1f1;
  ::S4476C12 s4476c1f2;
  ::S4476C15_nt s4476c1f3;
  virtual  ~S4476C1(); // _ZN7S4476C1D1Ev
  virtual void  v1(); // _ZN7S4476C12v1Ev
  S4476C1(); // tgen
};
//SIG(1 S4476C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} BC6{ vd v5} vd v6 v7 Fp Fi Fp} vd v1 FC7{ vd m FC8{ m Fp Fi FC9{ m}} FC8 FC10{ BC11{ vd m Fc} vd FL[2]} FC10 Fi Fc FC8} Fp FC12{ m Fp Fi Fp Fi FC13{ m FC14{ vd m FL Fc} FC14} FC13 Fi[2] Fp Fi Fc[3]} FC15{ vd m Fp[3]}}


 S4476C1 ::~S4476C1(){ note_dtor("S4476C1", this);}
void  S4476C1 ::v1(){vfunc_called(this, "_ZN7S4476C12v1Ev");}
S4476C1 ::S4476C1(){ note_ctor("S4476C1", this);} // tgen

static void Test_S4476C1()
{
  extern Class_Descriptor cd_S4476C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,72)];
    init_test(&cd_S4476C1, buf);
    S4476C1 *dp, &lv = *(dp=new (buf) S4476C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,284), "sizeof(S4476C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4476C1)");
    check_base_class_offset(lv, (S4476C3*)(S4476C2*), 0, "S4476C1");
    check_base_class_offset(lv, (S4476C6*)(S4476C2*), ABISELECT(72,52), "S4476C1");
    check_base_class_offset(lv, (S4476C2*), 0, "S4476C1");
    check_field_offset(lv, s4476c1f0, ABISELECT(104,68), "S4476C1.s4476c1f0");
    check_field_offset(lv, s4476c1f1, ABISELECT(232,164), "S4476C1.s4476c1f1");
    check_field_offset(lv, s4476c1f2, ABISELECT(240,168), "S4476C1.s4476c1f2");
    check_field_offset(lv, s4476c1f3, ABISELECT(392,268), "S4476C1.s4476c1f3");
    test_class_info(&lv, &cd_S4476C1);
    dp->~S4476C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4476C1(Test_S4476C1, "S4476C1", ABISELECT(424,284));

#else // __cplusplus

extern void _ZN7S4476C1C1Ev();
extern void _ZN7S4476C1D1Ev();
Name_Map name_map_S4476C1[] = {
  NSPAIR(_ZN7S4476C1C1Ev),
  NSPAIR(_ZN7S4476C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4476C3;
extern VTBL_ENTRY _ZTI7S4476C3[];
extern  VTBL_ENTRY _ZTV7S4476C3[];
extern Class_Descriptor cd_S4476C6;
extern VTBL_ENTRY _ZTI7S4476C6[];
extern  VTBL_ENTRY _ZTV7S4476C6[];
extern Class_Descriptor cd_S4476C2;
extern VTBL_ENTRY _ZTI7S4476C2[];
extern  VTBL_ENTRY _ZTV7S4476C2[];
static Base_Class bases_S4476C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4476C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4476C6,    ABISELECT(72,52), //bcp->offset
    10, //bcp->virtual_function_table_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_S4476C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4476C1[];
extern void _ZN7S4476C1D1Ev();
extern void _ZN7S4476C1D0Ev();
extern void _ZN7S4476C32v2Ev();
extern void _ZN7S4476C32v3Ev();
extern void _ZN7S4476C32v4Ev();
extern void _ZN7S4476C22v6Ev();
extern void _ZN7S4476C22v7Ev();
extern void _ZN7S4476C12v1Ev();
extern void ABISELECT(_ZThn72_N7S4476C1D1Ev,_ZThn52_N7S4476C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4476C1D0Ev,_ZThn52_N7S4476C1D0Ev)();
extern void _ZN7S4476C62v5Ev();
static  VTBL_ENTRY vtc_S4476C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4476C1[0]),
  (VTBL_ENTRY)&_ZN7S4476C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4476C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4476C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4476C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4476C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4476C12v1Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4476C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4476C1D1Ev,_ZThn52_N7S4476C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4476C1D0Ev,_ZThn52_N7S4476C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4476C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4476C1[];
extern  VTBL_ENTRY _ZTV7S4476C1[];
Class_Descriptor cd_S4476C1 = {  "S4476C1", // class name
  bases_S4476C1, 3,
  &(vtc_S4476C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,284), // object size
  NSPAIRA(_ZTI7S4476C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4476C1),15, //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  S130C7  {
  ::S2366C5_nt s130c7f0;
  int s130c7f1[2];
  char s130c7f2;
  virtual  ~S130C7(); // _ZN6S130C7D1Ev
  virtual void  v7(); // _ZN6S130C72v7Ev
  virtual void  v8(); // _ZN6S130C72v8Ev
  virtual void  v9(); // _ZN6S130C72v9Ev
  S130C7(); // tgen
};
//SIG(-1 S130C7) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S130C7 ::~S130C7(){ note_dtor("S130C7", this);}
void  S130C7 ::v7(){vfunc_called(this, "_ZN6S130C72v7Ev");}
void  S130C7 ::v8(){vfunc_called(this, "_ZN6S130C72v8Ev");}
void  S130C7 ::v9(){vfunc_called(this, "_ZN6S130C72v9Ev");}
S130C7 ::S130C7(){ note_ctor("S130C7", this);} // tgen

static void Test_S130C7()
{
  extern Class_Descriptor cd_S130C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S130C7, buf);
    S130C7 *dp, &lv = *(dp=new (buf) S130C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S130C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S130C7)");
    check_field_offset(lv, s130c7f0, ABISELECT(8,4), "S130C7.s130c7f0");
    check_field_offset(lv, s130c7f1, ABISELECT(24,16), "S130C7.s130c7f1");
    check_field_offset(lv, s130c7f2, ABISELECT(32,24), "S130C7.s130c7f2");
    test_class_info(&lv, &cd_S130C7);
    dp->~S130C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS130C7(Test_S130C7, "S130C7", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S130C7C1Ev();
extern void _ZN6S130C7D1Ev();
Name_Map name_map_S130C7[] = {
  NSPAIR(_ZN6S130C7C1Ev),
  NSPAIR(_ZN6S130C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S130C7[];
extern void _ZN6S130C7D1Ev();
extern void _ZN6S130C7D0Ev();
extern void _ZN6S130C72v7Ev();
extern void _ZN6S130C72v8Ev();
extern void _ZN6S130C72v9Ev();
static  VTBL_ENTRY vtc_S130C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S130C7[0]),
  (VTBL_ENTRY)&_ZN6S130C7D1Ev,
  (VTBL_ENTRY)&_ZN6S130C7D0Ev,
  (VTBL_ENTRY)&_ZN6S130C72v7Ev,
  (VTBL_ENTRY)&_ZN6S130C72v8Ev,
  (VTBL_ENTRY)&_ZN6S130C72v9Ev,
};
extern VTBL_ENTRY _ZTI6S130C7[];
extern  VTBL_ENTRY _ZTV6S130C7[];
Class_Descriptor cd_S130C7 = {  "S130C7", // class name
  0,0,//no base classes
  &(vtc_S130C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S130C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S130C7),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  S130C6  : S130C7 {
  void *s130c6f0;
  virtual void  v10(); // _ZN6S130C63v10Ev
  virtual void  v11(); // _ZN6S130C63v11Ev
  ~S130C6(); // tgen
  S130C6(); // tgen
};
//SIG(-1 S130C6) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S130C6 ::v10(){vfunc_called(this, "_ZN6S130C63v10Ev");}
void  S130C6 ::v11(){vfunc_called(this, "_ZN6S130C63v11Ev");}
S130C6 ::~S130C6(){ note_dtor("S130C6", this);} // tgen
S130C6 ::S130C6(){ note_ctor("S130C6", this);} // tgen

static void Test_S130C6()
{
  extern Class_Descriptor cd_S130C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S130C6, buf);
    S130C6 *dp, &lv = *(dp=new (buf) S130C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S130C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S130C6)");
    check_base_class_offset(lv, (S130C7*), 0, "S130C6");
    check_field_offset(lv, s130c6f0, ABISELECT(40,28), "S130C6.s130c6f0");
    test_class_info(&lv, &cd_S130C6);
    dp->~S130C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS130C6(Test_S130C6, "S130C6", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S130C6C1Ev();
extern void _ZN6S130C6D1Ev();
Name_Map name_map_S130C6[] = {
  NSPAIR(_ZN6S130C6C1Ev),
  NSPAIR(_ZN6S130C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S130C7;
extern VTBL_ENTRY _ZTI6S130C7[];
extern  VTBL_ENTRY _ZTV6S130C7[];
static Base_Class bases_S130C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S130C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI6S130C6[];
extern void _ZN6S130C6D1Ev();
extern void _ZN6S130C6D0Ev();
extern void _ZN6S130C72v7Ev();
extern void _ZN6S130C72v8Ev();
extern void _ZN6S130C72v9Ev();
extern void _ZN6S130C63v10Ev();
extern void _ZN6S130C63v11Ev();
static  VTBL_ENTRY vtc_S130C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S130C6[0]),
  (VTBL_ENTRY)&_ZN6S130C6D1Ev,
  (VTBL_ENTRY)&_ZN6S130C6D0Ev,
  (VTBL_ENTRY)&_ZN6S130C72v7Ev,
  (VTBL_ENTRY)&_ZN6S130C72v8Ev,
  (VTBL_ENTRY)&_ZN6S130C72v9Ev,
  (VTBL_ENTRY)&_ZN6S130C63v10Ev,
  (VTBL_ENTRY)&_ZN6S130C63v11Ev,
};
extern VTBL_ENTRY _ZTI6S130C6[];
extern  VTBL_ENTRY _ZTV6S130C6[];
Class_Descriptor cd_S130C6 = {  "S130C6", // class name
  bases_S130C6, 1,
  &(vtc_S130C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S130C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S130C6),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  S130C5  : S130C6 {
  void *s130c5f0;
  char s130c5f1;
  ::S2366C14_nt s130c5f2;
  virtual  ~S130C5(); // _ZN6S130C5D1Ev
  virtual void  v12(); // _ZN6S130C53v12Ev
  S130C5(); // tgen
};
//SIG(-1 S130C5) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S130C5 ::~S130C5(){ note_dtor("S130C5", this);}
void  S130C5 ::v12(){vfunc_called(this, "_ZN6S130C53v12Ev");}
S130C5 ::S130C5(){ note_ctor("S130C5", this);} // tgen

static void Test_S130C5()
{
  extern Class_Descriptor cd_S130C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S130C5, buf);
    S130C5 *dp, &lv = *(dp=new (buf) S130C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S130C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S130C5)");
    check_base_class_offset(lv, (S130C7*)(S130C6*), 0, "S130C5");
    check_base_class_offset(lv, (S130C6*), 0, "S130C5");
    check_field_offset(lv, s130c5f0, ABISELECT(48,32), "S130C5.s130c5f0");
    check_field_offset(lv, s130c5f1, ABISELECT(56,36), "S130C5.s130c5f1");
    check_field_offset(lv, s130c5f2, ABISELECT(60,40), "S130C5.s130c5f2");
    test_class_info(&lv, &cd_S130C5);
    dp->~S130C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS130C5(Test_S130C5, "S130C5", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S130C5C1Ev();
extern void _ZN6S130C5D1Ev();
Name_Map name_map_S130C5[] = {
  NSPAIR(_ZN6S130C5C1Ev),
  NSPAIR(_ZN6S130C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S130C7;
extern VTBL_ENTRY _ZTI6S130C7[];
extern  VTBL_ENTRY _ZTV6S130C7[];
extern Class_Descriptor cd_S130C6;
extern VTBL_ENTRY _ZTI6S130C6[];
extern  VTBL_ENTRY _ZTV6S130C6[];
static Base_Class bases_S130C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S130C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S130C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S130C5[];
extern void _ZN6S130C5D1Ev();
extern void _ZN6S130C5D0Ev();
extern void _ZN6S130C72v7Ev();
extern void _ZN6S130C72v8Ev();
extern void _ZN6S130C72v9Ev();
extern void _ZN6S130C63v10Ev();
extern void _ZN6S130C63v11Ev();
extern void _ZN6S130C53v12Ev();
static  VTBL_ENTRY vtc_S130C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S130C5[0]),
  (VTBL_ENTRY)&_ZN6S130C5D1Ev,
  (VTBL_ENTRY)&_ZN6S130C5D0Ev,
  (VTBL_ENTRY)&_ZN6S130C72v7Ev,
  (VTBL_ENTRY)&_ZN6S130C72v8Ev,
  (VTBL_ENTRY)&_ZN6S130C72v9Ev,
  (VTBL_ENTRY)&_ZN6S130C63v10Ev,
  (VTBL_ENTRY)&_ZN6S130C63v11Ev,
  (VTBL_ENTRY)&_ZN6S130C53v12Ev,
};
extern VTBL_ENTRY _ZTI6S130C5[];
extern  VTBL_ENTRY _ZTV6S130C5[];
Class_Descriptor cd_S130C5 = {  "S130C5", // class name
  bases_S130C5, 2,
  &(vtc_S130C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S130C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S130C5),10, //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  S130C11_nt  {
  void *s130c11f0[2];
  void  mf130c11(); // _ZN10S130C11_nt8mf130c11Ev
};
//SIG(-1 S130C11_nt) C1{ m Fp[2]}


void  S130C11_nt ::mf130c11(){}

//skip512 S130C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S130C12_nt  {
  void *s130c12f0;
  int s130c12f1;
  void *s130c12f2;
};
//SIG(-1 S130C12_nt) C1{ Fp Fi Fp}



//skip512 S130C12_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S130C4  : S130C5 {
  void *s130c4f0;
  __tsi64 s130c4f1[2];
  ::S130C11_nt s130c4f2;
  __tsi64 s130c4f3;
  ::S130C12_nt s130c4f4;
  char s130c4f5;
  void *s130c4f6[2];
  virtual  ~S130C4(); // _ZN6S130C4D1Ev
  virtual void  v13(); // _ZN6S130C43v13Ev
  virtual void  v14(); // _ZN6S130C43v14Ev
  virtual void  v15(); // _ZN6S130C43v15Ev
  virtual void  v16(); // _ZN6S130C43v16Ev
  S130C4(); // tgen
};
//SIG(-1 S130C4) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v8 v9 Fp} vd v10 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 v4 Fp FL[2] FC8{ m Fp[2]} FL FC9{ Fp Fi Fp} Fc Fp[2]}


 S130C4 ::~S130C4(){ note_dtor("S130C4", this);}
void  S130C4 ::v13(){vfunc_called(this, "_ZN6S130C43v13Ev");}
void  S130C4 ::v14(){vfunc_called(this, "_ZN6S130C43v14Ev");}
void  S130C4 ::v15(){vfunc_called(this, "_ZN6S130C43v15Ev");}
void  S130C4 ::v16(){vfunc_called(this, "_ZN6S130C43v16Ev");}
S130C4 ::S130C4(){ note_ctor("S130C4", this);} // tgen

static void Test_S130C4()
{
  extern Class_Descriptor cd_S130C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,28)];
    init_test(&cd_S130C4, buf);
    S130C4 *dp, &lv = *(dp=new (buf) S130C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,108), "sizeof(S130C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S130C4)");
    check_base_class_offset(lv, (S130C7*)(S130C6*)(S130C5*), 0, "S130C4");
    check_base_class_offset(lv, (S130C6*)(S130C5*), 0, "S130C4");
    check_base_class_offset(lv, (S130C5*), 0, "S130C4");
    check_field_offset(lv, s130c4f0, ABISELECT(72,48), "S130C4.s130c4f0");
    check_field_offset(lv, s130c4f1, ABISELECT(80,52), "S130C4.s130c4f1");
    check_field_offset(lv, s130c4f2, ABISELECT(96,68), "S130C4.s130c4f2");
    check_field_offset(lv, s130c4f3, ABISELECT(112,76), "S130C4.s130c4f3");
    check_field_offset(lv, s130c4f4, ABISELECT(120,84), "S130C4.s130c4f4");
    check_field_offset(lv, s130c4f5, ABISELECT(144,96), "S130C4.s130c4f5");
    check_field_offset(lv, s130c4f6, ABISELECT(152,100), "S130C4.s130c4f6");
    test_class_info(&lv, &cd_S130C4);
    dp->~S130C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS130C4(Test_S130C4, "S130C4", ABISELECT(168,108));

#else // __cplusplus

extern void _ZN6S130C4C1Ev();
extern void _ZN6S130C4D1Ev();
Name_Map name_map_S130C4[] = {
  NSPAIR(_ZN6S130C4C1Ev),
  NSPAIR(_ZN6S130C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S130C7;
extern VTBL_ENTRY _ZTI6S130C7[];
extern  VTBL_ENTRY _ZTV6S130C7[];
extern Class_Descriptor cd_S130C6;
extern VTBL_ENTRY _ZTI6S130C6[];
extern  VTBL_ENTRY _ZTV6S130C6[];
extern Class_Descriptor cd_S130C5;
extern VTBL_ENTRY _ZTI6S130C5[];
extern  VTBL_ENTRY _ZTV6S130C5[];
static Base_Class bases_S130C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S130C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S130C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S130C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S130C4[];
extern void _ZN6S130C4D1Ev();
extern void _ZN6S130C4D0Ev();
extern void _ZN6S130C72v7Ev();
extern void _ZN6S130C72v8Ev();
extern void _ZN6S130C72v9Ev();
extern void _ZN6S130C63v10Ev();
extern void _ZN6S130C63v11Ev();
extern void _ZN6S130C53v12Ev();
extern void _ZN6S130C43v13Ev();
extern void _ZN6S130C43v14Ev();
extern void _ZN6S130C43v15Ev();
extern void _ZN6S130C43v16Ev();
static  VTBL_ENTRY vtc_S130C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S130C4[0]),
  (VTBL_ENTRY)&_ZN6S130C4D1Ev,
  (VTBL_ENTRY)&_ZN6S130C4D0Ev,
  (VTBL_ENTRY)&_ZN6S130C72v7Ev,
  (VTBL_ENTRY)&_ZN6S130C72v8Ev,
  (VTBL_ENTRY)&_ZN6S130C72v9Ev,
  (VTBL_ENTRY)&_ZN6S130C63v10Ev,
  (VTBL_ENTRY)&_ZN6S130C63v11Ev,
  (VTBL_ENTRY)&_ZN6S130C53v12Ev,
  (VTBL_ENTRY)&_ZN6S130C43v13Ev,
  (VTBL_ENTRY)&_ZN6S130C43v14Ev,
  (VTBL_ENTRY)&_ZN6S130C43v15Ev,
  (VTBL_ENTRY)&_ZN6S130C43v16Ev,
};
extern VTBL_ENTRY _ZTI6S130C4[];
extern  VTBL_ENTRY _ZTV6S130C4[];
Class_Descriptor cd_S130C4 = {  "S130C4", // class name
  bases_S130C4, 3,
  &(vtc_S130C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,108), // object size
  NSPAIRA(_ZTI6S130C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S130C4),14, //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  S130C3  : S130C4 {
  char s130c3f0;
  void *s130c3f1[2];
  virtual  ~S130C3(); // _ZN6S130C3D1Ev
  virtual void  v17(); // _ZN6S130C33v17Ev
  virtual void  v18(); // _ZN6S130C33v18Ev
  virtual void  v19(); // _ZN6S130C33v19Ev
  virtual void  v20(); // _ZN6S130C33v20Ev
  virtual void  v21(); // _ZN6S130C33v21Ev
  virtual void  v22(); // _ZN6S130C33v22Ev
  virtual void  v23(); // _ZN6S130C33v23Ev
  virtual void  v24(); // _ZN6S130C33v24Ev
  S130C3(); // tgen
};
//SIG(-1 S130C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v12 v13 Fp} vd v14 Fp Fc FC8{ m Fi[2]}} vd v15 v16 v17 v18 Fp FL[2] FC9{ m Fp[2]} FL FC10{ Fp Fi Fp} Fc Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 Fc Fp[2]}


 S130C3 ::~S130C3(){ note_dtor("S130C3", this);}
void  S130C3 ::v17(){vfunc_called(this, "_ZN6S130C33v17Ev");}
void  S130C3 ::v18(){vfunc_called(this, "_ZN6S130C33v18Ev");}
void  S130C3 ::v19(){vfunc_called(this, "_ZN6S130C33v19Ev");}
void  S130C3 ::v20(){vfunc_called(this, "_ZN6S130C33v20Ev");}
void  S130C3 ::v21(){vfunc_called(this, "_ZN6S130C33v21Ev");}
void  S130C3 ::v22(){vfunc_called(this, "_ZN6S130C33v22Ev");}
void  S130C3 ::v23(){vfunc_called(this, "_ZN6S130C33v23Ev");}
void  S130C3 ::v24(){vfunc_called(this, "_ZN6S130C33v24Ev");}
S130C3 ::S130C3(){ note_ctor("S130C3", this);} // tgen

static void Test_S130C3()
{
  extern Class_Descriptor cd_S130C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,31)];
    init_test(&cd_S130C3, buf);
    S130C3 *dp, &lv = *(dp=new (buf) S130C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,120), "sizeof(S130C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S130C3)");
    check_base_class_offset(lv, (S130C7*)(S130C6*)(S130C5*)(S130C4*), 0, "S130C3");
    check_base_class_offset(lv, (S130C6*)(S130C5*)(S130C4*), 0, "S130C3");
    check_base_class_offset(lv, (S130C5*)(S130C4*), 0, "S130C3");
    check_base_class_offset(lv, (S130C4*), 0, "S130C3");
    check_field_offset(lv, s130c3f0, ABISELECT(168,108), "S130C3.s130c3f0");
    check_field_offset(lv, s130c3f1, ABISELECT(176,112), "S130C3.s130c3f1");
    test_class_info(&lv, &cd_S130C3);
    dp->~S130C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS130C3(Test_S130C3, "S130C3", ABISELECT(192,120));

#else // __cplusplus

extern void _ZN6S130C3C1Ev();
extern void _ZN6S130C3D1Ev();
Name_Map name_map_S130C3[] = {
  NSPAIR(_ZN6S130C3C1Ev),
  NSPAIR(_ZN6S130C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S130C7;
extern VTBL_ENTRY _ZTI6S130C7[];
extern  VTBL_ENTRY _ZTV6S130C7[];
extern Class_Descriptor cd_S130C6;
extern VTBL_ENTRY _ZTI6S130C6[];
extern  VTBL_ENTRY _ZTV6S130C6[];
extern Class_Descriptor cd_S130C5;
extern VTBL_ENTRY _ZTI6S130C5[];
extern  VTBL_ENTRY _ZTV6S130C5[];
extern Class_Descriptor cd_S130C4;
extern VTBL_ENTRY _ZTI6S130C4[];
extern  VTBL_ENTRY _ZTV6S130C4[];
static Base_Class bases_S130C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S130C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S130C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S130C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S130C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S130C3[];
extern void _ZN6S130C3D1Ev();
extern void _ZN6S130C3D0Ev();
extern void _ZN6S130C72v7Ev();
extern void _ZN6S130C72v8Ev();
extern void _ZN6S130C72v9Ev();
extern void _ZN6S130C63v10Ev();
extern void _ZN6S130C63v11Ev();
extern void _ZN6S130C53v12Ev();
extern void _ZN6S130C43v13Ev();
extern void _ZN6S130C43v14Ev();
extern void _ZN6S130C43v15Ev();
extern void _ZN6S130C43v16Ev();
extern void _ZN6S130C33v17Ev();
extern void _ZN6S130C33v18Ev();
extern void _ZN6S130C33v19Ev();
extern void _ZN6S130C33v20Ev();
extern void _ZN6S130C33v21Ev();
extern void _ZN6S130C33v22Ev();
extern void _ZN6S130C33v23Ev();
extern void _ZN6S130C33v24Ev();
static  VTBL_ENTRY vtc_S130C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S130C3[0]),
  (VTBL_ENTRY)&_ZN6S130C3D1Ev,
  (VTBL_ENTRY)&_ZN6S130C3D0Ev,
  (VTBL_ENTRY)&_ZN6S130C72v7Ev,
  (VTBL_ENTRY)&_ZN6S130C72v8Ev,
  (VTBL_ENTRY)&_ZN6S130C72v9Ev,
  (VTBL_ENTRY)&_ZN6S130C63v10Ev,
  (VTBL_ENTRY)&_ZN6S130C63v11Ev,
  (VTBL_ENTRY)&_ZN6S130C53v12Ev,
  (VTBL_ENTRY)&_ZN6S130C43v13Ev,
  (VTBL_ENTRY)&_ZN6S130C43v14Ev,
  (VTBL_ENTRY)&_ZN6S130C43v15Ev,
  (VTBL_ENTRY)&_ZN6S130C43v16Ev,
  (VTBL_ENTRY)&_ZN6S130C33v17Ev,
  (VTBL_ENTRY)&_ZN6S130C33v18Ev,
  (VTBL_ENTRY)&_ZN6S130C33v19Ev,
  (VTBL_ENTRY)&_ZN6S130C33v20Ev,
  (VTBL_ENTRY)&_ZN6S130C33v21Ev,
  (VTBL_ENTRY)&_ZN6S130C33v22Ev,
  (VTBL_ENTRY)&_ZN6S130C33v23Ev,
  (VTBL_ENTRY)&_ZN6S130C33v24Ev,
};
extern VTBL_ENTRY _ZTI6S130C3[];
extern  VTBL_ENTRY _ZTV6S130C3[];
Class_Descriptor cd_S130C3 = {  "S130C3", // class name
  bases_S130C3, 4,
  &(vtc_S130C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,120), // object size
  NSPAIRA(_ZTI6S130C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S130C3),22, //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  S130C2  : S130C3 {
  void *s130c2f0;
  int s130c2f1;
  __tsi64 s130c2f2;
  void *s130c2f3;
  virtual  ~S130C2(); // _ZN6S130C2D1Ev
  virtual void  v25(); // _ZN6S130C23v25Ev
  virtual void  v26(); // _ZN6S130C23v26Ev
  virtual void  v27(); // _ZN6S130C23v27Ev
  virtual void  v28(); // _ZN6S130C23v28Ev
  virtual void  v29(); // _ZN6S130C23v29Ev
  virtual void  v30(); // _ZN6S130C23v30Ev
  virtual void  v31(); // _ZN6S130C23v31Ev
  virtual void  v32(); // _ZN6S130C23v32Ev
  S130C2(); // tgen
};
//SIG(-1 S130C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v9 v10 v11 FC7{ m Fp Fi FC8{ m}} Fi[2] Fc} v12 v13 Fp} vd v14 Fp Fc FC9{ m Fi[2]}} vd v15 v16 v17 v18 Fp FL[2] FC10{ m Fp[2]} FL FC11{ Fp Fi Fp} Fc Fp[2]} vd v19 v20 v21 v22 v23 v24 v25 v26 Fc Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp Fi FL Fp}


 S130C2 ::~S130C2(){ note_dtor("S130C2", this);}
void  S130C2 ::v25(){vfunc_called(this, "_ZN6S130C23v25Ev");}
void  S130C2 ::v26(){vfunc_called(this, "_ZN6S130C23v26Ev");}
void  S130C2 ::v27(){vfunc_called(this, "_ZN6S130C23v27Ev");}
void  S130C2 ::v28(){vfunc_called(this, "_ZN6S130C23v28Ev");}
void  S130C2 ::v29(){vfunc_called(this, "_ZN6S130C23v29Ev");}
void  S130C2 ::v30(){vfunc_called(this, "_ZN6S130C23v30Ev");}
void  S130C2 ::v31(){vfunc_called(this, "_ZN6S130C23v31Ev");}
void  S130C2 ::v32(){vfunc_called(this, "_ZN6S130C23v32Ev");}
S130C2 ::S130C2(){ note_ctor("S130C2", this);} // tgen

static void Test_S130C2()
{
  extern Class_Descriptor cd_S130C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,36)];
    init_test(&cd_S130C2, buf);
    S130C2 *dp, &lv = *(dp=new (buf) S130C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,140), "sizeof(S130C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S130C2)");
    check_base_class_offset(lv, (S130C7*)(S130C6*)(S130C5*)(S130C4*)(S130C3*), 0, "S130C2");
    check_base_class_offset(lv, (S130C6*)(S130C5*)(S130C4*)(S130C3*), 0, "S130C2");
    check_base_class_offset(lv, (S130C5*)(S130C4*)(S130C3*), 0, "S130C2");
    check_base_class_offset(lv, (S130C4*)(S130C3*), 0, "S130C2");
    check_base_class_offset(lv, (S130C3*), 0, "S130C2");
    check_field_offset(lv, s130c2f0, ABISELECT(192,120), "S130C2.s130c2f0");
    check_field_offset(lv, s130c2f1, ABISELECT(200,124), "S130C2.s130c2f1");
    check_field_offset(lv, s130c2f2, ABISELECT(208,128), "S130C2.s130c2f2");
    check_field_offset(lv, s130c2f3, ABISELECT(216,136), "S130C2.s130c2f3");
    test_class_info(&lv, &cd_S130C2);
    dp->~S130C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS130C2(Test_S130C2, "S130C2", ABISELECT(224,140));

#else // __cplusplus

extern void _ZN6S130C2C1Ev();
extern void _ZN6S130C2D1Ev();
Name_Map name_map_S130C2[] = {
  NSPAIR(_ZN6S130C2C1Ev),
  NSPAIR(_ZN6S130C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S130C7;
extern VTBL_ENTRY _ZTI6S130C7[];
extern  VTBL_ENTRY _ZTV6S130C7[];
extern Class_Descriptor cd_S130C6;
extern VTBL_ENTRY _ZTI6S130C6[];
extern  VTBL_ENTRY _ZTV6S130C6[];
extern Class_Descriptor cd_S130C5;
extern VTBL_ENTRY _ZTI6S130C5[];
extern  VTBL_ENTRY _ZTV6S130C5[];
extern Class_Descriptor cd_S130C4;
extern VTBL_ENTRY _ZTI6S130C4[];
extern  VTBL_ENTRY _ZTV6S130C4[];
extern Class_Descriptor cd_S130C3;
extern VTBL_ENTRY _ZTI6S130C3[];
extern  VTBL_ENTRY _ZTV6S130C3[];
static Base_Class bases_S130C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S130C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S130C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S130C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S130C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S130C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S130C2[];
extern void _ZN6S130C2D1Ev();
extern void _ZN6S130C2D0Ev();
extern void _ZN6S130C72v7Ev();
extern void _ZN6S130C72v8Ev();
extern void _ZN6S130C72v9Ev();
extern void _ZN6S130C63v10Ev();
extern void _ZN6S130C63v11Ev();
extern void _ZN6S130C53v12Ev();
extern void _ZN6S130C43v13Ev();
extern void _ZN6S130C43v14Ev();
extern void _ZN6S130C43v15Ev();
extern void _ZN6S130C43v16Ev();
extern void _ZN6S130C33v17Ev();
extern void _ZN6S130C33v18Ev();
extern void _ZN6S130C33v19Ev();
extern void _ZN6S130C33v20Ev();
extern void _ZN6S130C33v21Ev();
extern void _ZN6S130C33v22Ev();
extern void _ZN6S130C33v23Ev();
extern void _ZN6S130C33v24Ev();
extern void _ZN6S130C23v25Ev();
extern void _ZN6S130C23v26Ev();
extern void _ZN6S130C23v27Ev();
extern void _ZN6S130C23v28Ev();
extern void _ZN6S130C23v29Ev();
extern void _ZN6S130C23v30Ev();
extern void _ZN6S130C23v31Ev();
extern void _ZN6S130C23v32Ev();
static  VTBL_ENTRY vtc_S130C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S130C2[0]),
  (VTBL_ENTRY)&_ZN6S130C2D1Ev,
  (VTBL_ENTRY)&_ZN6S130C2D0Ev,
  (VTBL_ENTRY)&_ZN6S130C72v7Ev,
  (VTBL_ENTRY)&_ZN6S130C72v8Ev,
  (VTBL_ENTRY)&_ZN6S130C72v9Ev,
  (VTBL_ENTRY)&_ZN6S130C63v10Ev,
  (VTBL_ENTRY)&_ZN6S130C63v11Ev,
  (VTBL_ENTRY)&_ZN6S130C53v12Ev,
  (VTBL_ENTRY)&_ZN6S130C43v13Ev,
  (VTBL_ENTRY)&_ZN6S130C43v14Ev,
  (VTBL_ENTRY)&_ZN6S130C43v15Ev,
  (VTBL_ENTRY)&_ZN6S130C43v16Ev,
  (VTBL_ENTRY)&_ZN6S130C33v17Ev,
  (VTBL_ENTRY)&_ZN6S130C33v18Ev,
  (VTBL_ENTRY)&_ZN6S130C33v19Ev,
  (VTBL_ENTRY)&_ZN6S130C33v20Ev,
  (VTBL_ENTRY)&_ZN6S130C33v21Ev,
  (VTBL_ENTRY)&_ZN6S130C33v22Ev,
  (VTBL_ENTRY)&_ZN6S130C33v23Ev,
  (VTBL_ENTRY)&_ZN6S130C33v24Ev,
  (VTBL_ENTRY)&_ZN6S130C23v25Ev,
  (VTBL_ENTRY)&_ZN6S130C23v26Ev,
  (VTBL_ENTRY)&_ZN6S130C23v27Ev,
  (VTBL_ENTRY)&_ZN6S130C23v28Ev,
  (VTBL_ENTRY)&_ZN6S130C23v29Ev,
  (VTBL_ENTRY)&_ZN6S130C23v30Ev,
  (VTBL_ENTRY)&_ZN6S130C23v31Ev,
  (VTBL_ENTRY)&_ZN6S130C23v32Ev,
};
extern VTBL_ENTRY _ZTI6S130C2[];
extern  VTBL_ENTRY _ZTV6S130C2[];
Class_Descriptor cd_S130C2 = {  "S130C2", // class name
  bases_S130C2, 5,
  &(vtc_S130C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,140), // object size
  NSPAIRA(_ZTI6S130C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S130C2),30, //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  S130C1  : S130C2 {
  void *s130c1f0[2];
  int s130c1f1;
  virtual  ~S130C1(); // _ZN6S130C1D1Ev
  virtual void  v1(); // _ZN6S130C12v1Ev
  virtual void  v2(); // _ZN6S130C12v2Ev
  virtual void  v3(); // _ZN6S130C12v3Ev
  virtual void  v4(); // _ZN6S130C12v4Ev
  virtual void  v5(); // _ZN6S130C12v5Ev
  virtual void  v6(); // _ZN6S130C12v6Ev
  S130C1(); // tgen
};
//SIG(1 S130C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v7 v8 v9 FC8{ m Fp Fi FC9{ m}} Fi[2] Fc} v10 v11 Fp} vd v12 Fp Fc FC10{ m Fi[2]}} vd v13 v14 v15 v16 Fp FL[2] FC11{ m Fp[2]} FL FC12{ Fp Fi Fp} Fc Fp[2]} vd v17 v18 v19 v20 v21 v22 v23 v24 Fc Fp[2]} vd v25 v26 v27 v28 v29 v30 v31 v32 Fp Fi FL Fp} vd v1 v2 v3 v4 v5 v6 Fp[2] Fi}


 S130C1 ::~S130C1(){ note_dtor("S130C1", this);}
void  S130C1 ::v1(){vfunc_called(this, "_ZN6S130C12v1Ev");}
void  S130C1 ::v2(){vfunc_called(this, "_ZN6S130C12v2Ev");}
void  S130C1 ::v3(){vfunc_called(this, "_ZN6S130C12v3Ev");}
void  S130C1 ::v4(){vfunc_called(this, "_ZN6S130C12v4Ev");}
void  S130C1 ::v5(){vfunc_called(this, "_ZN6S130C12v5Ev");}
void  S130C1 ::v6(){vfunc_called(this, "_ZN6S130C12v6Ev");}
S130C1 ::S130C1(){ note_ctor("S130C1", this);} // tgen

static void Test_S130C1()
{
  extern Class_Descriptor cd_S130C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,39)];
    init_test(&cd_S130C1, buf);
    S130C1 *dp, &lv = *(dp=new (buf) S130C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,152), "sizeof(S130C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S130C1)");
    check_base_class_offset(lv, (S130C7*)(S130C6*)(S130C5*)(S130C4*)(S130C3*)(S130C2*), 0, "S130C1");
    check_base_class_offset(lv, (S130C6*)(S130C5*)(S130C4*)(S130C3*)(S130C2*), 0, "S130C1");
    check_base_class_offset(lv, (S130C5*)(S130C4*)(S130C3*)(S130C2*), 0, "S130C1");
    check_base_class_offset(lv, (S130C4*)(S130C3*)(S130C2*), 0, "S130C1");
    check_base_class_offset(lv, (S130C3*)(S130C2*), 0, "S130C1");
    check_base_class_offset(lv, (S130C2*), 0, "S130C1");
    check_field_offset(lv, s130c1f0, ABISELECT(224,140), "S130C1.s130c1f0");
    check_field_offset(lv, s130c1f1, ABISELECT(240,148), "S130C1.s130c1f1");
    test_class_info(&lv, &cd_S130C1);
    dp->~S130C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS130C1(Test_S130C1, "S130C1", ABISELECT(248,152));

#else // __cplusplus

extern void _ZN6S130C1C1Ev();
extern void _ZN6S130C1D1Ev();
Name_Map name_map_S130C1[] = {
  NSPAIR(_ZN6S130C1C1Ev),
  NSPAIR(_ZN6S130C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S130C7;
extern VTBL_ENTRY _ZTI6S130C7[];
extern  VTBL_ENTRY _ZTV6S130C7[];
extern Class_Descriptor cd_S130C6;
extern VTBL_ENTRY _ZTI6S130C6[];
extern  VTBL_ENTRY _ZTV6S130C6[];
extern Class_Descriptor cd_S130C5;
extern VTBL_ENTRY _ZTI6S130C5[];
extern  VTBL_ENTRY _ZTV6S130C5[];
extern Class_Descriptor cd_S130C4;
extern VTBL_ENTRY _ZTI6S130C4[];
extern  VTBL_ENTRY _ZTV6S130C4[];
extern Class_Descriptor cd_S130C3;
extern VTBL_ENTRY _ZTI6S130C3[];
extern  VTBL_ENTRY _ZTV6S130C3[];
extern Class_Descriptor cd_S130C2;
extern VTBL_ENTRY _ZTI6S130C2[];
extern  VTBL_ENTRY _ZTV6S130C2[];
static Base_Class bases_S130C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S130C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S130C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S130C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S130C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S130C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S130C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S130C1[];
extern void _ZN6S130C1D1Ev();
extern void _ZN6S130C1D0Ev();
extern void _ZN6S130C72v7Ev();
extern void _ZN6S130C72v8Ev();
extern void _ZN6S130C72v9Ev();
extern void _ZN6S130C63v10Ev();
extern void _ZN6S130C63v11Ev();
extern void _ZN6S130C53v12Ev();
extern void _ZN6S130C43v13Ev();
extern void _ZN6S130C43v14Ev();
extern void _ZN6S130C43v15Ev();
extern void _ZN6S130C43v16Ev();
extern void _ZN6S130C33v17Ev();
extern void _ZN6S130C33v18Ev();
extern void _ZN6S130C33v19Ev();
extern void _ZN6S130C33v20Ev();
extern void _ZN6S130C33v21Ev();
extern void _ZN6S130C33v22Ev();
extern void _ZN6S130C33v23Ev();
extern void _ZN6S130C33v24Ev();
extern void _ZN6S130C23v25Ev();
extern void _ZN6S130C23v26Ev();
extern void _ZN6S130C23v27Ev();
extern void _ZN6S130C23v28Ev();
extern void _ZN6S130C23v29Ev();
extern void _ZN6S130C23v30Ev();
extern void _ZN6S130C23v31Ev();
extern void _ZN6S130C23v32Ev();
extern void _ZN6S130C12v1Ev();
extern void _ZN6S130C12v2Ev();
extern void _ZN6S130C12v3Ev();
extern void _ZN6S130C12v4Ev();
extern void _ZN6S130C12v5Ev();
extern void _ZN6S130C12v6Ev();
static  VTBL_ENTRY vtc_S130C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S130C1[0]),
  (VTBL_ENTRY)&_ZN6S130C1D1Ev,
  (VTBL_ENTRY)&_ZN6S130C1D0Ev,
  (VTBL_ENTRY)&_ZN6S130C72v7Ev,
  (VTBL_ENTRY)&_ZN6S130C72v8Ev,
  (VTBL_ENTRY)&_ZN6S130C72v9Ev,
  (VTBL_ENTRY)&_ZN6S130C63v10Ev,
  (VTBL_ENTRY)&_ZN6S130C63v11Ev,
  (VTBL_ENTRY)&_ZN6S130C53v12Ev,
  (VTBL_ENTRY)&_ZN6S130C43v13Ev,
  (VTBL_ENTRY)&_ZN6S130C43v14Ev,
  (VTBL_ENTRY)&_ZN6S130C43v15Ev,
  (VTBL_ENTRY)&_ZN6S130C43v16Ev,
  (VTBL_ENTRY)&_ZN6S130C33v17Ev,
  (VTBL_ENTRY)&_ZN6S130C33v18Ev,
  (VTBL_ENTRY)&_ZN6S130C33v19Ev,
  (VTBL_ENTRY)&_ZN6S130C33v20Ev,
  (VTBL_ENTRY)&_ZN6S130C33v21Ev,
  (VTBL_ENTRY)&_ZN6S130C33v22Ev,
  (VTBL_ENTRY)&_ZN6S130C33v23Ev,
  (VTBL_ENTRY)&_ZN6S130C33v24Ev,
  (VTBL_ENTRY)&_ZN6S130C23v25Ev,
  (VTBL_ENTRY)&_ZN6S130C23v26Ev,
  (VTBL_ENTRY)&_ZN6S130C23v27Ev,
  (VTBL_ENTRY)&_ZN6S130C23v28Ev,
  (VTBL_ENTRY)&_ZN6S130C23v29Ev,
  (VTBL_ENTRY)&_ZN6S130C23v30Ev,
  (VTBL_ENTRY)&_ZN6S130C23v31Ev,
  (VTBL_ENTRY)&_ZN6S130C23v32Ev,
  (VTBL_ENTRY)&_ZN6S130C12v1Ev,
  (VTBL_ENTRY)&_ZN6S130C12v2Ev,
  (VTBL_ENTRY)&_ZN6S130C12v3Ev,
  (VTBL_ENTRY)&_ZN6S130C12v4Ev,
  (VTBL_ENTRY)&_ZN6S130C12v5Ev,
  (VTBL_ENTRY)&_ZN6S130C12v6Ev,
};
extern VTBL_ENTRY _ZTI6S130C1[];
extern  VTBL_ENTRY _ZTV6S130C1[];
Class_Descriptor cd_S130C1 = {  "S130C1", // class name
  bases_S130C1, 6,
  &(vtc_S130C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,152), // object size
  NSPAIRA(_ZTI6S130C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S130C1),36, //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  S20900C3  {
  void *s20900c3f0;
  long double s20900c3f1;
  int s20900c3f2;
  virtual void  v7(); // _ZN8S20900C32v7Ev
  virtual void  v8(); // _ZN8S20900C32v8Ev
  ~S20900C3(); // tgen
  S20900C3(); // tgen
};
//SIG(-1 S20900C3) C1{ v1 v2 Fp FD Fi}


void  S20900C3 ::v7(){vfunc_called(this, "_ZN8S20900C32v7Ev");}
void  S20900C3 ::v8(){vfunc_called(this, "_ZN8S20900C32v8Ev");}
S20900C3 ::~S20900C3(){ note_dtor("S20900C3", this);} // tgen
S20900C3 ::S20900C3(){ note_ctor("S20900C3", this);} // tgen

static void Test_S20900C3()
{
  extern Class_Descriptor cd_S20900C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S20900C3, buf);
    S20900C3 *dp, &lv = *(dp=new (buf) S20900C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20900C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20900C3)");
    check_field_offset(lv, s20900c3f0, ABISELECT(8,4), "S20900C3.s20900c3f0");
    check_field_offset(lv, s20900c3f1, ABISELECT(16,8), "S20900C3.s20900c3f1");
    check_field_offset(lv, s20900c3f2, ABISELECT(32,20), "S20900C3.s20900c3f2");
    test_class_info(&lv, &cd_S20900C3);
    dp->~S20900C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C3(Test_S20900C3, "S20900C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20900C3C1Ev();
extern void _ZN8S20900C3D1Ev();
Name_Map name_map_S20900C3[] = {
  NSPAIR(_ZN8S20900C3C1Ev),
  NSPAIR(_ZN8S20900C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20900C3[];
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
static  VTBL_ENTRY vtc_S20900C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C3[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
Class_Descriptor cd_S20900C3 = {  "S20900C3", // class name
  0,0,//no base classes
  &(vtc_S20900C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20900C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20900C3),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  S20900C6  : S20900C3 {
  virtual void  v12(); // _ZN8S20900C63v12Ev
  virtual void  v13(); // _ZN8S20900C63v13Ev
  ~S20900C6(); // tgen
  S20900C6(); // tgen
};
//SIG(-1 S20900C6) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S20900C6 ::v12(){vfunc_called(this, "_ZN8S20900C63v12Ev");}
void  S20900C6 ::v13(){vfunc_called(this, "_ZN8S20900C63v13Ev");}
S20900C6 ::~S20900C6(){ note_dtor("S20900C6", this);} // tgen
S20900C6 ::S20900C6(){ note_ctor("S20900C6", this);} // tgen

static void Test_S20900C6()
{
  extern Class_Descriptor cd_S20900C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S20900C6, buf);
    S20900C6 *dp, &lv = *(dp=new (buf) S20900C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20900C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20900C6)");
    check_base_class_offset(lv, (S20900C3*), 0, "S20900C6");
    test_class_info(&lv, &cd_S20900C6);
    dp->~S20900C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C6(Test_S20900C6, "S20900C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20900C6C1Ev();
extern void _ZN8S20900C6D1Ev();
Name_Map name_map_S20900C6[] = {
  NSPAIR(_ZN8S20900C6C1Ev),
  NSPAIR(_ZN8S20900C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
static Base_Class bases_S20900C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20900C6[];
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
static  VTBL_ENTRY vtc_S20900C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C6[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
};
extern VTBL_ENTRY _ZTI8S20900C6[];
extern  VTBL_ENTRY _ZTV8S20900C6[];
Class_Descriptor cd_S20900C6 = {  "S20900C6", // class name
  bases_S20900C6, 1,
  &(vtc_S20900C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20900C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20900C6),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  S20900C5  {
  ::S20900C6 s20900c5f0[3];
  void *s20900c5f1;
  short s20900c5f2:8;
  virtual void  v9(); // _ZN8S20900C52v9Ev
  virtual void  v10(); // _ZN8S20900C53v10Ev
  virtual void  v11(); // _ZN8S20900C53v11Ev
  ~S20900C5(); // tgen
  S20900C5(); // tgen
};
//SIG(-1 S20900C5) C1{ v1 v2 v3 FC2{ BC3{ v6 v7 Fp FD Fi} v4 v5}[3] Fp Fs:8}


void  S20900C5 ::v9(){vfunc_called(this, "_ZN8S20900C52v9Ev");}
void  S20900C5 ::v10(){vfunc_called(this, "_ZN8S20900C53v10Ev");}
void  S20900C5 ::v11(){vfunc_called(this, "_ZN8S20900C53v11Ev");}
S20900C5 ::~S20900C5(){ note_dtor("S20900C5", this);} // tgen
S20900C5 ::S20900C5(){ note_ctor("S20900C5", this);} // tgen

static void Test_S20900C5()
{
  extern Class_Descriptor cd_S20900C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,22)];
    init_test(&cd_S20900C5, buf);
    S20900C5 *dp, &lv = *(dp=new (buf) S20900C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,84), "sizeof(S20900C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20900C5)");
    check_field_offset(lv, s20900c5f0, ABISELECT(16,4), "S20900C5.s20900c5f0");
    check_field_offset(lv, s20900c5f1, ABISELECT(160,76), "S20900C5.s20900c5f1");
    set_bf_and_test(lv, s20900c5f2, ABISELECT(168,80), 0, 8, 1, "S20900C5");
    set_bf_and_test(lv, s20900c5f2, ABISELECT(168,80), 0, 8, hide_sll(1LL<<7), "S20900C5");
    test_class_info(&lv, &cd_S20900C5);
    dp->~S20900C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C5(Test_S20900C5, "S20900C5", ABISELECT(176,84));

#else // __cplusplus

extern void _ZN8S20900C5C1Ev();
extern void _ZN8S20900C5D1Ev();
Name_Map name_map_S20900C5[] = {
  NSPAIR(_ZN8S20900C5C1Ev),
  NSPAIR(_ZN8S20900C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20900C5[];
extern void _ZN8S20900C52v9Ev();
extern void _ZN8S20900C53v10Ev();
extern void _ZN8S20900C53v11Ev();
static  VTBL_ENTRY vtc_S20900C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C5[0]),
  (VTBL_ENTRY)&_ZN8S20900C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v11Ev,
};
extern VTBL_ENTRY _ZTI8S20900C5[];
extern  VTBL_ENTRY _ZTV8S20900C5[];
Class_Descriptor cd_S20900C5 = {  "S20900C5", // class name
  0,0,//no base classes
  &(vtc_S20900C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,84), // object size
  NSPAIRA(_ZTI8S20900C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20900C5),5, //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  S20900C8  : S20900C6 , S20900C3 {
  virtual void  v14(); // _ZN8S20900C83v14Ev
  virtual void  v15(); // _ZN8S20900C83v15Ev
  virtual void  v16(); // _ZN8S20900C83v16Ev
  virtual void  v17(); // _ZN8S20900C83v17Ev
  ~S20900C8(); // tgen
  S20900C8(); // tgen
};
//SIG(-1 S20900C8) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S20900C8 ::v14(){vfunc_called(this, "_ZN8S20900C83v14Ev");}
void  S20900C8 ::v15(){vfunc_called(this, "_ZN8S20900C83v15Ev");}
void  S20900C8 ::v16(){vfunc_called(this, "_ZN8S20900C83v16Ev");}
void  S20900C8 ::v17(){vfunc_called(this, "_ZN8S20900C83v17Ev");}
S20900C8 ::~S20900C8(){ note_dtor("S20900C8", this);} // tgen
S20900C8 ::S20900C8(){ note_ctor("S20900C8", this);} // tgen

static void Test_S20900C8()
{
  extern Class_Descriptor cd_S20900C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S20900C8, buf);
    S20900C8 *dp, &lv = *(dp=new (buf) S20900C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20900C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20900C8)");
    check_base_class_offset(lv, (S20900C3*)(S20900C6*), 0, "S20900C8");
    check_base_class_offset(lv, (S20900C6*), 0, "S20900C8");
    /*is_ambiguous_... S20900C8::S20900C3 */ AMB_check_base_class_offset(lv, (S20900C3*), ABISELECT(48,24), "S20900C8");
    test_class_info(&lv, &cd_S20900C8);
    dp->~S20900C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C8(Test_S20900C8, "S20900C8", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20900C8C1Ev();
extern void _ZN8S20900C8D1Ev();
Name_Map name_map_S20900C8[] = {
  NSPAIR(_ZN8S20900C8C1Ev),
  NSPAIR(_ZN8S20900C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C6;
extern VTBL_ENTRY _ZTI8S20900C6[];
extern  VTBL_ENTRY _ZTV8S20900C6[];
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
static Base_Class bases_S20900C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20900C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S20900C3,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_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 _ZTI8S20900C8[];
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
static  VTBL_ENTRY vtc_S20900C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C8[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20900C8[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S20900C8[];
extern  VTBL_ENTRY _ZTV8S20900C8[];
Class_Descriptor cd_S20900C8 = {  "S20900C8", // class name
  bases_S20900C8, 3,
  &(vtc_S20900C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20900C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20900C8),14, //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  S20900C11  {
  ::S1400C17_nt s20900c11f0;
  void *s20900c11f1;
  virtual void  v18(); // _ZN9S20900C113v18Ev
  ~S20900C11(); // tgen
  S20900C11(); // tgen
};
//SIG(-1 S20900C11) C1{ v1 FC2{ v2 v3} Fp}


void  S20900C11 ::v18(){vfunc_called(this, "_ZN9S20900C113v18Ev");}
S20900C11 ::~S20900C11(){ note_dtor("S20900C11", this);} // tgen
S20900C11 ::S20900C11(){ note_ctor("S20900C11", this);} // tgen

static void Test_S20900C11()
{
  extern Class_Descriptor cd_S20900C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20900C11, buf);
    S20900C11 *dp, &lv = *(dp=new (buf) S20900C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20900C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20900C11)");
    check_field_offset(lv, s20900c11f0, ABISELECT(8,4), "S20900C11.s20900c11f0");
    check_field_offset(lv, s20900c11f1, ABISELECT(16,8), "S20900C11.s20900c11f1");
    test_class_info(&lv, &cd_S20900C11);
    dp->~S20900C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C11(Test_S20900C11, "S20900C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S20900C11C1Ev();
extern void _ZN9S20900C11D1Ev();
Name_Map name_map_S20900C11[] = {
  NSPAIR(_ZN9S20900C11C1Ev),
  NSPAIR(_ZN9S20900C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20900C11[];
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY vtc_S20900C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C11[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
Class_Descriptor cd_S20900C11 = {  "S20900C11", // class name
  0,0,//no base classes
  &(vtc_S20900C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S20900C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20900C11),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20900C10  : virtual S20900C11 {
  virtual void  v19(); // _ZN9S20900C103v19Ev
  ~S20900C10(); // tgen
  S20900C10(); // tgen
};
//SIG(-1 S20900C10) C1{ VBC2{ v2 FC3{ v3 v4} Fp} v1}


void  S20900C10 ::v19(){vfunc_called(this, "_ZN9S20900C103v19Ev");}
S20900C10 ::~S20900C10(){ note_dtor("S20900C10", this);} // tgen
S20900C10 ::S20900C10(){ note_ctor("S20900C10", this);} // tgen

static void Test_S20900C10()
{
  extern Class_Descriptor cd_S20900C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20900C10, buf);
    S20900C10 *dp, &lv = *(dp=new (buf) S20900C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20900C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20900C10)");
    check_base_class_offset(lv, (S20900C11*), ABISELECT(8,4), "S20900C10");
    test_class_info(&lv, &cd_S20900C10);
    dp->~S20900C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C10(Test_S20900C10, "S20900C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S20900C10C1Ev();
extern void _ZN9S20900C10D1Ev();
Name_Map name_map_S20900C10[] = {
  NSPAIR(_ZN9S20900C10C1Ev),
  NSPAIR(_ZN9S20900C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C11;
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
static Base_Class bases_S20900C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C11,    ABISELECT(8,4), //bcp->offset
    4, //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 _ZTI9S20900C10[];
extern void _ZN9S20900C103v19Ev();
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY vtc_S20900C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern VTBL_ENTRY _ZTV9S20900C10[];
static  VTT_ENTRY vtt_S20900C10[] = {
  {&(_ZTV9S20900C10[3]),  3,8},
  {&(_ZTV9S20900C10[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S20900C10[];
extern  VTBL_ENTRY _ZTV9S20900C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20900C10[];
Class_Descriptor cd_S20900C10 = {  "S20900C10", // class name
  bases_S20900C10, 1,
  &(vtc_S20900C10[0]), // expected_vtbl_contents
  &(vtt_S20900C10[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S20900C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20900C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20900C10),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  S20900C9  : virtual S20900C10 {
  virtual void  v20(); // _ZN8S20900C93v20Ev
  virtual void  v21(); // _ZN8S20900C93v21Ev
  virtual void  v22(); // _ZN8S20900C93v22Ev
  ~S20900C9(); // tgen
  S20900C9(); // tgen
};
//SIG(-1 S20900C9) C1{ VBC2{ VBC3{ v4 FC4{ v6 v7} Fp} v5} v1 v2 v3}


void  S20900C9 ::v20(){vfunc_called(this, "_ZN8S20900C93v20Ev");}
void  S20900C9 ::v21(){vfunc_called(this, "_ZN8S20900C93v21Ev");}
void  S20900C9 ::v22(){vfunc_called(this, "_ZN8S20900C93v22Ev");}
S20900C9 ::~S20900C9(){ note_dtor("S20900C9", this);} // tgen
S20900C9 ::S20900C9(){ note_ctor("S20900C9", this);} // tgen

static void Test_S20900C9()
{
  extern Class_Descriptor cd_S20900C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20900C9, buf);
    S20900C9 *dp, &lv = *(dp=new (buf) S20900C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20900C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20900C9)");
    check_base_class_offset(lv, (S20900C11*)(S20900C10*), ABISELECT(8,4), "S20900C9");
    check_base_class_offset(lv, (S20900C10*), 0, "S20900C9");
    test_class_info(&lv, &cd_S20900C9);
    dp->~S20900C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C9(Test_S20900C9, "S20900C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20900C9C1Ev();
extern void _ZN8S20900C9D1Ev();
Name_Map name_map_S20900C9[] = {
  NSPAIR(_ZN8S20900C9C1Ev),
  NSPAIR(_ZN8S20900C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C11;
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
extern Class_Descriptor cd_S20900C10;
extern VTBL_ENTRY _ZTI9S20900C10[];
extern  VTBL_ENTRY _ZTV9S20900C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20900C10[];
static Base_Class bases_S20900C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C11,    ABISELECT(8,4), //bcp->offset
    9, //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
    1, //immediately_derived
  0, 1},
  {&cd_S20900C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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 _ZTI8S20900C9[];
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY vtc_S20900C9[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20900C9[];
extern void _ZN9S20900C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C10__8S20900C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__9S20900C10__8S20900C9[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
static  VTT_ENTRY vtt_S20900C9[] = {
  {&(_ZTV8S20900C9[5]),  5,13},
  {&(_ZTV8S20900C9[5]),  5,13},
  {&(_ZTV8S20900C9[12]),  12,13},
  {&(_tg__ZTV9S20900C10__8S20900C9[3]),  3,4},
  {&(_tg__ZTV9S20900C11__9S20900C10__8S20900C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20900C9[];
extern  VTBL_ENTRY _ZTV8S20900C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C9[];
Class_Descriptor cd_S20900C9 = {  "S20900C9", // class name
  bases_S20900C9, 2,
  &(vtc_S20900C9[0]), // expected_vtbl_contents
  &(vtt_S20900C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20900C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20900C9),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20900C9),5, //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  S20900C7  : S20900C8 , virtual S20900C9 {
  virtual void  v23(); // _ZN8S20900C73v23Ev
  virtual void  v24(); // _ZN8S20900C73v24Ev
  virtual void  v25(); // _ZN8S20900C73v25Ev
  ~S20900C7(); // tgen
  S20900C7(); // tgen
};
//SIG(-1 S20900C7) C1{ BC2{ BC3{ BC4{ v4 v5 Fp FD Fi} v6 v7} BC4 v8 v9 v10 v11} VBC5{ VBC6{ VBC7{ v12 FC8{ v17 v18} Fp} v13} v14 v15 v16} v1 v2 v3}


void  S20900C7 ::v23(){vfunc_called(this, "_ZN8S20900C73v23Ev");}
void  S20900C7 ::v24(){vfunc_called(this, "_ZN8S20900C73v24Ev");}
void  S20900C7 ::v25(){vfunc_called(this, "_ZN8S20900C73v25Ev");}
S20900C7 ::~S20900C7(){ note_dtor("S20900C7", this);} // tgen
S20900C7 ::S20900C7(){ note_ctor("S20900C7", this);} // tgen

static void Test_S20900C7()
{
  extern Class_Descriptor cd_S20900C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S20900C7, buf);
    S20900C7 *dp, &lv = *(dp=new (buf) S20900C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S20900C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20900C7)");
    check_base_class_offset(lv, (S20900C3*)(S20900C6*)(S20900C8*), 0, "S20900C7");
    check_base_class_offset(lv, (S20900C6*)(S20900C8*), 0, "S20900C7");
    /*is_ambiguous_... S20900C8::S20900C3 */ AMB_check_base_class_offset(lv, (S20900C3*)(S20900C8*), ABISELECT(48,24), "S20900C7");
    check_base_class_offset(lv, (S20900C8*), 0, "S20900C7");
    check_base_class_offset(lv, (S20900C11*)(S20900C10*), ABISELECT(96,52), "S20900C7");
    check_base_class_offset(lv, (S20900C10*)(S20900C9*), ABISELECT(88,48), "S20900C7");
    check_base_class_offset(lv, (S20900C9*), ABISELECT(88,48), "S20900C7");
    test_class_info(&lv, &cd_S20900C7);
    dp->~S20900C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C7(Test_S20900C7, "S20900C7", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S20900C7C1Ev();
extern void _ZN8S20900C7D1Ev();
Name_Map name_map_S20900C7[] = {
  NSPAIR(_ZN8S20900C7C1Ev),
  NSPAIR(_ZN8S20900C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C6;
extern VTBL_ENTRY _ZTI8S20900C6[];
extern  VTBL_ENTRY _ZTV8S20900C6[];
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C8;
extern VTBL_ENTRY _ZTI8S20900C8[];
extern  VTBL_ENTRY _ZTV8S20900C8[];
extern Class_Descriptor cd_S20900C11;
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
extern Class_Descriptor cd_S20900C10;
extern VTBL_ENTRY _ZTI9S20900C10[];
extern  VTBL_ENTRY _ZTV9S20900C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20900C10[];
extern Class_Descriptor cd_S20900C9;
extern VTBL_ENTRY _ZTI8S20900C9[];
extern  VTBL_ENTRY _ZTV8S20900C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C9[];
static Base_Class bases_S20900C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S20900C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S20900C3,    ABISELECT(48,24), //bcp->offset
    16, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S20900C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S20900C11,    ABISELECT(96,52), //bcp->offset
    32, //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
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20900C10,    ABISELECT(88,48), //bcp->offset
    -1, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20900C9,    ABISELECT(88,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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 _ZTI8S20900C7[];
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY vtc_S20900C7[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20900C7[];
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C7[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C9__8S20900C7[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN9S20900C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C10__8S20900C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__9S20900C10__8S20900C7[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
static  VTT_ENTRY vtt_S20900C7[] = {
  {&(_ZTV8S20900C7[5]),  5,36},
  {&(_ZTV8S20900C7[28]),  28,36},
  {&(_ZTV8S20900C7[28]),  28,36},
  {&(_ZTV8S20900C7[35]),  35,36},
  {&(_tg__ZTV8S20900C9__8S20900C7[5]),  5,9},
  {&(_tg__ZTV8S20900C9__8S20900C7[5]),  5,9},
  {&(_tg__ZTV9S20900C11__8S20900C9__8S20900C7[3]),  3,4},
  {&(_tg__ZTV9S20900C10__8S20900C7[3]),  3,4},
  {&(_tg__ZTV9S20900C11__9S20900C10__8S20900C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20900C7[];
extern  VTBL_ENTRY _ZTV8S20900C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C7[];
Class_Descriptor cd_S20900C7 = {  "S20900C7", // class name
  bases_S20900C7, 7,
  &(vtc_S20900C7[0]), // expected_vtbl_contents
  &(vtt_S20900C7[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S20900C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20900C7),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20900C7),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20900C4  : S20900C5 , S20900C7 {
  virtual  ~S20900C4(); // _ZN8S20900C4D2Ev
  virtual void  v26(); // _ZN8S20900C43v26Ev
  virtual void  v27(); // _ZN8S20900C43v27Ev
  virtual void  v28(); // _ZN8S20900C43v28Ev
  virtual void  v29(); // _ZN8S20900C43v29Ev
  virtual void  v30(); // _ZN8S20900C43v30Ev
  virtual void  v31(); // _ZN8S20900C43v31Ev
  S20900C4(); // tgen
};
//SIG(-1 S20900C4) C1{ BC2{ v7 v8 v9 FC3{ BC4{ v10 v11 Fp FD Fi} v12 v13}[3] Fp Fs:8} BC5{ BC6{ BC3 BC4 v14 v15 v16 v17} VBC7{ VBC8{ VBC9{ v18 FC10{ v26 v27} Fp} v19} v20 v21 v22} v23 v24 v25} vd v1 v2 v3 v4 v5 v6}


 S20900C4 ::~S20900C4(){ note_dtor("S20900C4", this);}
void  S20900C4 ::v26(){vfunc_called(this, "_ZN8S20900C43v26Ev");}
void  S20900C4 ::v27(){vfunc_called(this, "_ZN8S20900C43v27Ev");}
void  S20900C4 ::v28(){vfunc_called(this, "_ZN8S20900C43v28Ev");}
void  S20900C4 ::v29(){vfunc_called(this, "_ZN8S20900C43v29Ev");}
void  S20900C4 ::v30(){vfunc_called(this, "_ZN8S20900C43v30Ev");}
void  S20900C4 ::v31(){vfunc_called(this, "_ZN8S20900C43v31Ev");}
S20900C4 ::S20900C4(){ note_ctor("S20900C4", this);} // tgen

static void Test_S20900C4()
{
  extern Class_Descriptor cd_S20900C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,38)];
    init_test(&cd_S20900C4, buf);
    S20900C4 *dp, &lv = *(dp=new (buf) S20900C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,148), "sizeof(S20900C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20900C4)");
    check_base_class_offset(lv, (S20900C5*), 0, "S20900C4");
    check_base_class_offset(lv, (S20900C3*)(S20900C6*)(S20900C8*)(S20900C7*), ABISELECT(176,84), "S20900C4");
    check_base_class_offset(lv, (S20900C6*)(S20900C8*)(S20900C7*), ABISELECT(176,84), "S20900C4");
    /*is_ambiguous_... S20900C8::S20900C3 */ AMB_check_base_class_offset(lv, (S20900C3*)(S20900C8*)(S20900C7*), ABISELECT(224,108), "S20900C4");
    check_base_class_offset(lv, (S20900C8*)(S20900C7*), ABISELECT(176,84), "S20900C4");
    check_base_class_offset(lv, (S20900C11*)(S20900C10*), ABISELECT(272,136), "S20900C4");
    check_base_class_offset(lv, (S20900C10*)(S20900C9*), ABISELECT(264,132), "S20900C4");
    check_base_class_offset(lv, (S20900C9*)(S20900C7*), ABISELECT(264,132), "S20900C4");
    check_base_class_offset(lv, (S20900C7*), ABISELECT(176,84), "S20900C4");
    test_class_info(&lv, &cd_S20900C4);
    dp->~S20900C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C4(Test_S20900C4, "S20900C4", ABISELECT(304,148));

#else // __cplusplus

extern void _ZN8S20900C4C1Ev();
extern void _ZN8S20900C4D2Ev();
Name_Map name_map_S20900C4[] = {
  NSPAIR(_ZN8S20900C4C1Ev),
  NSPAIR(_ZN8S20900C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C5;
extern VTBL_ENTRY _ZTI8S20900C5[];
extern  VTBL_ENTRY _ZTV8S20900C5[];
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C6;
extern VTBL_ENTRY _ZTI8S20900C6[];
extern  VTBL_ENTRY _ZTV8S20900C6[];
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C8;
extern VTBL_ENTRY _ZTI8S20900C8[];
extern  VTBL_ENTRY _ZTV8S20900C8[];
extern Class_Descriptor cd_S20900C11;
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
extern Class_Descriptor cd_S20900C10;
extern VTBL_ENTRY _ZTI9S20900C10[];
extern  VTBL_ENTRY _ZTV9S20900C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20900C10[];
extern Class_Descriptor cd_S20900C9;
extern VTBL_ENTRY _ZTI8S20900C9[];
extern  VTBL_ENTRY _ZTV8S20900C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C9[];
extern Class_Descriptor cd_S20900C7;
extern VTBL_ENTRY _ZTI8S20900C7[];
extern  VTBL_ENTRY _ZTV8S20900C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C7[];
static Base_Class bases_S20900C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20900C3,    ABISELECT(176,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S20900C6,    ABISELECT(176,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S20900C3,    ABISELECT(224,108), //bcp->offset
    32, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S20900C8,    ABISELECT(176,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S20900C11,    ABISELECT(272,136), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //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
    6, //immediately_derived
  0, 1},
  {&cd_S20900C10,    ABISELECT(264,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20900C9,    ABISELECT(264,132), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //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
    8, //immediately_derived
  0, 1},
  {&cd_S20900C7,    ABISELECT(176,84), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20900C4[];
extern void _ZN8S20900C52v9Ev();
extern void _ZN8S20900C53v10Ev();
extern void _ZN8S20900C53v11Ev();
extern void _ZN8S20900C4D1Ev();
extern void _ZN8S20900C4D0Ev();
extern void _ZN8S20900C43v26Ev();
extern void _ZN8S20900C43v27Ev();
extern void _ZN8S20900C43v28Ev();
extern void _ZN8S20900C43v29Ev();
extern void _ZN8S20900C43v30Ev();
extern void _ZN8S20900C43v31Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY vtc_S20900C4[] = {
  ABISELECT(272,136),
  ABISELECT(264,132),
  ABISELECT(264,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN8S20900C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20900C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20900C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v31Ev,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-176,-84),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
  ABISELECT(-224,-108),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
  0,
  ABISELECT(-272,-136),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20900C4[];
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C7__8S20900C4[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C7__8S20900C4[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C7__8S20900C4[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C4[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C9__8S20900C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN9S20900C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C10__8S20900C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__9S20900C10__8S20900C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
static  VTT_ENTRY vtt_S20900C4[] = {
  {&(_ZTV8S20900C4[5]),  5,52},
  {&(_tg__ZTV8S20900C7__8S20900C4[5]),  5,16},
  {&(_tg__ZTV8S20900C9__8S20900C7__8S20900C4[8]),  8,12},
  {&(_tg__ZTV8S20900C9__8S20900C7__8S20900C4[8]),  8,12},
  {&(_tg__ZTV9S20900C11__8S20900C7__8S20900C4[3]),  3,4},
  {&(_ZTV8S20900C4[21]),  21,52},
  {&(_ZTV8S20900C4[44]),  44,52},
  {&(_ZTV8S20900C4[44]),  44,52},
  {&(_ZTV8S20900C4[51]),  51,52},
  {&(_tg__ZTV8S20900C9__8S20900C4[5]),  5,9},
  {&(_tg__ZTV8S20900C9__8S20900C4[5]),  5,9},
  {&(_tg__ZTV9S20900C11__8S20900C9__8S20900C4[3]),  3,4},
  {&(_tg__ZTV9S20900C10__8S20900C4[3]),  3,4},
  {&(_tg__ZTV9S20900C11__9S20900C10__8S20900C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20900C4[];
extern  VTBL_ENTRY _ZTV8S20900C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C4[];
Class_Descriptor cd_S20900C4 = {  "S20900C4", // class name
  bases_S20900C4, 9,
  &(vtc_S20900C4[0]), // expected_vtbl_contents
  &(vtt_S20900C4[0]), // expected_vtt_contents
  ABISELECT(304,148), // object size
  NSPAIRA(_ZTI8S20900C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20900C4),52, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20900C4),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20900C2  : virtual S20900C3 , virtual S20900C4 {
  void *s20900c2f0;
  virtual  ~S20900C2(); // _ZN8S20900C2D2Ev
  virtual void  v32(); // _ZN8S20900C23v32Ev
  virtual void  v33(); // _ZN8S20900C23v33Ev
  virtual void  v34(); // _ZN8S20900C23v34Ev
  virtual void  v35(); // _ZN8S20900C23v35Ev
  virtual void  v36(); // _ZN8S20900C23v36Ev
  virtual void  v37(); // _ZN8S20900C23v37Ev
  virtual void  v38(); // _ZN8S20900C23v38Ev
  S20900C2(); // tgen
};
//SIG(-1 S20900C2) C1{ VBC2{ v8 v9 Fp FD Fi} VBC3{ BC4{ v10 v11 v12 FC5{ BC2 v13 v14}[3] Fp Fs:8} BC6{ BC7{ BC5 BC2 v15 v16 v17 v18} VBC8{ VBC9{ VBC10{ v19 FC11{ v33 v34} Fp} v20} v21 v22 v23} v24 v25 v26} vd v27 v28 v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 v7 Fp}


 S20900C2 ::~S20900C2(){ note_dtor("S20900C2", this);}
void  S20900C2 ::v32(){vfunc_called(this, "_ZN8S20900C23v32Ev");}
void  S20900C2 ::v33(){vfunc_called(this, "_ZN8S20900C23v33Ev");}
void  S20900C2 ::v34(){vfunc_called(this, "_ZN8S20900C23v34Ev");}
void  S20900C2 ::v35(){vfunc_called(this, "_ZN8S20900C23v35Ev");}
void  S20900C2 ::v36(){vfunc_called(this, "_ZN8S20900C23v36Ev");}
void  S20900C2 ::v37(){vfunc_called(this, "_ZN8S20900C23v37Ev");}
void  S20900C2 ::v38(){vfunc_called(this, "_ZN8S20900C23v38Ev");}
S20900C2 ::S20900C2(){ note_ctor("S20900C2", this);} // tgen

static void Test_S20900C2()
{
  extern Class_Descriptor cd_S20900C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,45)];
    init_test(&cd_S20900C2, buf);
    S20900C2 *dp, &lv = *(dp=new (buf) S20900C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,176), "sizeof(S20900C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20900C2)");
    /*is_ambiguous_... S20900C2::S20900C3 */ AMB_check_base_class_offset(lv, (S20900C3*), ABISELECT(16,8), "S20900C2");
    check_base_class_offset(lv, (S20900C5*)(S20900C4*), ABISELECT(64,32), "S20900C2");
    check_base_class_offset(lv, (S20900C3*)(S20900C6*)(S20900C8*)(S20900C7*)(S20900C4*), ABISELECT(240,116), "S20900C2");
    check_base_class_offset(lv, (S20900C6*)(S20900C8*)(S20900C7*)(S20900C4*), ABISELECT(240,116), "S20900C2");
    /*is_ambiguous_... S20900C8::S20900C3 */ AMB_check_base_class_offset(lv, (S20900C3*)(S20900C8*)(S20900C7*)(S20900C4*), ABISELECT(288,140), "S20900C2");
    check_base_class_offset(lv, (S20900C8*)(S20900C7*)(S20900C4*), ABISELECT(240,116), "S20900C2");
    check_base_class_offset(lv, (S20900C11*)(S20900C10*), ABISELECT(328,164), "S20900C2");
    check_base_class_offset(lv, (S20900C10*)(S20900C9*), 0, "S20900C2");
    check_base_class_offset(lv, (S20900C9*)(S20900C7*)(S20900C4*), 0, "S20900C2");
    check_base_class_offset(lv, (S20900C7*)(S20900C4*), ABISELECT(240,116), "S20900C2");
    check_base_class_offset(lv, (S20900C4*), ABISELECT(64,32), "S20900C2");
    check_field_offset(lv, s20900c2f0, ABISELECT(8,4), "S20900C2.s20900c2f0");
    test_class_info(&lv, &cd_S20900C2);
    dp->~S20900C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C2(Test_S20900C2, "S20900C2", ABISELECT(352,176));

#else // __cplusplus

extern void _ZN8S20900C2C1Ev();
extern void _ZN8S20900C2D2Ev();
Name_Map name_map_S20900C2[] = {
  NSPAIR(_ZN8S20900C2C1Ev),
  NSPAIR(_ZN8S20900C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C5;
extern VTBL_ENTRY _ZTI8S20900C5[];
extern  VTBL_ENTRY _ZTV8S20900C5[];
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C6;
extern VTBL_ENTRY _ZTI8S20900C6[];
extern  VTBL_ENTRY _ZTV8S20900C6[];
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C8;
extern VTBL_ENTRY _ZTI8S20900C8[];
extern  VTBL_ENTRY _ZTV8S20900C8[];
extern Class_Descriptor cd_S20900C11;
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
extern Class_Descriptor cd_S20900C10;
extern VTBL_ENTRY _ZTI9S20900C10[];
extern  VTBL_ENTRY _ZTV9S20900C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20900C10[];
extern Class_Descriptor cd_S20900C9;
extern VTBL_ENTRY _ZTI8S20900C9[];
extern  VTBL_ENTRY _ZTV8S20900C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C9[];
extern Class_Descriptor cd_S20900C7;
extern VTBL_ENTRY _ZTI8S20900C7[];
extern  VTBL_ENTRY _ZTV8S20900C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C7[];
extern Class_Descriptor cd_S20900C4;
extern VTBL_ENTRY _ZTI8S20900C4[];
extern  VTBL_ENTRY _ZTV8S20900C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C4[];
static Base_Class bases_S20900C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C3,    ABISELECT(16,8), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //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_S20900C5,    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
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20900C3,    ABISELECT(240,116), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S20900C6,    ABISELECT(240,116), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S20900C3,    ABISELECT(288,140), //bcp->offset
    83, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20900C8,    ABISELECT(240,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20900C11,    ABISELECT(328,164), //bcp->offset
    87, //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
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20900C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20900C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20900C7,    ABISELECT(240,116), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20900C4,    ABISELECT(64,32), //bcp->offset
    30, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20900C2[];
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
extern void _ZN8S20900C2D1Ev();
extern void _ZN8S20900C2D0Ev();
extern void _ZN8S20900C23v32Ev();
extern void _ZN8S20900C23v33Ev();
extern void _ZN8S20900C23v34Ev();
extern void _ZN8S20900C23v35Ev();
extern void _ZN8S20900C23v36Ev();
extern void _ZN8S20900C23v37Ev();
extern void _ZN8S20900C23v38Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C52v9Ev();
extern void _ZN8S20900C53v10Ev();
extern void _ZN8S20900C53v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S20900C2D1Ev,_ZTv0_n36_N8S20900C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20900C2D1Ev,_ZThn32_N8S20900C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20900C2D0Ev,_ZTv0_n36_N8S20900C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20900C2D0Ev,_ZThn32_N8S20900C2D0Ev)() __attribute__((weak));
extern void _ZN8S20900C43v26Ev();
extern void _ZN8S20900C43v27Ev();
extern void _ZN8S20900C43v28Ev();
extern void _ZN8S20900C43v29Ev();
extern void _ZN8S20900C43v30Ev();
extern void _ZN8S20900C43v31Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY vtc_S20900C2[] = {
  0,
  ABISELECT(64,32),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(328,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20900C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20900C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v33Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v35Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v36Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v37Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v38Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  0,
  0,
  0,
  ABISELECT(264,132),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN8S20900C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20900C2D1Ev,_ZTv0_n36_N8S20900C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20900C2D0Ev,_ZTv0_n36_N8S20900C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20900C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v31Ev,
  ABISELECT(88,48),
  ABISELECT(-240,-116),
  ABISELECT(-240,-116),
  ABISELECT(-240,-116),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
  ABISELECT(-288,-140),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  0,
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20900C2[];
extern void _ZN8S20900C52v9Ev();
extern void _ZN8S20900C53v10Ev();
extern void _ZN8S20900C53v11Ev();
extern void _ZN8S20900C4D1Ev();
extern void _ZN8S20900C4D0Ev();
extern void _ZN8S20900C43v26Ev();
extern void _ZN8S20900C43v27Ev();
extern void _ZN8S20900C43v28Ev();
extern void _ZN8S20900C43v29Ev();
extern void _ZN8S20900C43v30Ev();
extern void _ZN8S20900C43v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C4__8S20900C2[] = {
  ABISELECT(264,132),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN8S20900C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20900C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20900C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v31Ev,
};
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C78S20900C4__8S20900C2[] = {
  ABISELECT(88,48),
  ABISELECT(-240,-116),
  ABISELECT(-240,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C78S20900C4__8S20900C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(328,164),
  ABISELECT(240,116),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C78S20900C4__8S20900C2[] = {
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C7__8S20900C4__8S20900C2[] = {
  ABISELECT(88,48),
  ABISELECT(-240,-116),
  ABISELECT(-240,-116),
  ABISELECT(-176,-84),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C4__8S20900C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(328,164),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C4__8S20900C2[] = {
  0,
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C2[] = {
  0,
  0,
  ABISELECT(328,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C9__8S20900C2[] = {
  0,
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN9S20900C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C10__8S20900C2[] = {
  ABISELECT(328,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__9S20900C10__8S20900C2[] = {
  0,
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
static  VTT_ENTRY vtt_S20900C2[] = {
  {&(_ZTV8S20900C2[11]),  11,91},
  {&(_ZTV8S20900C2[28]),  28,91},
  {&(_ZTV8S20900C2[56]),  56,91},
  {&(_ZTV8S20900C2[72]),  72,91},
  {&(_ZTV8S20900C2[85]),  85,91},
  {&(_ZTV8S20900C2[11]),  11,91},
  {&(_ZTV8S20900C2[11]),  11,91},
  {&(_ZTV8S20900C2[90]),  90,91},
  {&(_tg__ZTV8S20900C4__8S20900C2[5]),  5,16},
  {&(_tg__ZTV8S20900C78S20900C4__8S20900C2[5]),  5,16},
  {&(_tg__ZTV8S20900C9__8S20900C78S20900C4__8S20900C2[8]),  8,12},
  {&(_tg__ZTV8S20900C9__8S20900C78S20900C4__8S20900C2[8]),  8,12},
  {&(_tg__ZTV9S20900C11__8S20900C78S20900C4__8S20900C2[3]),  3,4},
  {&(_tg__ZTV8S20900C7__8S20900C4__8S20900C2[5]),  5,16},
  {&(_tg__ZTV8S20900C9__8S20900C4__8S20900C2[8]),  8,12},
  {&(_tg__ZTV8S20900C9__8S20900C4__8S20900C2[8]),  8,12},
  {&(_tg__ZTV9S20900C11__8S20900C4__8S20900C2[3]),  3,4},
  {&(_tg__ZTV8S20900C9__8S20900C2[5]),  5,9},
  {&(_tg__ZTV8S20900C9__8S20900C2[5]),  5,9},
  {&(_tg__ZTV9S20900C11__8S20900C9__8S20900C2[3]),  3,4},
  {&(_tg__ZTV9S20900C10__8S20900C2[3]),  3,4},
  {&(_tg__ZTV9S20900C11__9S20900C10__8S20900C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20900C2[];
extern  VTBL_ENTRY _ZTV8S20900C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C2[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20900C2D0Ev,_ZTv0_n36_N8S20900C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20900C2D0Ev,_ZThn32_N8S20900C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20900C2D1Ev,_ZTv0_n36_N8S20900C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20900C2D1Ev,_ZThn32_N8S20900C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20900C2 = {  "S20900C2", // class name
  bases_S20900C2, 11,
  &(vtc_S20900C2[0]), // expected_vtbl_contents
  &(vtt_S20900C2[0]), // expected_vtt_contents
  ABISELECT(352,176), // object size
  NSPAIRA(_ZTI8S20900C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20900C2),91, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20900C2),22, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20900C13  : S20900C11 , S20900C10 {
  int s20900c13f0;
  virtual  ~S20900C13(); // _ZN9S20900C13D2Ev
  virtual void  v39(); // _ZN9S20900C133v39Ev
  S20900C13(); // tgen
};
//SIG(-1 S20900C13) C1{ BC2{ v2 FC3{ v4 v5} Fp} BC4{ VBC2 v3} vd v1 Fi}


 S20900C13 ::~S20900C13(){ note_dtor("S20900C13", this);}
void  S20900C13 ::v39(){vfunc_called(this, "_ZN9S20900C133v39Ev");}
S20900C13 ::S20900C13(){ note_ctor("S20900C13", this);} // tgen

static void Test_S20900C13()
{
  extern Class_Descriptor cd_S20900C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20900C13, buf);
    S20900C13 *dp, &lv = *(dp=new (buf) S20900C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20900C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20900C13)");
    /*is_ambiguous_... S20900C13::S20900C11 */ AMB_check_base_class_offset(lv, (S20900C11*), 0, "S20900C13");
    check_base_class_offset(lv, (S20900C11*)(S20900C10*), ABISELECT(40,20), "S20900C13");
    check_base_class_offset(lv, (S20900C10*), ABISELECT(24,12), "S20900C13");
    check_field_offset(lv, s20900c13f0, ABISELECT(32,16), "S20900C13.s20900c13f0");
    test_class_info(&lv, &cd_S20900C13);
    dp->~S20900C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C13(Test_S20900C13, "S20900C13", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S20900C13C1Ev();
extern void _ZN9S20900C13D2Ev();
Name_Map name_map_S20900C13[] = {
  NSPAIR(_ZN9S20900C13C1Ev),
  NSPAIR(_ZN9S20900C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C11;
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
extern Class_Descriptor cd_S20900C11;
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
extern Class_Descriptor cd_S20900C10;
extern VTBL_ENTRY _ZTI9S20900C10[];
extern  VTBL_ENTRY _ZTV9S20900C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20900C10[];
static Base_Class bases_S20900C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S20900C11,    ABISELECT(40,20), //bcp->offset
    11, //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
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20900C10,    ABISELECT(24,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI9S20900C13[];
extern void _ZN9S20900C113v18Ev();
extern void _ZN9S20900C13D1Ev();
extern void _ZN9S20900C13D0Ev();
extern void _ZN9S20900C133v39Ev();
extern void _ZN9S20900C103v19Ev();
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY vtc_S20900C13[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C13[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
  (VTBL_ENTRY)&_ZN9S20900C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20900C13D0Ev,
  (VTBL_ENTRY)&_ZN9S20900C133v39Ev,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20900C13[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20900C13[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern VTBL_ENTRY _ZTV9S20900C13[];
extern void _ZN9S20900C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C10__9S20900C13[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__9S20900C10__9S20900C13[] = {
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
static  VTT_ENTRY vtt_S20900C13[] = {
  {&(_ZTV9S20900C13[3]),  3,15},
  {&(_tg__ZTV9S20900C10__9S20900C13[3]),  3,4},
  {&(_tg__ZTV9S20900C11__9S20900C10__9S20900C13[3]),  3,4},
  {&(_ZTV9S20900C13[10]),  10,15},
  {&(_ZTV9S20900C13[14]),  14,15},
};
extern VTBL_ENTRY _ZTI9S20900C13[];
extern  VTBL_ENTRY _ZTV9S20900C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20900C13[];
Class_Descriptor cd_S20900C13 = {  "S20900C13", // class name
  bases_S20900C13, 3,
  &(vtc_S20900C13[0]), // expected_vtbl_contents
  &(vtt_S20900C13[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S20900C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20900C13),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20900C13),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20900C1  : virtual S20900C2 {
  ::S20900C13 s20900c1f0;
  long s20900c1f1;
  virtual void  v1(); // _ZN8S20900C12v1Ev
  virtual void  v2(); // _ZN8S20900C12v2Ev
  virtual void  v3(); // _ZN8S20900C12v3Ev
  virtual void  v4(); // _ZN8S20900C12v4Ev
  virtual void  v5(); // _ZN8S20900C12v5Ev
  virtual void  v6(); // _ZN8S20900C12v6Ev
  ~S20900C1(); // tgen
  S20900C1(); // tgen
};
//SIG(1 S20900C1) C1{ VBC2{ VBC3{ v7 v8 Fp FD Fi} VBC4{ BC5{ v9 v10 v11 FC6{ BC3 v12 v13}[3] Fp Fs:8} BC7{ BC8{ BC6 BC3 v14 v15 v16 v17} VBC9{ VBC10{ VBC11{ v18 FC12{ v40 v41} Fp} v19} v20 v21 v22} v23 v24 v25} vd v26 v27 v28 v29 v30 v31} vd v32 v33 v34 v35 v36 v37 v38 Fp} v1 v2 v3 v4 v5 v6 FC13{ BC11 BC10 vd v39 Fi} Fl}


void  S20900C1 ::v1(){vfunc_called(this, "_ZN8S20900C12v1Ev");}
void  S20900C1 ::v2(){vfunc_called(this, "_ZN8S20900C12v2Ev");}
void  S20900C1 ::v3(){vfunc_called(this, "_ZN8S20900C12v3Ev");}
void  S20900C1 ::v4(){vfunc_called(this, "_ZN8S20900C12v4Ev");}
void  S20900C1 ::v5(){vfunc_called(this, "_ZN8S20900C12v5Ev");}
void  S20900C1 ::v6(){vfunc_called(this, "_ZN8S20900C12v6Ev");}
S20900C1 ::~S20900C1(){ note_dtor("S20900C1", this);} // tgen
S20900C1 ::S20900C1(){ note_ctor("S20900C1", this);} // tgen

static void Test_S20900C1()
{
  extern Class_Descriptor cd_S20900C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,55)];
    init_test(&cd_S20900C1, buf);
    S20900C1 *dp, &lv = *(dp=new (buf) S20900C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,216), "sizeof(S20900C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20900C1)");
    /*is_ambiguous_... S20900C2::S20900C3 */ AMB_check_base_class_offset(lv, (S20900C3*)(S20900C2*), ABISELECT(96,48), "S20900C1");
    check_base_class_offset(lv, (S20900C5*)(S20900C4*), ABISELECT(144,72), "S20900C1");
    check_base_class_offset(lv, (S20900C3*)(S20900C6*)(S20900C8*)(S20900C7*)(S20900C4*), ABISELECT(320,156), "S20900C1");
    check_base_class_offset(lv, (S20900C6*)(S20900C8*)(S20900C7*)(S20900C4*), ABISELECT(320,156), "S20900C1");
    /*is_ambiguous_... S20900C8::S20900C3 */ AMB_check_base_class_offset(lv, (S20900C3*)(S20900C8*)(S20900C7*)(S20900C4*), ABISELECT(368,180), "S20900C1");
    check_base_class_offset(lv, (S20900C8*)(S20900C7*)(S20900C4*), ABISELECT(320,156), "S20900C1");
    check_base_class_offset(lv, (S20900C11*)(S20900C10*), ABISELECT(408,204), "S20900C1");
    check_base_class_offset(lv, (S20900C10*)(S20900C9*), 0, "S20900C1");
    check_base_class_offset(lv, (S20900C9*)(S20900C7*)(S20900C4*), 0, "S20900C1");
    check_base_class_offset(lv, (S20900C7*)(S20900C4*), ABISELECT(320,156), "S20900C1");
    check_base_class_offset(lv, (S20900C4*)(S20900C2*), ABISELECT(144,72), "S20900C1");
    check_base_class_offset(lv, (S20900C2*), ABISELECT(80,40), "S20900C1");
    check_field_offset(lv, s20900c1f0, ABISELECT(8,4), "S20900C1.s20900c1f0");
    check_field_offset(lv, s20900c1f1, ABISELECT(72,36), "S20900C1.s20900c1f1");
    test_class_info(&lv, &cd_S20900C1);
    dp->~S20900C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20900C1(Test_S20900C1, "S20900C1", ABISELECT(432,216));

#else // __cplusplus

extern void _ZN8S20900C1C1Ev();
extern void _ZN8S20900C1D1Ev();
Name_Map name_map_S20900C1[] = {
  NSPAIR(_ZN8S20900C1C1Ev),
  NSPAIR(_ZN8S20900C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C5;
extern VTBL_ENTRY _ZTI8S20900C5[];
extern  VTBL_ENTRY _ZTV8S20900C5[];
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C6;
extern VTBL_ENTRY _ZTI8S20900C6[];
extern  VTBL_ENTRY _ZTV8S20900C6[];
extern Class_Descriptor cd_S20900C3;
extern VTBL_ENTRY _ZTI8S20900C3[];
extern  VTBL_ENTRY _ZTV8S20900C3[];
extern Class_Descriptor cd_S20900C8;
extern VTBL_ENTRY _ZTI8S20900C8[];
extern  VTBL_ENTRY _ZTV8S20900C8[];
extern Class_Descriptor cd_S20900C11;
extern VTBL_ENTRY _ZTI9S20900C11[];
extern  VTBL_ENTRY _ZTV9S20900C11[];
extern Class_Descriptor cd_S20900C10;
extern VTBL_ENTRY _ZTI9S20900C10[];
extern  VTBL_ENTRY _ZTV9S20900C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20900C10[];
extern Class_Descriptor cd_S20900C9;
extern VTBL_ENTRY _ZTI8S20900C9[];
extern  VTBL_ENTRY _ZTV8S20900C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C9[];
extern Class_Descriptor cd_S20900C7;
extern VTBL_ENTRY _ZTI8S20900C7[];
extern  VTBL_ENTRY _ZTV8S20900C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C7[];
extern Class_Descriptor cd_S20900C4;
extern VTBL_ENTRY _ZTI8S20900C4[];
extern  VTBL_ENTRY _ZTV8S20900C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C4[];
extern Class_Descriptor cd_S20900C2;
extern VTBL_ENTRY _ZTI8S20900C2[];
extern  VTBL_ENTRY _ZTV8S20900C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C2[];
static Base_Class bases_S20900C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20900C3,    ABISELECT(96,48), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //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
    11, //immediately_derived
  0, 1},
  {&cd_S20900C5,    ABISELECT(144,72), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S20900C3,    ABISELECT(320,156), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S20900C6,    ABISELECT(320,156), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S20900C3,    ABISELECT(368,180), //bcp->offset
    115, //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
    8, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20900C8,    ABISELECT(320,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20900C11,    ABISELECT(408,204), //bcp->offset
    119, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20900C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20900C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20900C7,    ABISELECT(320,156), //bcp->offset
    99, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20900C4,    ABISELECT(144,72), //bcp->offset
    62, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20900C2,    ABISELECT(80,40), //bcp->offset
    24, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20900C1[];
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
extern void _ZN8S20900C12v1Ev();
extern void _ZN8S20900C12v2Ev();
extern void _ZN8S20900C12v3Ev();
extern void _ZN8S20900C12v4Ev();
extern void _ZN8S20900C12v5Ev();
extern void _ZN8S20900C12v6Ev();
extern void _ZN8S20900C1D1Ev();
extern void _ZN8S20900C1D0Ev();
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
extern void ABISELECT(_ZTv0_n96_N8S20900C1D1Ev,_ZTv0_n48_N8S20900C1D1Ev)();
extern void ABISELECT(_ZThn80_N8S20900C1D1Ev,_ZThn40_N8S20900C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20900C1D0Ev,_ZTv0_n48_N8S20900C1D0Ev)();
extern void ABISELECT(_ZThn80_N8S20900C1D0Ev,_ZThn40_N8S20900C1D0Ev)() __attribute__((weak));
extern void _ZN8S20900C23v32Ev();
extern void _ZN8S20900C23v33Ev();
extern void _ZN8S20900C23v34Ev();
extern void _ZN8S20900C23v35Ev();
extern void _ZN8S20900C23v36Ev();
extern void _ZN8S20900C23v37Ev();
extern void _ZN8S20900C23v38Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C52v9Ev();
extern void _ZN8S20900C53v10Ev();
extern void _ZN8S20900C53v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S20900C1D1Ev,_ZTv0_n36_N8S20900C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S20900C1D1Ev,_ZThn72_N8S20900C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20900C1D0Ev,_ZTv0_n36_N8S20900C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S20900C1D0Ev,_ZThn72_N8S20900C1D0Ev)() __attribute__((weak));
extern void _ZN8S20900C43v26Ev();
extern void _ZN8S20900C43v27Ev();
extern void _ZN8S20900C43v28Ev();
extern void _ZN8S20900C43v29Ev();
extern void _ZN8S20900C43v30Ev();
extern void _ZN8S20900C43v31Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY vtc_S20900C1[] = {
  0,
  ABISELECT(144,72),
  ABISELECT(96,48),
  ABISELECT(80,40),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(408,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C1[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20900C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20900C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20900C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20900C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20900C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20900C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20900C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20900C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(64,32),
  ABISELECT(16,8),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(328,164),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S20900C1[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20900C1D1Ev,_ZTv0_n48_N8S20900C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20900C1D0Ev,_ZTv0_n48_N8S20900C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20900C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v33Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v35Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v36Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v37Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v38Ev,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20900C1[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-72),
  0,
  0,
  0,
  ABISELECT(264,132),
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S20900C1[0]),
  (VTBL_ENTRY)&_ZN8S20900C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20900C1D1Ev,_ZTv0_n36_N8S20900C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20900C1D0Ev,_ZTv0_n36_N8S20900C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20900C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v31Ev,
  ABISELECT(88,48),
  ABISELECT(-320,-156),
  ABISELECT(-320,-156),
  ABISELECT(-320,-156),
  (VTBL_ENTRY)&(_ZTI8S20900C1[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
  ABISELECT(-368,-180),
  (VTBL_ENTRY)&(_ZTI8S20900C1[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  0,
  ABISELECT(-408,-204),
  (VTBL_ENTRY)&(_ZTI8S20900C1[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20900C1[];
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
extern void _ZN8S20900C2D1Ev();
extern void _ZN8S20900C2D0Ev();
extern void _ZN8S20900C23v32Ev();
extern void _ZN8S20900C23v33Ev();
extern void _ZN8S20900C23v34Ev();
extern void _ZN8S20900C23v35Ev();
extern void _ZN8S20900C23v36Ev();
extern void _ZN8S20900C23v37Ev();
extern void _ZN8S20900C23v38Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C2__8S20900C1[] = {
  ABISELECT(-80,-40),
  ABISELECT(64,32),
  ABISELECT(16,8),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(328,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20900C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20900C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v33Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v35Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v36Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v37Ev,
  (VTBL_ENTRY)&_ZN8S20900C23v38Ev,
};
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C3__8S20900C2__8S20900C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
};
extern void _ZN8S20900C52v9Ev();
extern void _ZN8S20900C53v10Ev();
extern void _ZN8S20900C53v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S20900C2D1Ev,_ZTv0_n36_N8S20900C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20900C2D1Ev,_ZThn32_N8S20900C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20900C2D0Ev,_ZTv0_n36_N8S20900C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20900C2D0Ev,_ZThn32_N8S20900C2D0Ev)() __attribute__((weak));
extern void _ZN8S20900C43v26Ev();
extern void _ZN8S20900C43v27Ev();
extern void _ZN8S20900C43v28Ev();
extern void _ZN8S20900C43v29Ev();
extern void _ZN8S20900C43v30Ev();
extern void _ZN8S20900C43v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C4__8S20900C2__8S20900C1[] = {
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  0,
  0,
  0,
  ABISELECT(264,132),
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN8S20900C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20900C2D1Ev,_ZTv0_n36_N8S20900C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20900C2D0Ev,_ZTv0_n36_N8S20900C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20900C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v31Ev,
};
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C78S20900C4__8S20900C2__8S20900C1[] = {
  ABISELECT(88,48),
  ABISELECT(-320,-156),
  ABISELECT(-320,-156),
  ABISELECT(-240,-116),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
};
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C38S20900C88S20900C78S20900C4__A2__8S20900C2__8S20900C1[] = {
  ABISELECT(-288,-140),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C2__8S20900C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(408,204),
  ABISELECT(80,40),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C2__8S20900C1[] = {
  0,
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI8S20900C2[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN8S20900C52v9Ev();
extern void _ZN8S20900C53v10Ev();
extern void _ZN8S20900C53v11Ev();
extern void _ZN8S20900C4D1Ev();
extern void _ZN8S20900C4D0Ev();
extern void _ZN8S20900C43v26Ev();
extern void _ZN8S20900C43v27Ev();
extern void _ZN8S20900C43v28Ev();
extern void _ZN8S20900C43v29Ev();
extern void _ZN8S20900C43v30Ev();
extern void _ZN8S20900C43v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C4__8S20900C1[] = {
  ABISELECT(264,132),
  ABISELECT(-144,-72),
  ABISELECT(-144,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN8S20900C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20900C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20900C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20900C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20900C43v31Ev,
};
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C78S20900C4__8S20900C1[] = {
  ABISELECT(88,48),
  ABISELECT(-320,-156),
  ABISELECT(-320,-156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C78S20900C4__8S20900C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(408,204),
  ABISELECT(320,156),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C78S20900C4__8S20900C1[] = {
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20900C7[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN8S20900C32v7Ev();
extern void _ZN8S20900C32v8Ev();
extern void _ZN8S20900C63v12Ev();
extern void _ZN8S20900C63v13Ev();
extern void _ZN8S20900C83v14Ev();
extern void _ZN8S20900C83v15Ev();
extern void _ZN8S20900C83v16Ev();
extern void _ZN8S20900C83v17Ev();
extern void _ZN8S20900C73v23Ev();
extern void _ZN8S20900C73v24Ev();
extern void _ZN8S20900C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C7__8S20900C4__8S20900C1[] = {
  ABISELECT(88,48),
  ABISELECT(-320,-156),
  ABISELECT(-320,-156),
  ABISELECT(-176,-84),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN8S20900C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20900C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20900C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20900C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20900C73v25Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C4__8S20900C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(408,204),
  ABISELECT(144,72),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C4__8S20900C1[] = {
  0,
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI8S20900C4[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN9S20900C103v19Ev();
extern void _ZN8S20900C93v20Ev();
extern void _ZN8S20900C93v21Ev();
extern void _ZN8S20900C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20900C9__8S20900C1[] = {
  0,
  0,
  ABISELECT(408,204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20900C93v22Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__8S20900C9__8S20900C1[] = {
  0,
  ABISELECT(-408,-204),
  (VTBL_ENTRY)&(_ZTI8S20900C9[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
extern void _ZN9S20900C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C10__8S20900C1[] = {
  ABISELECT(408,204),
  0,
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C103v19Ev,
};
extern void _ZN9S20900C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20900C11__9S20900C10__8S20900C1[] = {
  0,
  ABISELECT(-408,-204),
  (VTBL_ENTRY)&(_ZTI9S20900C10[0]),
  (VTBL_ENTRY)&_ZN9S20900C113v18Ev,
};
static  VTT_ENTRY vtt_S20900C1[] = {
  {&(_ZTV8S20900C1[12]),  12,123},
  {&(_ZTV8S20900C1[43]),  43,123},
  {&(_ZTV8S20900C1[60]),  60,123},
  {&(_ZTV8S20900C1[88]),  88,123},
  {&(_ZTV8S20900C1[104]),  104,123},
  {&(_ZTV8S20900C1[117]),  117,123},
  {&(_ZTV8S20900C1[12]),  12,123},
  {&(_ZTV8S20900C1[12]),  12,123},
  {&(_ZTV8S20900C1[122]),  122,123},
  {&(_tg__ZTV8S20900C2__8S20900C1[11]),  11,24},
  {&(_tg__ZTV8S20900C3__8S20900C2__8S20900C1[4]),  4,6},
  {&(_tg__ZTV8S20900C4__8S20900C2__8S20900C1[26]),  26,37},
  {&(_tg__ZTV8S20900C78S20900C4__8S20900C2__8S20900C1[5]),  5,16},
  {&(_tg__ZTV8S20900C38S20900C88S20900C78S20900C4__A2__8S20900C2__8S20900C1[2]),  2,4},
  {&(_tg__ZTV8S20900C9__8S20900C2__8S20900C1[8]),  8,12},
  {&(_tg__ZTV8S20900C9__8S20900C2__8S20900C1[8]),  8,12},
  {&(_tg__ZTV9S20900C11__8S20900C2__8S20900C1[3]),  3,4},
  {&(_tg__ZTV8S20900C4__8S20900C1[5]),  5,16},
  {&(_tg__ZTV8S20900C78S20900C4__8S20900C1[5]),  5,16},
  {&(_tg__ZTV8S20900C9__8S20900C78S20900C4__8S20900C1[8]),  8,12},
  {&(_tg__ZTV8S20900C9__8S20900C78S20900C4__8S20900C1[8]),  8,12},
  {&(_tg__ZTV9S20900C11__8S20900C78S20900C4__8S20900C1[3]),  3,4},
  {&(_tg__ZTV8S20900C7__8S20900C4__8S20900C1[5]),  5,16},
  {&(_tg__ZTV8S20900C9__8S20900C4__8S20900C1[8]),  8,12},
  {&(_tg__ZTV8S20900C9__8S20900C4__8S20900C1[8]),  8,12},
  {&(_tg__ZTV9S20900C11__8S20900C4__8S20900C1[3]),  3,4},
  {&(_tg__ZTV8S20900C9__8S20900C1[5]),  5,9},
  {&(_tg__ZTV8S20900C9__8S20900C1[5]),  5,9},
  {&(_tg__ZTV9S20900C11__8S20900C9__8S20900C1[3]),  3,4},
  {&(_tg__ZTV9S20900C10__8S20900C1[3]),  3,4},
  {&(_tg__ZTV9S20900C11__9S20900C10__8S20900C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20900C1[];
extern  VTBL_ENTRY _ZTV8S20900C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20900C1[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20900C2D0Ev,_ZTv0_n36_N8S20900C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20900C2D0Ev,_ZThn32_N8S20900C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20900C2D1Ev,_ZTv0_n36_N8S20900C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20900C2D1Ev,_ZThn32_N8S20900C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20900C1D0Ev,_ZTv0_n36_N8S20900C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20900C1D0Ev,_ZThn72_N8S20900C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20900C1D1Ev,_ZTv0_n36_N8S20900C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20900C1D1Ev,_ZThn72_N8S20900C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20900C1D0Ev,_ZTv0_n48_N8S20900C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20900C1D0Ev,_ZThn40_N8S20900C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20900C1D1Ev,_ZTv0_n48_N8S20900C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20900C1D1Ev,_ZThn40_N8S20900C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20900C1 = {  "S20900C1", // class name
  bases_S20900C1, 12,
  &(vtc_S20900C1[0]), // expected_vtbl_contents
  &(vtt_S20900C1[0]), // expected_vtt_contents
  ABISELECT(432,216), // object size
  NSPAIRA(_ZTI8S20900C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20900C1),123, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20900C1),31, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4465C3  {
  int s4465c3f0[4];
  ::S4474C4_nt s4465c3f1;
  int s4465c3f2;
  char s4465c3f3;
  ::S4474C5_nt s4465c3f4;
  int s4465c3f5;
  virtual  ~S4465C3(); // _ZN7S4465C3D1Ev
  virtual void  v2(); // _ZN7S4465C32v2Ev
  virtual void  v3(); // _ZN7S4465C32v3Ev
  virtual void  v4(); // _ZN7S4465C32v4Ev
  S4465C3(); // tgen
};
//SIG(-1 S4465C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4465C3 ::~S4465C3(){ note_dtor("S4465C3", this);}
void  S4465C3 ::v2(){vfunc_called(this, "_ZN7S4465C32v2Ev");}
void  S4465C3 ::v3(){vfunc_called(this, "_ZN7S4465C32v3Ev");}
void  S4465C3 ::v4(){vfunc_called(this, "_ZN7S4465C32v4Ev");}
S4465C3 ::S4465C3(){ note_ctor("S4465C3", this);} // tgen

static void Test_S4465C3()
{
  extern Class_Descriptor cd_S4465C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4465C3, buf);
    S4465C3 *dp, &lv = *(dp=new (buf) S4465C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4465C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4465C3)");
    check_field_offset(lv, s4465c3f0, ABISELECT(8,4), "S4465C3.s4465c3f0");
    check_field_offset(lv, s4465c3f1, ABISELECT(24,20), "S4465C3.s4465c3f1");
    check_field_offset(lv, s4465c3f2, ABISELECT(40,28), "S4465C3.s4465c3f2");
    check_field_offset(lv, s4465c3f3, ABISELECT(44,32), "S4465C3.s4465c3f3");
    check_field_offset(lv, s4465c3f4, ABISELECT(48,36), "S4465C3.s4465c3f4");
    check_field_offset(lv, s4465c3f5, ABISELECT(64,48), "S4465C3.s4465c3f5");
    test_class_info(&lv, &cd_S4465C3);
    dp->~S4465C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4465C3(Test_S4465C3, "S4465C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4465C3C1Ev();
extern void _ZN7S4465C3D1Ev();
Name_Map name_map_S4465C3[] = {
  NSPAIR(_ZN7S4465C3C1Ev),
  NSPAIR(_ZN7S4465C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4465C3[];
extern void _ZN7S4465C3D1Ev();
extern void _ZN7S4465C3D0Ev();
extern void _ZN7S4465C32v2Ev();
extern void _ZN7S4465C32v3Ev();
extern void _ZN7S4465C32v4Ev();
static  VTBL_ENTRY vtc_S4465C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4465C3[0]),
  (VTBL_ENTRY)&_ZN7S4465C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4465C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4465C3[];
extern  VTBL_ENTRY _ZTV7S4465C3[];
Class_Descriptor cd_S4465C3 = {  "S4465C3", // class name
  0,0,//no base classes
  &(vtc_S4465C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4465C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4465C3),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  S4465C2_nt  : S4465C3 {
  virtual  ~S4465C2_nt(); // _ZN10S4465C2_ntD1Ev
  virtual void  v5(); // _ZN10S4465C2_nt2v5Ev
  S4465C2_nt(); // tgen
};
//SIG(-1 S4465C2_nt) C1{ BC2{ vd v2 v3 v4 Fi[4] FC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} vd v1}


 S4465C2_nt ::~S4465C2_nt(){ note_dtor("S4465C2_nt", this);}
void  S4465C2_nt ::v5(){vfunc_called(this, "_ZN10S4465C2_nt2v5Ev");}
S4465C2_nt ::S4465C2_nt(){ note_ctor("S4465C2_nt", this);} // tgen

//skip512 S4465C2_nt

#else // __cplusplus

extern void _ZN10S4465C2_ntC1Ev();
extern void _ZN10S4465C2_ntD1Ev();
Name_Map name_map_S4465C2_nt[] = {
  NSPAIR(_ZN10S4465C2_ntC1Ev),
  NSPAIR(_ZN10S4465C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4465C3;
extern VTBL_ENTRY _ZTI7S4465C3[];
extern  VTBL_ENTRY _ZTV7S4465C3[];
static Base_Class bases_S4465C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4465C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI10S4465C2_nt[];
extern void _ZN10S4465C2_ntD1Ev();
extern void _ZN10S4465C2_ntD0Ev();
extern void _ZN7S4465C32v2Ev();
extern void _ZN7S4465C32v3Ev();
extern void _ZN7S4465C32v4Ev();
extern void _ZN10S4465C2_nt2v5Ev();
static  VTBL_ENTRY vtc_S4465C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4465C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4465C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4465C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v4Ev,
  (VTBL_ENTRY)&_ZN10S4465C2_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S4465C2_nt[];
VTBL_ENTRY *P__ZTI10S4465C2_nt = _ZTI10S4465C2_nt; 
extern  VTBL_ENTRY _ZTV10S4465C2_nt[];
Class_Descriptor cd_S4465C2_nt = {  "S4465C2_nt", // class name
  bases_S4465C2_nt, 1,
  &(vtc_S4465C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI10S4465C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4465C2_nt),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4465C14_nt  {
  void *s4465c14f0;
  int s4465c14f1;
  ::S629C14 s4465c14f2;
  ::S629C8_nt s4465c14f3;
  void  mf4465c14(); // _ZN11S4465C14_nt9mf4465c14Ev
};
//SIG(-1 S4465C14_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S4465C14_nt ::mf4465c14(){}

//skip512 S4465C14_nt

#else // __cplusplus

Class_Descriptor cd_S4465C14_nt = {  "S4465C14_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  S4465C11  {
  ::S2366C5_nt s4465c11f0;
  ::S4474C14_nt s4465c11f1;
  int s4465c11f2;
  ::S4465C14_nt s4465c11f3;
  void  mf4465c11(); // _ZN8S4465C119mf4465c11Ev
};
//SIG(-1 S4465C11) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m FC5{ vd m FL Fc} FC5} Fi FC6{ m Fp Fi FC3 FC7{ m}}}


void  S4465C11 ::mf4465c11(){}

static void Test_S4465C11()
{
  {
    init_simple_test("S4465C11");
    S4465C11 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S4465C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4465C11)");
    check_field_offset(lv, s4465c11f0, 0, "S4465C11.s4465c11f0");
    check_field_offset(lv, s4465c11f1, ABISELECT(16,12), "S4465C11.s4465c11f1");
    check_field_offset(lv, s4465c11f2, ABISELECT(64,44), "S4465C11.s4465c11f2");
    check_field_offset(lv, s4465c11f3, ABISELECT(72,48), "S4465C11.s4465c11f3");
  }
}
static Arrange_To_Call_Me vS4465C11(Test_S4465C11, "S4465C11", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4465C17  {
  ::S4465C14_nt s4465c17f0;
  int s4465c17f1;
  void  mf4465c17(); // _ZN8S4465C179mf4465c17Ev
};
//SIG(-1 S4465C17) C1{ m FC2{ m Fp Fi FC3{ m} FC4{ m}} Fi}


void  S4465C17 ::mf4465c17(){}

static void Test_S4465C17()
{
  {
    init_simple_test("S4465C17");
    S4465C17 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S4465C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4465C17)");
    check_field_offset(lv, s4465c17f0, 0, "S4465C17.s4465c17f0");
    check_field_offset(lv, s4465c17f1, ABISELECT(16,12), "S4465C17.s4465c17f1");
  }
}
static Arrange_To_Call_Me vS4465C17(Test_S4465C17, "S4465C17", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4465C1  : S4465C2_nt {
  ::S4474C7_nt s4465c1f0;
  void *s4465c1f1;
  ::S4465C11 s4465c1f2;
  ::S4465C17 s4465c1f3;
  virtual  ~S4465C1(); // _ZN7S4465C1D1Ev
  virtual void  v1(); // _ZN7S4465C12v1Ev
  S4465C1(); // tgen
};
//SIG(1 S4465C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} vd v5} vd v1 FC6{ vd m FC7{ m Fp Fi FC8{ m}} FC9{ BC10{ vd m Fc} vd FL[2]} Fi[2]} Fp FC11{ m FC7 FC12{ m FC13{ vd m FL Fc} FC13} Fi FC14{ m Fp Fi FC8 FC15{ m}}} FC16{ m FC14 Fi}}


 S4465C1 ::~S4465C1(){ note_dtor("S4465C1", this);}
void  S4465C1 ::v1(){vfunc_called(this, "_ZN7S4465C12v1Ev");}
S4465C1 ::S4465C1(){ note_ctor("S4465C1", this);} // tgen

static void Test_S4465C1()
{
  extern Class_Descriptor cd_S4465C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,46)];
    init_test(&cd_S4465C1, buf);
    S4465C1 *dp, &lv = *(dp=new (buf) S4465C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,180), "sizeof(S4465C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4465C1)");
    check_base_class_offset(lv, (S4465C3*)(S4465C2_nt*), 0, "S4465C1");
    check_base_class_offset(lv, (S4465C2_nt*), 0, "S4465C1");
    check_field_offset(lv, s4465c1f0, ABISELECT(72,52), "S4465C1.s4465c1f0");
    check_field_offset(lv, s4465c1f1, ABISELECT(136,100), "S4465C1.s4465c1f1");
    check_field_offset(lv, s4465c1f2, ABISELECT(144,104), "S4465C1.s4465c1f2");
    check_field_offset(lv, s4465c1f3, ABISELECT(232,164), "S4465C1.s4465c1f3");
    test_class_info(&lv, &cd_S4465C1);
    dp->~S4465C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4465C1(Test_S4465C1, "S4465C1", ABISELECT(256,180));

#else // __cplusplus

extern void _ZN7S4465C1C1Ev();
extern void _ZN7S4465C1D1Ev();
Name_Map name_map_S4465C1[] = {
  NSPAIR(_ZN7S4465C1C1Ev),
  NSPAIR(_ZN7S4465C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4465C3;
extern VTBL_ENTRY _ZTI7S4465C3[];
extern  VTBL_ENTRY _ZTV7S4465C3[];
extern Class_Descriptor cd_S4465C2_nt;
extern VTBL_ENTRY _ZTI10S4465C2_nt[];
extern  VTBL_ENTRY _ZTV10S4465C2_nt[];
static Base_Class bases_S4465C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4465C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4465C2_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 _ZTI7S4465C1[];
extern void _ZN7S4465C1D1Ev();
extern void _ZN7S4465C1D0Ev();
extern void _ZN7S4465C32v2Ev();
extern void _ZN7S4465C32v3Ev();
extern void _ZN7S4465C32v4Ev();
extern void _ZN10S4465C2_nt2v5Ev();
extern void _ZN7S4465C12v1Ev();
static  VTBL_ENTRY vtc_S4465C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4465C1[0]),
  (VTBL_ENTRY)&_ZN7S4465C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4465C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4465C32v4Ev,
  (VTBL_ENTRY)&_ZN10S4465C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S4465C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4465C1[];
extern  VTBL_ENTRY _ZTV7S4465C1[];
Class_Descriptor cd_S4465C1 = {  "S4465C1", // class name
  bases_S4465C1, 2,
  &(vtc_S4465C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,180), // object size
  NSPAIRA(_ZTI7S4465C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4465C1),9, //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  S20901C3  {
  void *s20901c3f0;
  long double s20901c3f1;
  int s20901c3f2;
  virtual void  v7(); // _ZN8S20901C32v7Ev
  virtual void  v8(); // _ZN8S20901C32v8Ev
  ~S20901C3(); // tgen
  S20901C3(); // tgen
};
//SIG(-1 S20901C3) C1{ v1 v2 Fp FD Fi}


void  S20901C3 ::v7(){vfunc_called(this, "_ZN8S20901C32v7Ev");}
void  S20901C3 ::v8(){vfunc_called(this, "_ZN8S20901C32v8Ev");}
S20901C3 ::~S20901C3(){ note_dtor("S20901C3", this);} // tgen
S20901C3 ::S20901C3(){ note_ctor("S20901C3", this);} // tgen

static void Test_S20901C3()
{
  extern Class_Descriptor cd_S20901C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S20901C3, buf);
    S20901C3 *dp, &lv = *(dp=new (buf) S20901C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20901C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20901C3)");
    check_field_offset(lv, s20901c3f0, ABISELECT(8,4), "S20901C3.s20901c3f0");
    check_field_offset(lv, s20901c3f1, ABISELECT(16,8), "S20901C3.s20901c3f1");
    check_field_offset(lv, s20901c3f2, ABISELECT(32,20), "S20901C3.s20901c3f2");
    test_class_info(&lv, &cd_S20901C3);
    dp->~S20901C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C3(Test_S20901C3, "S20901C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20901C3C1Ev();
extern void _ZN8S20901C3D1Ev();
Name_Map name_map_S20901C3[] = {
  NSPAIR(_ZN8S20901C3C1Ev),
  NSPAIR(_ZN8S20901C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20901C3[];
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
static  VTBL_ENTRY vtc_S20901C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C3[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
Class_Descriptor cd_S20901C3 = {  "S20901C3", // class name
  0,0,//no base classes
  &(vtc_S20901C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20901C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20901C3),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  S20901C6  : S20901C3 {
  virtual void  v12(); // _ZN8S20901C63v12Ev
  virtual void  v13(); // _ZN8S20901C63v13Ev
  ~S20901C6(); // tgen
  S20901C6(); // tgen
};
//SIG(-1 S20901C6) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S20901C6 ::v12(){vfunc_called(this, "_ZN8S20901C63v12Ev");}
void  S20901C6 ::v13(){vfunc_called(this, "_ZN8S20901C63v13Ev");}
S20901C6 ::~S20901C6(){ note_dtor("S20901C6", this);} // tgen
S20901C6 ::S20901C6(){ note_ctor("S20901C6", this);} // tgen

static void Test_S20901C6()
{
  extern Class_Descriptor cd_S20901C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S20901C6, buf);
    S20901C6 *dp, &lv = *(dp=new (buf) S20901C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20901C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20901C6)");
    check_base_class_offset(lv, (S20901C3*), 0, "S20901C6");
    test_class_info(&lv, &cd_S20901C6);
    dp->~S20901C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C6(Test_S20901C6, "S20901C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20901C6C1Ev();
extern void _ZN8S20901C6D1Ev();
Name_Map name_map_S20901C6[] = {
  NSPAIR(_ZN8S20901C6C1Ev),
  NSPAIR(_ZN8S20901C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
static Base_Class bases_S20901C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20901C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20901C6[];
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
static  VTBL_ENTRY vtc_S20901C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C6[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
};
extern VTBL_ENTRY _ZTI8S20901C6[];
extern  VTBL_ENTRY _ZTV8S20901C6[];
Class_Descriptor cd_S20901C6 = {  "S20901C6", // class name
  bases_S20901C6, 1,
  &(vtc_S20901C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20901C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20901C6),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  S20901C5  {
  ::S20901C6 s20901c5f0[3];
  void *s20901c5f1;
  short s20901c5f2:8;
  virtual void  v9(); // _ZN8S20901C52v9Ev
  virtual void  v10(); // _ZN8S20901C53v10Ev
  virtual void  v11(); // _ZN8S20901C53v11Ev
  ~S20901C5(); // tgen
  S20901C5(); // tgen
};
//SIG(-1 S20901C5) C1{ v1 v2 v3 FC2{ BC3{ v6 v7 Fp FD Fi} v4 v5}[3] Fp Fs:8}


void  S20901C5 ::v9(){vfunc_called(this, "_ZN8S20901C52v9Ev");}
void  S20901C5 ::v10(){vfunc_called(this, "_ZN8S20901C53v10Ev");}
void  S20901C5 ::v11(){vfunc_called(this, "_ZN8S20901C53v11Ev");}
S20901C5 ::~S20901C5(){ note_dtor("S20901C5", this);} // tgen
S20901C5 ::S20901C5(){ note_ctor("S20901C5", this);} // tgen

static void Test_S20901C5()
{
  extern Class_Descriptor cd_S20901C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,22)];
    init_test(&cd_S20901C5, buf);
    S20901C5 *dp, &lv = *(dp=new (buf) S20901C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,84), "sizeof(S20901C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20901C5)");
    check_field_offset(lv, s20901c5f0, ABISELECT(16,4), "S20901C5.s20901c5f0");
    check_field_offset(lv, s20901c5f1, ABISELECT(160,76), "S20901C5.s20901c5f1");
    set_bf_and_test(lv, s20901c5f2, ABISELECT(168,80), 0, 8, 1, "S20901C5");
    set_bf_and_test(lv, s20901c5f2, ABISELECT(168,80), 0, 8, hide_sll(1LL<<7), "S20901C5");
    test_class_info(&lv, &cd_S20901C5);
    dp->~S20901C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C5(Test_S20901C5, "S20901C5", ABISELECT(176,84));

#else // __cplusplus

extern void _ZN8S20901C5C1Ev();
extern void _ZN8S20901C5D1Ev();
Name_Map name_map_S20901C5[] = {
  NSPAIR(_ZN8S20901C5C1Ev),
  NSPAIR(_ZN8S20901C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20901C5[];
extern void _ZN8S20901C52v9Ev();
extern void _ZN8S20901C53v10Ev();
extern void _ZN8S20901C53v11Ev();
static  VTBL_ENTRY vtc_S20901C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C5[0]),
  (VTBL_ENTRY)&_ZN8S20901C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v11Ev,
};
extern VTBL_ENTRY _ZTI8S20901C5[];
extern  VTBL_ENTRY _ZTV8S20901C5[];
Class_Descriptor cd_S20901C5 = {  "S20901C5", // class name
  0,0,//no base classes
  &(vtc_S20901C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,84), // object size
  NSPAIRA(_ZTI8S20901C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20901C5),5, //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  S20901C8  : S20901C6 , S20901C3 {
  virtual void  v14(); // _ZN8S20901C83v14Ev
  virtual void  v15(); // _ZN8S20901C83v15Ev
  virtual void  v16(); // _ZN8S20901C83v16Ev
  virtual void  v17(); // _ZN8S20901C83v17Ev
  ~S20901C8(); // tgen
  S20901C8(); // tgen
};
//SIG(-1 S20901C8) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S20901C8 ::v14(){vfunc_called(this, "_ZN8S20901C83v14Ev");}
void  S20901C8 ::v15(){vfunc_called(this, "_ZN8S20901C83v15Ev");}
void  S20901C8 ::v16(){vfunc_called(this, "_ZN8S20901C83v16Ev");}
void  S20901C8 ::v17(){vfunc_called(this, "_ZN8S20901C83v17Ev");}
S20901C8 ::~S20901C8(){ note_dtor("S20901C8", this);} // tgen
S20901C8 ::S20901C8(){ note_ctor("S20901C8", this);} // tgen

static void Test_S20901C8()
{
  extern Class_Descriptor cd_S20901C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S20901C8, buf);
    S20901C8 *dp, &lv = *(dp=new (buf) S20901C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20901C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20901C8)");
    check_base_class_offset(lv, (S20901C3*)(S20901C6*), 0, "S20901C8");
    check_base_class_offset(lv, (S20901C6*), 0, "S20901C8");
    /*is_ambiguous_... S20901C8::S20901C3 */ AMB_check_base_class_offset(lv, (S20901C3*), ABISELECT(48,24), "S20901C8");
    test_class_info(&lv, &cd_S20901C8);
    dp->~S20901C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C8(Test_S20901C8, "S20901C8", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20901C8C1Ev();
extern void _ZN8S20901C8D1Ev();
Name_Map name_map_S20901C8[] = {
  NSPAIR(_ZN8S20901C8C1Ev),
  NSPAIR(_ZN8S20901C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C6;
extern VTBL_ENTRY _ZTI8S20901C6[];
extern  VTBL_ENTRY _ZTV8S20901C6[];
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
static Base_Class bases_S20901C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20901C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20901C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S20901C3,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_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 _ZTI8S20901C8[];
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
static  VTBL_ENTRY vtc_S20901C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C8[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20901C8[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S20901C8[];
extern  VTBL_ENTRY _ZTV8S20901C8[];
Class_Descriptor cd_S20901C8 = {  "S20901C8", // class name
  bases_S20901C8, 3,
  &(vtc_S20901C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20901C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20901C8),14, //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  S20901C11  {
  ::S1400C17_nt s20901c11f0;
  void *s20901c11f1;
  virtual void  v18(); // _ZN9S20901C113v18Ev
  ~S20901C11(); // tgen
  S20901C11(); // tgen
};
//SIG(-1 S20901C11) C1{ v1 FC2{ v2 v3} Fp}


void  S20901C11 ::v18(){vfunc_called(this, "_ZN9S20901C113v18Ev");}
S20901C11 ::~S20901C11(){ note_dtor("S20901C11", this);} // tgen
S20901C11 ::S20901C11(){ note_ctor("S20901C11", this);} // tgen

static void Test_S20901C11()
{
  extern Class_Descriptor cd_S20901C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20901C11, buf);
    S20901C11 *dp, &lv = *(dp=new (buf) S20901C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20901C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20901C11)");
    check_field_offset(lv, s20901c11f0, ABISELECT(8,4), "S20901C11.s20901c11f0");
    check_field_offset(lv, s20901c11f1, ABISELECT(16,8), "S20901C11.s20901c11f1");
    test_class_info(&lv, &cd_S20901C11);
    dp->~S20901C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C11(Test_S20901C11, "S20901C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S20901C11C1Ev();
extern void _ZN9S20901C11D1Ev();
Name_Map name_map_S20901C11[] = {
  NSPAIR(_ZN9S20901C11C1Ev),
  NSPAIR(_ZN9S20901C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20901C11[];
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY vtc_S20901C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20901C11[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern VTBL_ENTRY _ZTI9S20901C11[];
extern  VTBL_ENTRY _ZTV9S20901C11[];
Class_Descriptor cd_S20901C11 = {  "S20901C11", // class name
  0,0,//no base classes
  &(vtc_S20901C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S20901C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20901C11),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20901C10  : virtual S20901C11 {
  virtual void  v19(); // _ZN9S20901C103v19Ev
  ~S20901C10(); // tgen
  S20901C10(); // tgen
};
//SIG(-1 S20901C10) C1{ VBC2{ v2 FC3{ v3 v4} Fp} v1}


void  S20901C10 ::v19(){vfunc_called(this, "_ZN9S20901C103v19Ev");}
S20901C10 ::~S20901C10(){ note_dtor("S20901C10", this);} // tgen
S20901C10 ::S20901C10(){ note_ctor("S20901C10", this);} // tgen

static void Test_S20901C10()
{
  extern Class_Descriptor cd_S20901C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20901C10, buf);
    S20901C10 *dp, &lv = *(dp=new (buf) S20901C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20901C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20901C10)");
    check_base_class_offset(lv, (S20901C11*), ABISELECT(8,4), "S20901C10");
    test_class_info(&lv, &cd_S20901C10);
    dp->~S20901C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C10(Test_S20901C10, "S20901C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S20901C10C1Ev();
extern void _ZN9S20901C10D1Ev();
Name_Map name_map_S20901C10[] = {
  NSPAIR(_ZN9S20901C10C1Ev),
  NSPAIR(_ZN9S20901C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20901C11;
extern VTBL_ENTRY _ZTI9S20901C11[];
extern  VTBL_ENTRY _ZTV9S20901C11[];
static Base_Class bases_S20901C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20901C11,    ABISELECT(8,4), //bcp->offset
    4, //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 _ZTI9S20901C10[];
extern void _ZN9S20901C103v19Ev();
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY vtc_S20901C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern VTBL_ENTRY _ZTV9S20901C10[];
static  VTT_ENTRY vtt_S20901C10[] = {
  {&(_ZTV9S20901C10[3]),  3,8},
  {&(_ZTV9S20901C10[7]),  7,8},
};
extern VTBL_ENTRY _ZTI9S20901C10[];
extern  VTBL_ENTRY _ZTV9S20901C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20901C10[];
Class_Descriptor cd_S20901C10 = {  "S20901C10", // class name
  bases_S20901C10, 1,
  &(vtc_S20901C10[0]), // expected_vtbl_contents
  &(vtt_S20901C10[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S20901C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20901C10),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20901C10),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  S20901C9  : virtual S20901C10 {
  virtual void  v20(); // _ZN8S20901C93v20Ev
  virtual void  v21(); // _ZN8S20901C93v21Ev
  virtual void  v22(); // _ZN8S20901C93v22Ev
  ~S20901C9(); // tgen
  S20901C9(); // tgen
};
//SIG(-1 S20901C9) C1{ VBC2{ VBC3{ v4 FC4{ v6 v7} Fp} v5} v1 v2 v3}


void  S20901C9 ::v20(){vfunc_called(this, "_ZN8S20901C93v20Ev");}
void  S20901C9 ::v21(){vfunc_called(this, "_ZN8S20901C93v21Ev");}
void  S20901C9 ::v22(){vfunc_called(this, "_ZN8S20901C93v22Ev");}
S20901C9 ::~S20901C9(){ note_dtor("S20901C9", this);} // tgen
S20901C9 ::S20901C9(){ note_ctor("S20901C9", this);} // tgen

static void Test_S20901C9()
{
  extern Class_Descriptor cd_S20901C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20901C9, buf);
    S20901C9 *dp, &lv = *(dp=new (buf) S20901C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20901C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20901C9)");
    check_base_class_offset(lv, (S20901C11*)(S20901C10*), ABISELECT(8,4), "S20901C9");
    check_base_class_offset(lv, (S20901C10*), 0, "S20901C9");
    test_class_info(&lv, &cd_S20901C9);
    dp->~S20901C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C9(Test_S20901C9, "S20901C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20901C9C1Ev();
extern void _ZN8S20901C9D1Ev();
Name_Map name_map_S20901C9[] = {
  NSPAIR(_ZN8S20901C9C1Ev),
  NSPAIR(_ZN8S20901C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20901C11;
extern VTBL_ENTRY _ZTI9S20901C11[];
extern  VTBL_ENTRY _ZTV9S20901C11[];
extern Class_Descriptor cd_S20901C10;
extern VTBL_ENTRY _ZTI9S20901C10[];
extern  VTBL_ENTRY _ZTV9S20901C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20901C10[];
static Base_Class bases_S20901C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20901C11,    ABISELECT(8,4), //bcp->offset
    9, //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
    1, //immediately_derived
  0, 1},
  {&cd_S20901C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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 _ZTI8S20901C9[];
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY vtc_S20901C9[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20901C9[];
extern void _ZN9S20901C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C10__8S20901C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__9S20901C10__8S20901C9[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
static  VTT_ENTRY vtt_S20901C9[] = {
  {&(_ZTV8S20901C9[5]),  5,13},
  {&(_ZTV8S20901C9[5]),  5,13},
  {&(_ZTV8S20901C9[12]),  12,13},
  {&(_tg__ZTV9S20901C10__8S20901C9[3]),  3,4},
  {&(_tg__ZTV9S20901C11__9S20901C10__8S20901C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20901C9[];
extern  VTBL_ENTRY _ZTV8S20901C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C9[];
Class_Descriptor cd_S20901C9 = {  "S20901C9", // class name
  bases_S20901C9, 2,
  &(vtc_S20901C9[0]), // expected_vtbl_contents
  &(vtt_S20901C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20901C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20901C9),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20901C9),5, //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  S20901C7  : S20901C8 , virtual S20901C9 {
  virtual void  v23(); // _ZN8S20901C73v23Ev
  virtual void  v24(); // _ZN8S20901C73v24Ev
  virtual void  v25(); // _ZN8S20901C73v25Ev
  ~S20901C7(); // tgen
  S20901C7(); // tgen
};
//SIG(-1 S20901C7) C1{ BC2{ BC3{ BC4{ v4 v5 Fp FD Fi} v6 v7} BC4 v8 v9 v10 v11} VBC5{ VBC6{ VBC7{ v12 FC8{ v17 v18} Fp} v13} v14 v15 v16} v1 v2 v3}


void  S20901C7 ::v23(){vfunc_called(this, "_ZN8S20901C73v23Ev");}
void  S20901C7 ::v24(){vfunc_called(this, "_ZN8S20901C73v24Ev");}
void  S20901C7 ::v25(){vfunc_called(this, "_ZN8S20901C73v25Ev");}
S20901C7 ::~S20901C7(){ note_dtor("S20901C7", this);} // tgen
S20901C7 ::S20901C7(){ note_ctor("S20901C7", this);} // tgen

static void Test_S20901C7()
{
  extern Class_Descriptor cd_S20901C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S20901C7, buf);
    S20901C7 *dp, &lv = *(dp=new (buf) S20901C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S20901C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20901C7)");
    check_base_class_offset(lv, (S20901C3*)(S20901C6*)(S20901C8*), 0, "S20901C7");
    check_base_class_offset(lv, (S20901C6*)(S20901C8*), 0, "S20901C7");
    /*is_ambiguous_... S20901C8::S20901C3 */ AMB_check_base_class_offset(lv, (S20901C3*)(S20901C8*), ABISELECT(48,24), "S20901C7");
    check_base_class_offset(lv, (S20901C8*), 0, "S20901C7");
    check_base_class_offset(lv, (S20901C11*)(S20901C10*), ABISELECT(96,52), "S20901C7");
    check_base_class_offset(lv, (S20901C10*)(S20901C9*), ABISELECT(88,48), "S20901C7");
    check_base_class_offset(lv, (S20901C9*), ABISELECT(88,48), "S20901C7");
    test_class_info(&lv, &cd_S20901C7);
    dp->~S20901C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C7(Test_S20901C7, "S20901C7", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S20901C7C1Ev();
extern void _ZN8S20901C7D1Ev();
Name_Map name_map_S20901C7[] = {
  NSPAIR(_ZN8S20901C7C1Ev),
  NSPAIR(_ZN8S20901C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C6;
extern VTBL_ENTRY _ZTI8S20901C6[];
extern  VTBL_ENTRY _ZTV8S20901C6[];
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C8;
extern VTBL_ENTRY _ZTI8S20901C8[];
extern  VTBL_ENTRY _ZTV8S20901C8[];
extern Class_Descriptor cd_S20901C11;
extern VTBL_ENTRY _ZTI9S20901C11[];
extern  VTBL_ENTRY _ZTV9S20901C11[];
extern Class_Descriptor cd_S20901C10;
extern VTBL_ENTRY _ZTI9S20901C10[];
extern  VTBL_ENTRY _ZTV9S20901C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20901C10[];
extern Class_Descriptor cd_S20901C9;
extern VTBL_ENTRY _ZTI8S20901C9[];
extern  VTBL_ENTRY _ZTV8S20901C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C9[];
static Base_Class bases_S20901C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20901C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S20901C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S20901C3,    ABISELECT(48,24), //bcp->offset
    16, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S20901C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S20901C11,    ABISELECT(96,52), //bcp->offset
    32, //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
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20901C10,    ABISELECT(88,48), //bcp->offset
    -1, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20901C9,    ABISELECT(88,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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 _ZTI8S20901C7[];
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY vtc_S20901C7[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20901C7[];
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C7[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C9__8S20901C7[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN9S20901C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C10__8S20901C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__9S20901C10__8S20901C7[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
static  VTT_ENTRY vtt_S20901C7[] = {
  {&(_ZTV8S20901C7[5]),  5,36},
  {&(_ZTV8S20901C7[28]),  28,36},
  {&(_ZTV8S20901C7[28]),  28,36},
  {&(_ZTV8S20901C7[35]),  35,36},
  {&(_tg__ZTV8S20901C9__8S20901C7[5]),  5,9},
  {&(_tg__ZTV8S20901C9__8S20901C7[5]),  5,9},
  {&(_tg__ZTV9S20901C11__8S20901C9__8S20901C7[3]),  3,4},
  {&(_tg__ZTV9S20901C10__8S20901C7[3]),  3,4},
  {&(_tg__ZTV9S20901C11__9S20901C10__8S20901C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20901C7[];
extern  VTBL_ENTRY _ZTV8S20901C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C7[];
Class_Descriptor cd_S20901C7 = {  "S20901C7", // class name
  bases_S20901C7, 7,
  &(vtc_S20901C7[0]), // expected_vtbl_contents
  &(vtt_S20901C7[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S20901C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20901C7),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20901C7),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20901C4  : S20901C5 , S20901C7 {
  virtual  ~S20901C4(); // _ZN8S20901C4D2Ev
  virtual void  v26(); // _ZN8S20901C43v26Ev
  virtual void  v27(); // _ZN8S20901C43v27Ev
  virtual void  v28(); // _ZN8S20901C43v28Ev
  virtual void  v29(); // _ZN8S20901C43v29Ev
  virtual void  v30(); // _ZN8S20901C43v30Ev
  virtual void  v31(); // _ZN8S20901C43v31Ev
  S20901C4(); // tgen
};
//SIG(-1 S20901C4) C1{ BC2{ v7 v8 v9 FC3{ BC4{ v10 v11 Fp FD Fi} v12 v13}[3] Fp Fs:8} BC5{ BC6{ BC3 BC4 v14 v15 v16 v17} VBC7{ VBC8{ VBC9{ v18 FC10{ v26 v27} Fp} v19} v20 v21 v22} v23 v24 v25} vd v1 v2 v3 v4 v5 v6}


 S20901C4 ::~S20901C4(){ note_dtor("S20901C4", this);}
void  S20901C4 ::v26(){vfunc_called(this, "_ZN8S20901C43v26Ev");}
void  S20901C4 ::v27(){vfunc_called(this, "_ZN8S20901C43v27Ev");}
void  S20901C4 ::v28(){vfunc_called(this, "_ZN8S20901C43v28Ev");}
void  S20901C4 ::v29(){vfunc_called(this, "_ZN8S20901C43v29Ev");}
void  S20901C4 ::v30(){vfunc_called(this, "_ZN8S20901C43v30Ev");}
void  S20901C4 ::v31(){vfunc_called(this, "_ZN8S20901C43v31Ev");}
S20901C4 ::S20901C4(){ note_ctor("S20901C4", this);} // tgen

static void Test_S20901C4()
{
  extern Class_Descriptor cd_S20901C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,38)];
    init_test(&cd_S20901C4, buf);
    S20901C4 *dp, &lv = *(dp=new (buf) S20901C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,148), "sizeof(S20901C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20901C4)");
    check_base_class_offset(lv, (S20901C5*), 0, "S20901C4");
    check_base_class_offset(lv, (S20901C3*)(S20901C6*)(S20901C8*)(S20901C7*), ABISELECT(176,84), "S20901C4");
    check_base_class_offset(lv, (S20901C6*)(S20901C8*)(S20901C7*), ABISELECT(176,84), "S20901C4");
    /*is_ambiguous_... S20901C8::S20901C3 */ AMB_check_base_class_offset(lv, (S20901C3*)(S20901C8*)(S20901C7*), ABISELECT(224,108), "S20901C4");
    check_base_class_offset(lv, (S20901C8*)(S20901C7*), ABISELECT(176,84), "S20901C4");
    check_base_class_offset(lv, (S20901C11*)(S20901C10*), ABISELECT(272,136), "S20901C4");
    check_base_class_offset(lv, (S20901C10*)(S20901C9*), ABISELECT(264,132), "S20901C4");
    check_base_class_offset(lv, (S20901C9*)(S20901C7*), ABISELECT(264,132), "S20901C4");
    check_base_class_offset(lv, (S20901C7*), ABISELECT(176,84), "S20901C4");
    test_class_info(&lv, &cd_S20901C4);
    dp->~S20901C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C4(Test_S20901C4, "S20901C4", ABISELECT(304,148));

#else // __cplusplus

extern void _ZN8S20901C4C1Ev();
extern void _ZN8S20901C4D2Ev();
Name_Map name_map_S20901C4[] = {
  NSPAIR(_ZN8S20901C4C1Ev),
  NSPAIR(_ZN8S20901C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20901C5;
extern VTBL_ENTRY _ZTI8S20901C5[];
extern  VTBL_ENTRY _ZTV8S20901C5[];
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C6;
extern VTBL_ENTRY _ZTI8S20901C6[];
extern  VTBL_ENTRY _ZTV8S20901C6[];
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C8;
extern VTBL_ENTRY _ZTI8S20901C8[];
extern  VTBL_ENTRY _ZTV8S20901C8[];
extern Class_Descriptor cd_S20901C11;
extern VTBL_ENTRY _ZTI9S20901C11[];
extern  VTBL_ENTRY _ZTV9S20901C11[];
extern Class_Descriptor cd_S20901C10;
extern VTBL_ENTRY _ZTI9S20901C10[];
extern  VTBL_ENTRY _ZTV9S20901C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20901C10[];
extern Class_Descriptor cd_S20901C9;
extern VTBL_ENTRY _ZTI8S20901C9[];
extern  VTBL_ENTRY _ZTV8S20901C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C9[];
extern Class_Descriptor cd_S20901C7;
extern VTBL_ENTRY _ZTI8S20901C7[];
extern  VTBL_ENTRY _ZTV8S20901C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C7[];
static Base_Class bases_S20901C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20901C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20901C3,    ABISELECT(176,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S20901C6,    ABISELECT(176,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S20901C3,    ABISELECT(224,108), //bcp->offset
    32, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S20901C8,    ABISELECT(176,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S20901C11,    ABISELECT(272,136), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //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
    6, //immediately_derived
  0, 1},
  {&cd_S20901C10,    ABISELECT(264,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20901C9,    ABISELECT(264,132), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //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
    8, //immediately_derived
  0, 1},
  {&cd_S20901C7,    ABISELECT(176,84), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20901C4[];
extern void _ZN8S20901C52v9Ev();
extern void _ZN8S20901C53v10Ev();
extern void _ZN8S20901C53v11Ev();
extern void _ZN8S20901C4D1Ev();
extern void _ZN8S20901C4D0Ev();
extern void _ZN8S20901C43v26Ev();
extern void _ZN8S20901C43v27Ev();
extern void _ZN8S20901C43v28Ev();
extern void _ZN8S20901C43v29Ev();
extern void _ZN8S20901C43v30Ev();
extern void _ZN8S20901C43v31Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY vtc_S20901C4[] = {
  ABISELECT(272,136),
  ABISELECT(264,132),
  ABISELECT(264,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN8S20901C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20901C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20901C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v31Ev,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-176,-84),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
  ABISELECT(-224,-108),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
  0,
  ABISELECT(-272,-136),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20901C4[];
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C7__8S20901C4[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C7__8S20901C4[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C7__8S20901C4[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C4[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C9__8S20901C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN9S20901C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C10__8S20901C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__9S20901C10__8S20901C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
static  VTT_ENTRY vtt_S20901C4[] = {
  {&(_ZTV8S20901C4[5]),  5,52},
  {&(_tg__ZTV8S20901C7__8S20901C4[5]),  5,16},
  {&(_tg__ZTV8S20901C9__8S20901C7__8S20901C4[8]),  8,12},
  {&(_tg__ZTV8S20901C9__8S20901C7__8S20901C4[8]),  8,12},
  {&(_tg__ZTV9S20901C11__8S20901C7__8S20901C4[3]),  3,4},
  {&(_ZTV8S20901C4[21]),  21,52},
  {&(_ZTV8S20901C4[44]),  44,52},
  {&(_ZTV8S20901C4[44]),  44,52},
  {&(_ZTV8S20901C4[51]),  51,52},
  {&(_tg__ZTV8S20901C9__8S20901C4[5]),  5,9},
  {&(_tg__ZTV8S20901C9__8S20901C4[5]),  5,9},
  {&(_tg__ZTV9S20901C11__8S20901C9__8S20901C4[3]),  3,4},
  {&(_tg__ZTV9S20901C10__8S20901C4[3]),  3,4},
  {&(_tg__ZTV9S20901C11__9S20901C10__8S20901C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20901C4[];
extern  VTBL_ENTRY _ZTV8S20901C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C4[];
Class_Descriptor cd_S20901C4 = {  "S20901C4", // class name
  bases_S20901C4, 9,
  &(vtc_S20901C4[0]), // expected_vtbl_contents
  &(vtt_S20901C4[0]), // expected_vtt_contents
  ABISELECT(304,148), // object size
  NSPAIRA(_ZTI8S20901C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20901C4),52, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20901C4),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20901C2  : virtual S20901C3 , virtual S20901C4 {
  void *s20901c2f0;
  virtual  ~S20901C2(); // _ZN8S20901C2D2Ev
  virtual void  v32(); // _ZN8S20901C23v32Ev
  virtual void  v33(); // _ZN8S20901C23v33Ev
  virtual void  v34(); // _ZN8S20901C23v34Ev
  virtual void  v35(); // _ZN8S20901C23v35Ev
  virtual void  v36(); // _ZN8S20901C23v36Ev
  virtual void  v37(); // _ZN8S20901C23v37Ev
  virtual void  v38(); // _ZN8S20901C23v38Ev
  S20901C2(); // tgen
};
//SIG(-1 S20901C2) C1{ VBC2{ v8 v9 Fp FD Fi} VBC3{ BC4{ v10 v11 v12 FC5{ BC2 v13 v14}[3] Fp Fs:8} BC6{ BC7{ BC5 BC2 v15 v16 v17 v18} VBC8{ VBC9{ VBC10{ v19 FC11{ v33 v34} Fp} v20} v21 v22 v23} v24 v25 v26} vd v27 v28 v29 v30 v31 v32} vd v1 v2 v3 v4 v5 v6 v7 Fp}


 S20901C2 ::~S20901C2(){ note_dtor("S20901C2", this);}
void  S20901C2 ::v32(){vfunc_called(this, "_ZN8S20901C23v32Ev");}
void  S20901C2 ::v33(){vfunc_called(this, "_ZN8S20901C23v33Ev");}
void  S20901C2 ::v34(){vfunc_called(this, "_ZN8S20901C23v34Ev");}
void  S20901C2 ::v35(){vfunc_called(this, "_ZN8S20901C23v35Ev");}
void  S20901C2 ::v36(){vfunc_called(this, "_ZN8S20901C23v36Ev");}
void  S20901C2 ::v37(){vfunc_called(this, "_ZN8S20901C23v37Ev");}
void  S20901C2 ::v38(){vfunc_called(this, "_ZN8S20901C23v38Ev");}
S20901C2 ::S20901C2(){ note_ctor("S20901C2", this);} // tgen

static void Test_S20901C2()
{
  extern Class_Descriptor cd_S20901C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(23,45)];
    init_test(&cd_S20901C2, buf);
    S20901C2 *dp, &lv = *(dp=new (buf) S20901C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,176), "sizeof(S20901C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20901C2)");
    /*is_ambiguous_... S20901C2::S20901C3 */ AMB_check_base_class_offset(lv, (S20901C3*), ABISELECT(16,8), "S20901C2");
    check_base_class_offset(lv, (S20901C5*)(S20901C4*), ABISELECT(64,32), "S20901C2");
    check_base_class_offset(lv, (S20901C3*)(S20901C6*)(S20901C8*)(S20901C7*)(S20901C4*), ABISELECT(240,116), "S20901C2");
    check_base_class_offset(lv, (S20901C6*)(S20901C8*)(S20901C7*)(S20901C4*), ABISELECT(240,116), "S20901C2");
    /*is_ambiguous_... S20901C8::S20901C3 */ AMB_check_base_class_offset(lv, (S20901C3*)(S20901C8*)(S20901C7*)(S20901C4*), ABISELECT(288,140), "S20901C2");
    check_base_class_offset(lv, (S20901C8*)(S20901C7*)(S20901C4*), ABISELECT(240,116), "S20901C2");
    check_base_class_offset(lv, (S20901C11*)(S20901C10*), ABISELECT(328,164), "S20901C2");
    check_base_class_offset(lv, (S20901C10*)(S20901C9*), 0, "S20901C2");
    check_base_class_offset(lv, (S20901C9*)(S20901C7*)(S20901C4*), 0, "S20901C2");
    check_base_class_offset(lv, (S20901C7*)(S20901C4*), ABISELECT(240,116), "S20901C2");
    check_base_class_offset(lv, (S20901C4*), ABISELECT(64,32), "S20901C2");
    check_field_offset(lv, s20901c2f0, ABISELECT(8,4), "S20901C2.s20901c2f0");
    test_class_info(&lv, &cd_S20901C2);
    dp->~S20901C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C2(Test_S20901C2, "S20901C2", ABISELECT(352,176));

#else // __cplusplus

extern void _ZN8S20901C2C1Ev();
extern void _ZN8S20901C2D2Ev();
Name_Map name_map_S20901C2[] = {
  NSPAIR(_ZN8S20901C2C1Ev),
  NSPAIR(_ZN8S20901C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C5;
extern VTBL_ENTRY _ZTI8S20901C5[];
extern  VTBL_ENTRY _ZTV8S20901C5[];
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C6;
extern VTBL_ENTRY _ZTI8S20901C6[];
extern  VTBL_ENTRY _ZTV8S20901C6[];
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C8;
extern VTBL_ENTRY _ZTI8S20901C8[];
extern  VTBL_ENTRY _ZTV8S20901C8[];
extern Class_Descriptor cd_S20901C11;
extern VTBL_ENTRY _ZTI9S20901C11[];
extern  VTBL_ENTRY _ZTV9S20901C11[];
extern Class_Descriptor cd_S20901C10;
extern VTBL_ENTRY _ZTI9S20901C10[];
extern  VTBL_ENTRY _ZTV9S20901C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20901C10[];
extern Class_Descriptor cd_S20901C9;
extern VTBL_ENTRY _ZTI8S20901C9[];
extern  VTBL_ENTRY _ZTV8S20901C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C9[];
extern Class_Descriptor cd_S20901C7;
extern VTBL_ENTRY _ZTI8S20901C7[];
extern  VTBL_ENTRY _ZTV8S20901C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C7[];
extern Class_Descriptor cd_S20901C4;
extern VTBL_ENTRY _ZTI8S20901C4[];
extern  VTBL_ENTRY _ZTV8S20901C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C4[];
static Base_Class bases_S20901C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20901C3,    ABISELECT(16,8), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //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_S20901C5,    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
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20901C3,    ABISELECT(240,116), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S20901C6,    ABISELECT(240,116), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S20901C3,    ABISELECT(288,140), //bcp->offset
    83, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20901C8,    ABISELECT(240,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20901C11,    ABISELECT(328,164), //bcp->offset
    87, //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
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20901C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20901C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20901C7,    ABISELECT(240,116), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20901C4,    ABISELECT(64,32), //bcp->offset
    30, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20901C2[];
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
extern void _ZN8S20901C2D1Ev();
extern void _ZN8S20901C2D0Ev();
extern void _ZN8S20901C23v32Ev();
extern void _ZN8S20901C23v33Ev();
extern void _ZN8S20901C23v34Ev();
extern void _ZN8S20901C23v35Ev();
extern void _ZN8S20901C23v36Ev();
extern void _ZN8S20901C23v37Ev();
extern void _ZN8S20901C23v38Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C52v9Ev();
extern void _ZN8S20901C53v10Ev();
extern void _ZN8S20901C53v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S20901C2D1Ev,_ZTv0_n36_N8S20901C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20901C2D1Ev,_ZThn32_N8S20901C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20901C2D0Ev,_ZTv0_n36_N8S20901C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20901C2D0Ev,_ZThn32_N8S20901C2D0Ev)() __attribute__((weak));
extern void _ZN8S20901C43v26Ev();
extern void _ZN8S20901C43v27Ev();
extern void _ZN8S20901C43v28Ev();
extern void _ZN8S20901C43v29Ev();
extern void _ZN8S20901C43v30Ev();
extern void _ZN8S20901C43v31Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY vtc_S20901C2[] = {
  0,
  ABISELECT(64,32),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(328,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20901C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20901C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v33Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v35Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v36Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v37Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v38Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  0,
  0,
  0,
  ABISELECT(264,132),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN8S20901C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20901C2D1Ev,_ZTv0_n36_N8S20901C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20901C2D0Ev,_ZTv0_n36_N8S20901C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20901C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v31Ev,
  ABISELECT(88,48),
  ABISELECT(-240,-116),
  ABISELECT(-240,-116),
  ABISELECT(-240,-116),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
  ABISELECT(-288,-140),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  0,
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20901C2[];
extern void _ZN8S20901C52v9Ev();
extern void _ZN8S20901C53v10Ev();
extern void _ZN8S20901C53v11Ev();
extern void _ZN8S20901C4D1Ev();
extern void _ZN8S20901C4D0Ev();
extern void _ZN8S20901C43v26Ev();
extern void _ZN8S20901C43v27Ev();
extern void _ZN8S20901C43v28Ev();
extern void _ZN8S20901C43v29Ev();
extern void _ZN8S20901C43v30Ev();
extern void _ZN8S20901C43v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C4__8S20901C2[] = {
  ABISELECT(264,132),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN8S20901C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20901C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20901C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v31Ev,
};
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C78S20901C4__8S20901C2[] = {
  ABISELECT(88,48),
  ABISELECT(-240,-116),
  ABISELECT(-240,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C78S20901C4__8S20901C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(328,164),
  ABISELECT(240,116),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C78S20901C4__8S20901C2[] = {
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C7__8S20901C4__8S20901C2[] = {
  ABISELECT(88,48),
  ABISELECT(-240,-116),
  ABISELECT(-240,-116),
  ABISELECT(-176,-84),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C4__8S20901C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(328,164),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C4__8S20901C2[] = {
  0,
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C2[] = {
  0,
  0,
  ABISELECT(328,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C9__8S20901C2[] = {
  0,
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN9S20901C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C10__8S20901C2[] = {
  ABISELECT(328,164),
  0,
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__9S20901C10__8S20901C2[] = {
  0,
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
static  VTT_ENTRY vtt_S20901C2[] = {
  {&(_ZTV8S20901C2[11]),  11,91},
  {&(_ZTV8S20901C2[28]),  28,91},
  {&(_ZTV8S20901C2[56]),  56,91},
  {&(_ZTV8S20901C2[72]),  72,91},
  {&(_ZTV8S20901C2[85]),  85,91},
  {&(_ZTV8S20901C2[11]),  11,91},
  {&(_ZTV8S20901C2[11]),  11,91},
  {&(_ZTV8S20901C2[90]),  90,91},
  {&(_tg__ZTV8S20901C4__8S20901C2[5]),  5,16},
  {&(_tg__ZTV8S20901C78S20901C4__8S20901C2[5]),  5,16},
  {&(_tg__ZTV8S20901C9__8S20901C78S20901C4__8S20901C2[8]),  8,12},
  {&(_tg__ZTV8S20901C9__8S20901C78S20901C4__8S20901C2[8]),  8,12},
  {&(_tg__ZTV9S20901C11__8S20901C78S20901C4__8S20901C2[3]),  3,4},
  {&(_tg__ZTV8S20901C7__8S20901C4__8S20901C2[5]),  5,16},
  {&(_tg__ZTV8S20901C9__8S20901C4__8S20901C2[8]),  8,12},
  {&(_tg__ZTV8S20901C9__8S20901C4__8S20901C2[8]),  8,12},
  {&(_tg__ZTV9S20901C11__8S20901C4__8S20901C2[3]),  3,4},
  {&(_tg__ZTV8S20901C9__8S20901C2[5]),  5,9},
  {&(_tg__ZTV8S20901C9__8S20901C2[5]),  5,9},
  {&(_tg__ZTV9S20901C11__8S20901C9__8S20901C2[3]),  3,4},
  {&(_tg__ZTV9S20901C10__8S20901C2[3]),  3,4},
  {&(_tg__ZTV9S20901C11__9S20901C10__8S20901C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20901C2[];
extern  VTBL_ENTRY _ZTV8S20901C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C2[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20901C2D0Ev,_ZTv0_n36_N8S20901C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20901C2D0Ev,_ZThn32_N8S20901C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20901C2D1Ev,_ZTv0_n36_N8S20901C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20901C2D1Ev,_ZThn32_N8S20901C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20901C2 = {  "S20901C2", // class name
  bases_S20901C2, 11,
  &(vtc_S20901C2[0]), // expected_vtbl_contents
  &(vtt_S20901C2[0]), // expected_vtt_contents
  ABISELECT(352,176), // object size
  NSPAIRA(_ZTI8S20901C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20901C2),91, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20901C2),22, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20901C1  : virtual S20901C2 {
  ::S20900C13 s20901c1f0;
  __tsi64 s20901c1f1;
  virtual void  v1(); // _ZN8S20901C12v1Ev
  virtual void  v2(); // _ZN8S20901C12v2Ev
  virtual void  v3(); // _ZN8S20901C12v3Ev
  virtual void  v4(); // _ZN8S20901C12v4Ev
  virtual void  v5(); // _ZN8S20901C12v5Ev
  virtual void  v6(); // _ZN8S20901C12v6Ev
  ~S20901C1(); // tgen
  S20901C1(); // tgen
};
//SIG(1 S20901C1) C1{ VBC2{ VBC3{ v7 v8 Fp FD Fi} VBC4{ BC5{ v9 v10 v11 FC6{ BC3 v12 v13}[3] Fp Fs:8} BC7{ BC8{ BC6 BC3 v14 v15 v16 v17} VBC9{ VBC10{ VBC11{ v18 FC12{ v42 v43} Fp} v19} v20 v21 v22} v23 v24 v25} vd v26 v27 v28 v29 v30 v31} vd v32 v33 v34 v35 v36 v37 v38 Fp} v1 v2 v3 v4 v5 v6 FC13{ BC14{ v40 FC12 Fp} BC15{ VBC14 v41} vd v39 Fi} FL}


void  S20901C1 ::v1(){vfunc_called(this, "_ZN8S20901C12v1Ev");}
void  S20901C1 ::v2(){vfunc_called(this, "_ZN8S20901C12v2Ev");}
void  S20901C1 ::v3(){vfunc_called(this, "_ZN8S20901C12v3Ev");}
void  S20901C1 ::v4(){vfunc_called(this, "_ZN8S20901C12v4Ev");}
void  S20901C1 ::v5(){vfunc_called(this, "_ZN8S20901C12v5Ev");}
void  S20901C1 ::v6(){vfunc_called(this, "_ZN8S20901C12v6Ev");}
S20901C1 ::~S20901C1(){ note_dtor("S20901C1", this);} // tgen
S20901C1 ::S20901C1(){ note_ctor("S20901C1", this);} // tgen

static void Test_S20901C1()
{
  extern Class_Descriptor cd_S20901C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,56)];
    init_test(&cd_S20901C1, buf);
    S20901C1 *dp, &lv = *(dp=new (buf) S20901C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,220), "sizeof(S20901C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20901C1)");
    /*is_ambiguous_... S20901C2::S20901C3 */ AMB_check_base_class_offset(lv, (S20901C3*)(S20901C2*), ABISELECT(96,52), "S20901C1");
    check_base_class_offset(lv, (S20901C5*)(S20901C4*), ABISELECT(144,76), "S20901C1");
    check_base_class_offset(lv, (S20901C3*)(S20901C6*)(S20901C8*)(S20901C7*)(S20901C4*), ABISELECT(320,160), "S20901C1");
    check_base_class_offset(lv, (S20901C6*)(S20901C8*)(S20901C7*)(S20901C4*), ABISELECT(320,160), "S20901C1");
    /*is_ambiguous_... S20901C8::S20901C3 */ AMB_check_base_class_offset(lv, (S20901C3*)(S20901C8*)(S20901C7*)(S20901C4*), ABISELECT(368,184), "S20901C1");
    check_base_class_offset(lv, (S20901C8*)(S20901C7*)(S20901C4*), ABISELECT(320,160), "S20901C1");
    check_base_class_offset(lv, (S20901C11*)(S20901C10*), ABISELECT(408,208), "S20901C1");
    check_base_class_offset(lv, (S20901C10*)(S20901C9*), 0, "S20901C1");
    check_base_class_offset(lv, (S20901C9*)(S20901C7*)(S20901C4*), 0, "S20901C1");
    check_base_class_offset(lv, (S20901C7*)(S20901C4*), ABISELECT(320,160), "S20901C1");
    check_base_class_offset(lv, (S20901C4*)(S20901C2*), ABISELECT(144,76), "S20901C1");
    check_base_class_offset(lv, (S20901C2*), ABISELECT(80,44), "S20901C1");
    check_field_offset(lv, s20901c1f0, ABISELECT(8,4), "S20901C1.s20901c1f0");
    check_field_offset(lv, s20901c1f1, ABISELECT(72,36), "S20901C1.s20901c1f1");
    test_class_info(&lv, &cd_S20901C1);
    dp->~S20901C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20901C1(Test_S20901C1, "S20901C1", ABISELECT(432,220));

#else // __cplusplus

extern void _ZN8S20901C1C1Ev();
extern void _ZN8S20901C1D1Ev();
Name_Map name_map_S20901C1[] = {
  NSPAIR(_ZN8S20901C1C1Ev),
  NSPAIR(_ZN8S20901C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C5;
extern VTBL_ENTRY _ZTI8S20901C5[];
extern  VTBL_ENTRY _ZTV8S20901C5[];
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C6;
extern VTBL_ENTRY _ZTI8S20901C6[];
extern  VTBL_ENTRY _ZTV8S20901C6[];
extern Class_Descriptor cd_S20901C3;
extern VTBL_ENTRY _ZTI8S20901C3[];
extern  VTBL_ENTRY _ZTV8S20901C3[];
extern Class_Descriptor cd_S20901C8;
extern VTBL_ENTRY _ZTI8S20901C8[];
extern  VTBL_ENTRY _ZTV8S20901C8[];
extern Class_Descriptor cd_S20901C11;
extern VTBL_ENTRY _ZTI9S20901C11[];
extern  VTBL_ENTRY _ZTV9S20901C11[];
extern Class_Descriptor cd_S20901C10;
extern VTBL_ENTRY _ZTI9S20901C10[];
extern  VTBL_ENTRY _ZTV9S20901C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20901C10[];
extern Class_Descriptor cd_S20901C9;
extern VTBL_ENTRY _ZTI8S20901C9[];
extern  VTBL_ENTRY _ZTV8S20901C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C9[];
extern Class_Descriptor cd_S20901C7;
extern VTBL_ENTRY _ZTI8S20901C7[];
extern  VTBL_ENTRY _ZTV8S20901C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C7[];
extern Class_Descriptor cd_S20901C4;
extern VTBL_ENTRY _ZTI8S20901C4[];
extern  VTBL_ENTRY _ZTV8S20901C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C4[];
extern Class_Descriptor cd_S20901C2;
extern VTBL_ENTRY _ZTI8S20901C2[];
extern  VTBL_ENTRY _ZTV8S20901C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C2[];
static Base_Class bases_S20901C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20901C3,    ABISELECT(96,52), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //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
    11, //immediately_derived
  0, 1},
  {&cd_S20901C5,    ABISELECT(144,76), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S20901C3,    ABISELECT(320,160), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S20901C6,    ABISELECT(320,160), //bcp->offset
    -1, //bcp->virtual_function_table_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
    5, //immediately_derived
  0, 0},
  {&cd_S20901C3,    ABISELECT(368,184), //bcp->offset
    115, //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
    8, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20901C8,    ABISELECT(320,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20901C11,    ABISELECT(408,208), //bcp->offset
    119, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20901C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20901C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20901C7,    ABISELECT(320,160), //bcp->offset
    99, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20901C4,    ABISELECT(144,76), //bcp->offset
    62, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20901C2,    ABISELECT(80,44), //bcp->offset
    24, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20901C1[];
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
extern void _ZN8S20901C12v1Ev();
extern void _ZN8S20901C12v2Ev();
extern void _ZN8S20901C12v3Ev();
extern void _ZN8S20901C12v4Ev();
extern void _ZN8S20901C12v5Ev();
extern void _ZN8S20901C12v6Ev();
extern void _ZN8S20901C1D1Ev();
extern void _ZN8S20901C1D0Ev();
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
extern void ABISELECT(_ZTv0_n96_N8S20901C1D1Ev,_ZTv0_n48_N8S20901C1D1Ev)();
extern void ABISELECT(_ZThn80_N8S20901C1D1Ev,_ZThn44_N8S20901C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20901C1D0Ev,_ZTv0_n48_N8S20901C1D0Ev)();
extern void ABISELECT(_ZThn80_N8S20901C1D0Ev,_ZThn44_N8S20901C1D0Ev)() __attribute__((weak));
extern void _ZN8S20901C23v32Ev();
extern void _ZN8S20901C23v33Ev();
extern void _ZN8S20901C23v34Ev();
extern void _ZN8S20901C23v35Ev();
extern void _ZN8S20901C23v36Ev();
extern void _ZN8S20901C23v37Ev();
extern void _ZN8S20901C23v38Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C52v9Ev();
extern void _ZN8S20901C53v10Ev();
extern void _ZN8S20901C53v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S20901C1D1Ev,_ZTv0_n36_N8S20901C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S20901C1D1Ev,_ZThn76_N8S20901C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20901C1D0Ev,_ZTv0_n36_N8S20901C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S20901C1D0Ev,_ZThn76_N8S20901C1D0Ev)() __attribute__((weak));
extern void _ZN8S20901C43v26Ev();
extern void _ZN8S20901C43v27Ev();
extern void _ZN8S20901C43v28Ev();
extern void _ZN8S20901C43v29Ev();
extern void _ZN8S20901C43v30Ev();
extern void _ZN8S20901C43v31Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY vtc_S20901C1[] = {
  0,
  ABISELECT(144,76),
  ABISELECT(96,52),
  ABISELECT(80,44),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(408,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C1[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20901C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20901C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20901C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20901C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20901C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20901C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20901C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20901C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(64,32),
  ABISELECT(16,8),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(328,164),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S20901C1[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20901C1D1Ev,_ZTv0_n48_N8S20901C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20901C1D0Ev,_ZTv0_n48_N8S20901C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20901C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v33Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v35Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v36Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v37Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v38Ev,
  0,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20901C1[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-76),
  0,
  0,
  0,
  ABISELECT(264,132),
  ABISELECT(-144,-76),
  ABISELECT(-144,-76),
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI8S20901C1[0]),
  (VTBL_ENTRY)&_ZN8S20901C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20901C1D1Ev,_ZTv0_n36_N8S20901C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20901C1D0Ev,_ZTv0_n36_N8S20901C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20901C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v31Ev,
  ABISELECT(88,48),
  ABISELECT(-320,-160),
  ABISELECT(-320,-160),
  ABISELECT(-320,-160),
  (VTBL_ENTRY)&(_ZTI8S20901C1[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S20901C1[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  0,
  ABISELECT(-408,-208),
  (VTBL_ENTRY)&(_ZTI8S20901C1[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern VTBL_ENTRY _ZTV8S20901C1[];
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
extern void _ZN8S20901C2D1Ev();
extern void _ZN8S20901C2D0Ev();
extern void _ZN8S20901C23v32Ev();
extern void _ZN8S20901C23v33Ev();
extern void _ZN8S20901C23v34Ev();
extern void _ZN8S20901C23v35Ev();
extern void _ZN8S20901C23v36Ev();
extern void _ZN8S20901C23v37Ev();
extern void _ZN8S20901C23v38Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C2__8S20901C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(64,32),
  ABISELECT(16,8),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  ABISELECT(328,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20901C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20901C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v33Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v34Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v35Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v36Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v37Ev,
  (VTBL_ENTRY)&_ZN8S20901C23v38Ev,
};
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C3__8S20901C2__8S20901C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
};
extern void _ZN8S20901C52v9Ev();
extern void _ZN8S20901C53v10Ev();
extern void _ZN8S20901C53v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S20901C2D1Ev,_ZTv0_n36_N8S20901C2D1Ev)();
extern void ABISELECT(_ZThn64_N8S20901C2D1Ev,_ZThn32_N8S20901C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20901C2D0Ev,_ZTv0_n36_N8S20901C2D0Ev)();
extern void ABISELECT(_ZThn64_N8S20901C2D0Ev,_ZThn32_N8S20901C2D0Ev)() __attribute__((weak));
extern void _ZN8S20901C43v26Ev();
extern void _ZN8S20901C43v27Ev();
extern void _ZN8S20901C43v28Ev();
extern void _ZN8S20901C43v29Ev();
extern void _ZN8S20901C43v30Ev();
extern void _ZN8S20901C43v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C4__8S20901C2__8S20901C1[] = {
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  ABISELECT(176,84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  0,
  0,
  0,
  ABISELECT(264,132),
  ABISELECT(-144,-76),
  ABISELECT(-144,-76),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN8S20901C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20901C2D1Ev,_ZTv0_n36_N8S20901C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20901C2D0Ev,_ZTv0_n36_N8S20901C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20901C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v31Ev,
};
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C78S20901C4__8S20901C2__8S20901C1[] = {
  ABISELECT(88,48),
  ABISELECT(-320,-160),
  ABISELECT(-320,-160),
  ABISELECT(-240,-116),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
};
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C38S20901C88S20901C78S20901C4__A2__8S20901C2__8S20901C1[] = {
  ABISELECT(-288,-140),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C2__8S20901C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(408,208),
  ABISELECT(80,44),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C2__8S20901C1[] = {
  0,
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI8S20901C2[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN8S20901C52v9Ev();
extern void _ZN8S20901C53v10Ev();
extern void _ZN8S20901C53v11Ev();
extern void _ZN8S20901C4D1Ev();
extern void _ZN8S20901C4D0Ev();
extern void _ZN8S20901C43v26Ev();
extern void _ZN8S20901C43v27Ev();
extern void _ZN8S20901C43v28Ev();
extern void _ZN8S20901C43v29Ev();
extern void _ZN8S20901C43v30Ev();
extern void _ZN8S20901C43v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C4__8S20901C1[] = {
  ABISELECT(264,132),
  ABISELECT(-144,-76),
  ABISELECT(-144,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN8S20901C52v9Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v10Ev,
  (VTBL_ENTRY)&_ZN8S20901C53v11Ev,
  (VTBL_ENTRY)&_ZN8S20901C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20901C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v26Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v27Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v28Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v29Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v30Ev,
  (VTBL_ENTRY)&_ZN8S20901C43v31Ev,
};
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C78S20901C4__8S20901C1[] = {
  ABISELECT(88,48),
  ABISELECT(-320,-160),
  ABISELECT(-320,-160),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C78S20901C4__8S20901C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(408,208),
  ABISELECT(320,160),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C78S20901C4__8S20901C1[] = {
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20901C7[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN8S20901C32v7Ev();
extern void _ZN8S20901C32v8Ev();
extern void _ZN8S20901C63v12Ev();
extern void _ZN8S20901C63v13Ev();
extern void _ZN8S20901C83v14Ev();
extern void _ZN8S20901C83v15Ev();
extern void _ZN8S20901C83v16Ev();
extern void _ZN8S20901C83v17Ev();
extern void _ZN8S20901C73v23Ev();
extern void _ZN8S20901C73v24Ev();
extern void _ZN8S20901C73v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C7__8S20901C4__8S20901C1[] = {
  ABISELECT(88,48),
  ABISELECT(-320,-160),
  ABISELECT(-320,-160),
  ABISELECT(-176,-84),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN8S20901C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20901C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v12Ev,
  (VTBL_ENTRY)&_ZN8S20901C63v13Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v14Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v15Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v16Ev,
  (VTBL_ENTRY)&_ZN8S20901C83v17Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v24Ev,
  (VTBL_ENTRY)&_ZN8S20901C73v25Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C4__8S20901C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(408,208),
  ABISELECT(144,76),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C4__8S20901C1[] = {
  0,
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI8S20901C4[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN9S20901C103v19Ev();
extern void _ZN8S20901C93v20Ev();
extern void _ZN8S20901C93v21Ev();
extern void _ZN8S20901C93v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20901C9__8S20901C1[] = {
  0,
  0,
  ABISELECT(408,208),
  0,
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20901C93v22Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__8S20901C9__8S20901C1[] = {
  0,
  ABISELECT(-408,-208),
  (VTBL_ENTRY)&(_ZTI8S20901C9[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
extern void _ZN9S20901C103v19Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C10__8S20901C1[] = {
  ABISELECT(408,208),
  0,
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C103v19Ev,
};
extern void _ZN9S20901C113v18Ev();
static  VTBL_ENTRY _tg__ZTV9S20901C11__9S20901C10__8S20901C1[] = {
  0,
  ABISELECT(-408,-208),
  (VTBL_ENTRY)&(_ZTI9S20901C10[0]),
  (VTBL_ENTRY)&_ZN9S20901C113v18Ev,
};
static  VTT_ENTRY vtt_S20901C1[] = {
  {&(_ZTV8S20901C1[12]),  12,123},
  {&(_ZTV8S20901C1[43]),  43,123},
  {&(_ZTV8S20901C1[60]),  60,123},
  {&(_ZTV8S20901C1[88]),  88,123},
  {&(_ZTV8S20901C1[104]),  104,123},
  {&(_ZTV8S20901C1[117]),  117,123},
  {&(_ZTV8S20901C1[12]),  12,123},
  {&(_ZTV8S20901C1[12]),  12,123},
  {&(_ZTV8S20901C1[122]),  122,123},
  {&(_tg__ZTV8S20901C2__8S20901C1[11]),  11,24},
  {&(_tg__ZTV8S20901C3__8S20901C2__8S20901C1[4]),  4,6},
  {&(_tg__ZTV8S20901C4__8S20901C2__8S20901C1[26]),  26,37},
  {&(_tg__ZTV8S20901C78S20901C4__8S20901C2__8S20901C1[5]),  5,16},
  {&(_tg__ZTV8S20901C38S20901C88S20901C78S20901C4__A2__8S20901C2__8S20901C1[2]),  2,4},
  {&(_tg__ZTV8S20901C9__8S20901C2__8S20901C1[8]),  8,12},
  {&(_tg__ZTV8S20901C9__8S20901C2__8S20901C1[8]),  8,12},
  {&(_tg__ZTV9S20901C11__8S20901C2__8S20901C1[3]),  3,4},
  {&(_tg__ZTV8S20901C4__8S20901C1[5]),  5,16},
  {&(_tg__ZTV8S20901C78S20901C4__8S20901C1[5]),  5,16},
  {&(_tg__ZTV8S20901C9__8S20901C78S20901C4__8S20901C1[8]),  8,12},
  {&(_tg__ZTV8S20901C9__8S20901C78S20901C4__8S20901C1[8]),  8,12},
  {&(_tg__ZTV9S20901C11__8S20901C78S20901C4__8S20901C1[3]),  3,4},
  {&(_tg__ZTV8S20901C7__8S20901C4__8S20901C1[5]),  5,16},
  {&(_tg__ZTV8S20901C9__8S20901C4__8S20901C1[8]),  8,12},
  {&(_tg__ZTV8S20901C9__8S20901C4__8S20901C1[8]),  8,12},
  {&(_tg__ZTV9S20901C11__8S20901C4__8S20901C1[3]),  3,4},
  {&(_tg__ZTV8S20901C9__8S20901C1[5]),  5,9},
  {&(_tg__ZTV8S20901C9__8S20901C1[5]),  5,9},
  {&(_tg__ZTV9S20901C11__8S20901C9__8S20901C1[3]),  3,4},
  {&(_tg__ZTV9S20901C10__8S20901C1[3]),  3,4},
  {&(_tg__ZTV9S20901C11__9S20901C10__8S20901C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20901C1[];
extern  VTBL_ENTRY _ZTV8S20901C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20901C1[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20901C2D0Ev,_ZTv0_n36_N8S20901C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20901C2D0Ev,_ZThn32_N8S20901C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20901C2D1Ev,_ZTv0_n36_N8S20901C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20901C2D1Ev,_ZThn32_N8S20901C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20901C1D0Ev,_ZTv0_n36_N8S20901C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20901C1D0Ev,_ZThn76_N8S20901C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20901C1D1Ev,_ZTv0_n36_N8S20901C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20901C1D1Ev,_ZThn76_N8S20901C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20901C1D0Ev,_ZTv0_n48_N8S20901C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20901C1D0Ev,_ZThn44_N8S20901C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20901C1D1Ev,_ZTv0_n48_N8S20901C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20901C1D1Ev,_ZThn44_N8S20901C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20901C1 = {  "S20901C1", // class name
  bases_S20901C1, 12,
  &(vtc_S20901C1[0]), // expected_vtbl_contents
  &(vtt_S20901C1[0]), // expected_vtt_contents
  ABISELECT(432,220), // object size
  NSPAIRA(_ZTI8S20901C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20901C1),123, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20901C1),31, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4475C3  {
  int s4475c3f0[4];
  ::S4474C4_nt s4475c3f1;
  int s4475c3f2;
  char s4475c3f3;
  ::S4474C5_nt s4475c3f4;
  int s4475c3f5;
  virtual  ~S4475C3(); // _ZN7S4475C3D1Ev
  virtual void  v2(); // _ZN7S4475C32v2Ev
  virtual void  v3(); // _ZN7S4475C32v3Ev
  virtual void  v4(); // _ZN7S4475C32v4Ev
  S4475C3(); // tgen
};
//SIG(-1 S4475C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4475C3 ::~S4475C3(){ note_dtor("S4475C3", this);}
void  S4475C3 ::v2(){vfunc_called(this, "_ZN7S4475C32v2Ev");}
void  S4475C3 ::v3(){vfunc_called(this, "_ZN7S4475C32v3Ev");}
void  S4475C3 ::v4(){vfunc_called(this, "_ZN7S4475C32v4Ev");}
S4475C3 ::S4475C3(){ note_ctor("S4475C3", this);} // tgen

static void Test_S4475C3()
{
  extern Class_Descriptor cd_S4475C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4475C3, buf);
    S4475C3 *dp, &lv = *(dp=new (buf) S4475C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4475C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4475C3)");
    check_field_offset(lv, s4475c3f0, ABISELECT(8,4), "S4475C3.s4475c3f0");
    check_field_offset(lv, s4475c3f1, ABISELECT(24,20), "S4475C3.s4475c3f1");
    check_field_offset(lv, s4475c3f2, ABISELECT(40,28), "S4475C3.s4475c3f2");
    check_field_offset(lv, s4475c3f3, ABISELECT(44,32), "S4475C3.s4475c3f3");
    check_field_offset(lv, s4475c3f4, ABISELECT(48,36), "S4475C3.s4475c3f4");
    check_field_offset(lv, s4475c3f5, ABISELECT(64,48), "S4475C3.s4475c3f5");
    test_class_info(&lv, &cd_S4475C3);
    dp->~S4475C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4475C3(Test_S4475C3, "S4475C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4475C3C1Ev();
extern void _ZN7S4475C3D1Ev();
Name_Map name_map_S4475C3[] = {
  NSPAIR(_ZN7S4475C3C1Ev),
  NSPAIR(_ZN7S4475C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4475C3[];
extern void _ZN7S4475C3D1Ev();
extern void _ZN7S4475C3D0Ev();
extern void _ZN7S4475C32v2Ev();
extern void _ZN7S4475C32v3Ev();
extern void _ZN7S4475C32v4Ev();
static  VTBL_ENTRY vtc_S4475C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4475C3[0]),
  (VTBL_ENTRY)&_ZN7S4475C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4475C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4475C3[];
extern  VTBL_ENTRY _ZTV7S4475C3[];
Class_Descriptor cd_S4475C3 = {  "S4475C3", // class name
  0,0,//no base classes
  &(vtc_S4475C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4475C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4475C3),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  S4475C6  {
  virtual  ~S4475C6(); // _ZN7S4475C6D1Ev
  virtual void  v5(); // _ZN7S4475C62v5Ev
  S4475C6(); // tgen
};
//SIG(-1 S4475C6) C1{ vd v1}


 S4475C6 ::~S4475C6(){ note_dtor("S4475C6", this);}
void  S4475C6 ::v5(){vfunc_called(this, "_ZN7S4475C62v5Ev");}
S4475C6 ::S4475C6(){ note_ctor("S4475C6", this);} // tgen

static void Test_S4475C6()
{
  extern Class_Descriptor cd_S4475C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4475C6, buf);
    S4475C6 *dp, &lv = *(dp=new (buf) S4475C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4475C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4475C6)");
    test_class_info(&lv, &cd_S4475C6);
    dp->~S4475C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4475C6(Test_S4475C6, "S4475C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4475C6C1Ev();
extern void _ZN7S4475C6D1Ev();
Name_Map name_map_S4475C6[] = {
  NSPAIR(_ZN7S4475C6C1Ev),
  NSPAIR(_ZN7S4475C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4475C6[];
extern void _ZN7S4475C6D1Ev();
extern void _ZN7S4475C6D0Ev();
extern void _ZN7S4475C62v5Ev();
static  VTBL_ENTRY vtc_S4475C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4475C6[0]),
  (VTBL_ENTRY)&_ZN7S4475C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4475C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4475C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4475C6[];
extern  VTBL_ENTRY _ZTV7S4475C6[];
Class_Descriptor cd_S4475C6 = {  "S4475C6", // class name
  0,0,//no base classes
  &(vtc_S4475C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4475C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4475C6),5, //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  S4475C2  : S4475C3 , S4475C6 {
  void *s4475c2f0;
  int s4475c2f1;
  void *s4475c2f2;
  virtual  ~S4475C2(); // _ZN7S4475C2D1Ev
  virtual void  v6(); // _ZN7S4475C22v6Ev
  virtual void  v7(); // _ZN7S4475C22v7Ev
  S4475C2(); // tgen
};
//SIG(-1 S4475C2) C1{ BC2{ vd v3 v4 v5 Fi[4] FC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} BC5{ vd v6} vd v1 v2 Fp Fi Fp}


 S4475C2 ::~S4475C2(){ note_dtor("S4475C2", this);}
void  S4475C2 ::v6(){vfunc_called(this, "_ZN7S4475C22v6Ev");}
void  S4475C2 ::v7(){vfunc_called(this, "_ZN7S4475C22v7Ev");}
S4475C2 ::S4475C2(){ note_ctor("S4475C2", this);} // tgen

static void Test_S4475C2()
{
  extern Class_Descriptor cd_S4475C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4475C2, buf);
    S4475C2 *dp, &lv = *(dp=new (buf) S4475C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4475C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4475C2)");
    check_base_class_offset(lv, (S4475C3*), 0, "S4475C2");
    check_base_class_offset(lv, (S4475C6*), ABISELECT(72,52), "S4475C2");
    check_field_offset(lv, s4475c2f0, ABISELECT(80,56), "S4475C2.s4475c2f0");
    check_field_offset(lv, s4475c2f1, ABISELECT(88,60), "S4475C2.s4475c2f1");
    check_field_offset(lv, s4475c2f2, ABISELECT(96,64), "S4475C2.s4475c2f2");
    test_class_info(&lv, &cd_S4475C2);
    dp->~S4475C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4475C2(Test_S4475C2, "S4475C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4475C2C1Ev();
extern void _ZN7S4475C2D1Ev();
Name_Map name_map_S4475C2[] = {
  NSPAIR(_ZN7S4475C2C1Ev),
  NSPAIR(_ZN7S4475C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4475C3;
extern VTBL_ENTRY _ZTI7S4475C3[];
extern  VTBL_ENTRY _ZTV7S4475C3[];
extern Class_Descriptor cd_S4475C6;
extern VTBL_ENTRY _ZTI7S4475C6[];
extern  VTBL_ENTRY _ZTV7S4475C6[];
static Base_Class bases_S4475C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4475C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4475C6,    ABISELECT(72,52), //bcp->offset
    9, //bcp->virtual_function_table_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 _ZTI7S4475C2[];
extern void _ZN7S4475C2D1Ev();
extern void _ZN7S4475C2D0Ev();
extern void _ZN7S4475C32v2Ev();
extern void _ZN7S4475C32v3Ev();
extern void _ZN7S4475C32v4Ev();
extern void _ZN7S4475C22v6Ev();
extern void _ZN7S4475C22v7Ev();
extern void ABISELECT(_ZThn72_N7S4475C2D1Ev,_ZThn52_N7S4475C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S4475C2D0Ev,_ZThn52_N7S4475C2D0Ev)();
extern void _ZN7S4475C62v5Ev();
static  VTBL_ENTRY vtc_S4475C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4475C2[0]),
  (VTBL_ENTRY)&_ZN7S4475C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4475C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4475C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4475C22v7Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4475C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4475C2D1Ev,_ZThn52_N7S4475C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4475C2D0Ev,_ZThn52_N7S4475C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4475C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4475C2[];
extern  VTBL_ENTRY _ZTV7S4475C2[];
Class_Descriptor cd_S4475C2 = {  "S4475C2", // class name
  bases_S4475C2, 2,
  &(vtc_S4475C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4475C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4475C2),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  S4475C13  {
  void *s4475c13f0;
  ::S4474C14_nt s4475c13f1;
  void *s4475c13f2;
  int s4475c13f3;
  char s4475c13f4;
  void  mf4475c13(); // _ZN8S4475C139mf4475c13Ev
};
//SIG(-1 S4475C13) C1{ m Fp FC2{ m FC3{ vd m FL Fc} FC3} Fp Fi Fc}


void  S4475C13 ::mf4475c13(){}

static void Test_S4475C13()
{
  {
    init_simple_test("S4475C13");
    S4475C13 lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4475C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4475C13)");
    check_field_offset(lv, s4475c13f0, 0, "S4475C13.s4475c13f0");
    check_field_offset(lv, s4475c13f1, ABISELECT(8,4), "S4475C13.s4475c13f1");
    check_field_offset(lv, s4475c13f2, ABISELECT(56,36), "S4475C13.s4475c13f2");
    check_field_offset(lv, s4475c13f3, ABISELECT(64,40), "S4475C13.s4475c13f3");
    check_field_offset(lv, s4475c13f4, ABISELECT(68,44), "S4475C13.s4475c13f4");
  }
}
static Arrange_To_Call_Me vS4475C13(Test_S4475C13, "S4475C13", ABISELECT(72,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4475C16_nt  : S4474C17_nt {
  void *s4475c16f0;
  virtual  ~S4475C16_nt(); // _ZN11S4475C16_ntD1Ev
  S4475C16_nt(); // tgen
};
//SIG(-1 S4475C16_nt) C1{ BC2{ vd m} vd Fp}


 S4475C16_nt ::~S4475C16_nt(){ note_dtor("S4475C16_nt", this);}
S4475C16_nt ::S4475C16_nt(){ note_ctor("S4475C16_nt", this);} // tgen

//skip512 S4475C16_nt

#else // __cplusplus

extern void _ZN11S4475C16_ntC1Ev();
extern void _ZN11S4475C16_ntD1Ev();
Name_Map name_map_S4475C16_nt[] = {
  NSPAIR(_ZN11S4475C16_ntC1Ev),
  NSPAIR(_ZN11S4475C16_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4474C17_nt;
extern VTBL_ENTRY _ZTI11S4474C17_nt[];
extern  VTBL_ENTRY _ZTV11S4474C17_nt[];
static Base_Class bases_S4475C16_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4474C17_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 _ZTI11S4475C16_nt[];
extern void _ZN11S4475C16_ntD1Ev();
extern void _ZN11S4475C16_ntD0Ev();
static  VTBL_ENTRY vtc_S4475C16_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S4475C16_nt[0]),
  (VTBL_ENTRY)&_ZN11S4475C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S4475C16_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S4475C16_nt[];
VTBL_ENTRY *P__ZTI11S4475C16_nt = _ZTI11S4475C16_nt; 
extern  VTBL_ENTRY _ZTV11S4475C16_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4475C1  : S4475C2 {
  ::S4474C7_nt s4475c1f0;
  void *s4475c1f1;
  ::S629C14 s4475c1f2;
  ::S4475C13 s4475c1f3;
  ::S4475C16_nt s4475c1f4;
  virtual  ~S4475C1(); // _ZN7S4475C1D1Ev
  virtual void  v1(); // _ZN7S4475C12v1Ev
  S4475C1(); // tgen
};
//SIG(1 S4475C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} BC6{ vd v5} vd v6 v7 Fp Fi Fp} vd v1 FC7{ vd m FC8{ m Fp Fi FC9{ m}} FC10{ BC11{ vd m Fc} vd FL[2]} Fi[2]} Fp FC9 FC12{ m Fp FC13{ m FC14{ vd m FL Fc} FC14} Fp Fi Fc} FC15{ BC16{ vd m} vd Fp}}


 S4475C1 ::~S4475C1(){ note_dtor("S4475C1", this);}
void  S4475C1 ::v1(){vfunc_called(this, "_ZN7S4475C12v1Ev");}
S4475C1 ::S4475C1(){ note_ctor("S4475C1", this);} // tgen

static void Test_S4475C1()
{
  extern Class_Descriptor cd_S4475C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,46)];
    init_test(&cd_S4475C1, buf);
    S4475C1 *dp, &lv = *(dp=new (buf) S4475C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,180), "sizeof(S4475C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4475C1)");
    check_base_class_offset(lv, (S4475C3*)(S4475C2*), 0, "S4475C1");
    check_base_class_offset(lv, (S4475C6*)(S4475C2*), ABISELECT(72,52), "S4475C1");
    check_base_class_offset(lv, (S4475C2*), 0, "S4475C1");
    check_field_offset(lv, s4475c1f0, ABISELECT(104,68), "S4475C1.s4475c1f0");
    check_field_offset(lv, s4475c1f1, ABISELECT(168,116), "S4475C1.s4475c1f1");
    check_field_offset(lv, s4475c1f2, ABISELECT(176,120), "S4475C1.s4475c1f2");
    check_field_offset(lv, s4475c1f3, ABISELECT(184,124), "S4475C1.s4475c1f3");
    check_field_offset(lv, s4475c1f4, ABISELECT(256,172), "S4475C1.s4475c1f4");
    test_class_info(&lv, &cd_S4475C1);
    dp->~S4475C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4475C1(Test_S4475C1, "S4475C1", ABISELECT(272,180));

#else // __cplusplus

extern void _ZN7S4475C1C1Ev();
extern void _ZN7S4475C1D1Ev();
Name_Map name_map_S4475C1[] = {
  NSPAIR(_ZN7S4475C1C1Ev),
  NSPAIR(_ZN7S4475C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4475C3;
extern VTBL_ENTRY _ZTI7S4475C3[];
extern  VTBL_ENTRY _ZTV7S4475C3[];
extern Class_Descriptor cd_S4475C6;
extern VTBL_ENTRY _ZTI7S4475C6[];
extern  VTBL_ENTRY _ZTV7S4475C6[];
extern Class_Descriptor cd_S4475C2;
extern VTBL_ENTRY _ZTI7S4475C2[];
extern  VTBL_ENTRY _ZTV7S4475C2[];
static Base_Class bases_S4475C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4475C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4475C6,    ABISELECT(72,52), //bcp->offset
    10, //bcp->virtual_function_table_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_S4475C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4475C1[];
extern void _ZN7S4475C1D1Ev();
extern void _ZN7S4475C1D0Ev();
extern void _ZN7S4475C32v2Ev();
extern void _ZN7S4475C32v3Ev();
extern void _ZN7S4475C32v4Ev();
extern void _ZN7S4475C22v6Ev();
extern void _ZN7S4475C22v7Ev();
extern void _ZN7S4475C12v1Ev();
extern void ABISELECT(_ZThn72_N7S4475C1D1Ev,_ZThn52_N7S4475C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4475C1D0Ev,_ZThn52_N7S4475C1D0Ev)();
extern void _ZN7S4475C62v5Ev();
static  VTBL_ENTRY vtc_S4475C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4475C1[0]),
  (VTBL_ENTRY)&_ZN7S4475C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4475C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4475C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4475C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4475C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4475C12v1Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4475C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4475C1D1Ev,_ZThn52_N7S4475C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4475C1D0Ev,_ZThn52_N7S4475C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4475C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4475C1[];
extern  VTBL_ENTRY _ZTV7S4475C1[];
Class_Descriptor cd_S4475C1 = {  "S4475C1", // class name
  bases_S4475C1, 3,
  &(vtc_S4475C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,180), // object size
  NSPAIRA(_ZTI7S4475C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4475C1),15, //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  S7319C4  {
  void *s7319c4f0;
  long double s7319c4f1;
  int s7319c4f2;
  virtual void  v4(); // _ZN7S7319C42v4Ev
  virtual void  v5(); // _ZN7S7319C42v5Ev
  ~S7319C4(); // tgen
  S7319C4(); // tgen
};
//SIG(-1 S7319C4) C1{ v1 v2 Fp FD Fi}


void  S7319C4 ::v4(){vfunc_called(this, "_ZN7S7319C42v4Ev");}
void  S7319C4 ::v5(){vfunc_called(this, "_ZN7S7319C42v5Ev");}
S7319C4 ::~S7319C4(){ note_dtor("S7319C4", this);} // tgen
S7319C4 ::S7319C4(){ note_ctor("S7319C4", this);} // tgen

static void Test_S7319C4()
{
  extern Class_Descriptor cd_S7319C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S7319C4, buf);
    S7319C4 *dp, &lv = *(dp=new (buf) S7319C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7319C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7319C4)");
    check_field_offset(lv, s7319c4f0, ABISELECT(8,4), "S7319C4.s7319c4f0");
    check_field_offset(lv, s7319c4f1, ABISELECT(16,8), "S7319C4.s7319c4f1");
    check_field_offset(lv, s7319c4f2, ABISELECT(32,20), "S7319C4.s7319c4f2");
    test_class_info(&lv, &cd_S7319C4);
    dp->~S7319C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C4(Test_S7319C4, "S7319C4", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7319C4C1Ev();
extern void _ZN7S7319C4D1Ev();
Name_Map name_map_S7319C4[] = {
  NSPAIR(_ZN7S7319C4C1Ev),
  NSPAIR(_ZN7S7319C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7319C4[];
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY vtc_S7319C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C4[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
Class_Descriptor cd_S7319C4 = {  "S7319C4", // class name
  0,0,//no base classes
  &(vtc_S7319C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7319C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7319C4),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  S7319C6  : S7319C4 {
  virtual void  v6(); // _ZN7S7319C62v6Ev
  virtual void  v7(); // _ZN7S7319C62v7Ev
  ~S7319C6(); // tgen
  S7319C6(); // tgen
};
//SIG(-1 S7319C6) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S7319C6 ::v6(){vfunc_called(this, "_ZN7S7319C62v6Ev");}
void  S7319C6 ::v7(){vfunc_called(this, "_ZN7S7319C62v7Ev");}
S7319C6 ::~S7319C6(){ note_dtor("S7319C6", this);} // tgen
S7319C6 ::S7319C6(){ note_ctor("S7319C6", this);} // tgen

static void Test_S7319C6()
{
  extern Class_Descriptor cd_S7319C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S7319C6, buf);
    S7319C6 *dp, &lv = *(dp=new (buf) S7319C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7319C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7319C6)");
    check_base_class_offset(lv, (S7319C4*), 0, "S7319C6");
    test_class_info(&lv, &cd_S7319C6);
    dp->~S7319C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C6(Test_S7319C6, "S7319C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7319C6C1Ev();
extern void _ZN7S7319C6D1Ev();
Name_Map name_map_S7319C6[] = {
  NSPAIR(_ZN7S7319C6C1Ev),
  NSPAIR(_ZN7S7319C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
static Base_Class bases_S7319C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7319C6[];
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
static  VTBL_ENTRY vtc_S7319C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C6[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
};
extern VTBL_ENTRY _ZTI7S7319C6[];
extern  VTBL_ENTRY _ZTV7S7319C6[];
Class_Descriptor cd_S7319C6 = {  "S7319C6", // class name
  bases_S7319C6, 1,
  &(vtc_S7319C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7319C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7319C6),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  S7319C5  : S7319C6 , S7319C4 {
  virtual void  v8(); // _ZN7S7319C52v8Ev
  virtual void  v9(); // _ZN7S7319C52v9Ev
  virtual void  v10(); // _ZN7S7319C53v10Ev
  virtual void  v11(); // _ZN7S7319C53v11Ev
  ~S7319C5(); // tgen
  S7319C5(); // tgen
};
//SIG(-1 S7319C5) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S7319C5 ::v8(){vfunc_called(this, "_ZN7S7319C52v8Ev");}
void  S7319C5 ::v9(){vfunc_called(this, "_ZN7S7319C52v9Ev");}
void  S7319C5 ::v10(){vfunc_called(this, "_ZN7S7319C53v10Ev");}
void  S7319C5 ::v11(){vfunc_called(this, "_ZN7S7319C53v11Ev");}
S7319C5 ::~S7319C5(){ note_dtor("S7319C5", this);} // tgen
S7319C5 ::S7319C5(){ note_ctor("S7319C5", this);} // tgen

static void Test_S7319C5()
{
  extern Class_Descriptor cd_S7319C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S7319C5, buf);
    S7319C5 *dp, &lv = *(dp=new (buf) S7319C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S7319C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7319C5)");
    check_base_class_offset(lv, (S7319C4*)(S7319C6*), 0, "S7319C5");
    check_base_class_offset(lv, (S7319C6*), 0, "S7319C5");
    /*is_ambiguous_... S7319C5::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*), ABISELECT(48,24), "S7319C5");
    test_class_info(&lv, &cd_S7319C5);
    dp->~S7319C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C5(Test_S7319C5, "S7319C5", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S7319C5C1Ev();
extern void _ZN7S7319C5D1Ev();
Name_Map name_map_S7319C5[] = {
  NSPAIR(_ZN7S7319C5C1Ev),
  NSPAIR(_ZN7S7319C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C6;
extern VTBL_ENTRY _ZTI7S7319C6[];
extern  VTBL_ENTRY _ZTV7S7319C6[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
static Base_Class bases_S7319C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7319C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S7319C4,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_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 _ZTI7S7319C5[];
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY vtc_S7319C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C5[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7319C5[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S7319C5[];
extern  VTBL_ENTRY _ZTV7S7319C5[];
Class_Descriptor cd_S7319C5 = {  "S7319C5", // class name
  bases_S7319C5, 3,
  &(vtc_S7319C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S7319C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7319C5),14, //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  S7319C3  : S7319C4 , virtual S7319C5 {
  __tsi64 s7319c3f0;
  int s7319c3f1;
  virtual  ~S7319C3(); // _ZN7S7319C3D2Ev
  virtual void  v12(); // _ZN7S7319C33v12Ev
  S7319C3(); // tgen
};
//SIG(-1 S7319C3) C1{ BC2{ v2 v3 Fp FD Fi} VBC3{ BC4{ BC2 v4 v5} BC2 v6 v7 v8 v9} vd v1 FL Fi}


 S7319C3 ::~S7319C3(){ note_dtor("S7319C3", this);}
void  S7319C3 ::v12(){vfunc_called(this, "_ZN7S7319C33v12Ev");}
S7319C3 ::S7319C3(){ note_ctor("S7319C3", this);} // tgen

static void Test_S7319C3()
{
  extern Class_Descriptor cd_S7319C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,22)];
    init_test(&cd_S7319C3, buf);
    S7319C3 *dp, &lv = *(dp=new (buf) S7319C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,84), "sizeof(S7319C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7319C3)");
    /*is_ambiguous_... S7319C3::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*), 0, "S7319C3");
    check_base_class_offset(lv, (S7319C4*)(S7319C6*)(S7319C5*), ABISELECT(64,36), "S7319C3");
    check_base_class_offset(lv, (S7319C6*)(S7319C5*), ABISELECT(64,36), "S7319C3");
    /*is_ambiguous_... S7319C5::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C5*), ABISELECT(112,60), "S7319C3");
    check_base_class_offset(lv, (S7319C5*), ABISELECT(64,36), "S7319C3");
    check_field_offset(lv, s7319c3f0, ABISELECT(40,24), "S7319C3.s7319c3f0");
    check_field_offset(lv, s7319c3f1, ABISELECT(48,32), "S7319C3.s7319c3f1");
    test_class_info(&lv, &cd_S7319C3);
    dp->~S7319C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C3(Test_S7319C3, "S7319C3", ABISELECT(160,84));

#else // __cplusplus

extern void _ZN7S7319C3C1Ev();
extern void _ZN7S7319C3D2Ev();
Name_Map name_map_S7319C3[] = {
  NSPAIR(_ZN7S7319C3C1Ev),
  NSPAIR(_ZN7S7319C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C6;
extern VTBL_ENTRY _ZTI7S7319C6[];
extern  VTBL_ENTRY _ZTV7S7319C6[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C5;
extern VTBL_ENTRY _ZTI7S7319C5[];
extern  VTBL_ENTRY _ZTV7S7319C5[];
static Base_Class bases_S7319C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7319C4,    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
    2, //immediately_derived
  0, 0},
  {&cd_S7319C6,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7319C4,    ABISELECT(112,60), //bcp->offset
    26, //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
    4, //immediately_derived
  0, 0},
  {&cd_S7319C5,    ABISELECT(64,36), //bcp->offset
    8, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S7319C3[];
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C3D1Ev();
extern void _ZN7S7319C3D0Ev();
extern void _ZN7S7319C33v12Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY vtc_S7319C3[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7319C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7319C33v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
extern VTBL_ENTRY _ZTV7S7319C3[];
static  VTT_ENTRY vtt_S7319C3[] = {
  {&(_ZTV7S7319C3[3]),  3,30},
  {&(_ZTV7S7319C3[18]),  18,30},
  {&(_ZTV7S7319C3[28]),  28,30},
};
extern VTBL_ENTRY _ZTI7S7319C3[];
extern  VTBL_ENTRY _ZTV7S7319C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C3[];
Class_Descriptor cd_S7319C3 = {  "S7319C3", // class name
  bases_S7319C3, 5,
  &(vtc_S7319C3[0]), // expected_vtbl_contents
  &(vtt_S7319C3[0]), // expected_vtt_contents
  ABISELECT(160,84), // object size
  NSPAIRA(_ZTI7S7319C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7319C3),30, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7319C3),3, //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  S7319C2  : virtual S7319C3 , virtual S7319C4 {
  void *s7319c2f0[2];
  virtual  ~S7319C2(); // _ZN7S7319C2D2Ev
  virtual void  v13(); // _ZN7S7319C23v13Ev
  virtual void  v14(); // _ZN7S7319C23v14Ev
  virtual void  v15(); // _ZN7S7319C23v15Ev
  virtual void  v16(); // _ZN7S7319C23v16Ev
  virtual void  v17(); // _ZN7S7319C23v17Ev
  virtual void  v18(); // _ZN7S7319C23v18Ev
  S7319C2(); // tgen
};
//SIG(-1 S7319C2) C1{ VBC2{ BC3{ v7 v8 Fp FD Fi} VBC4{ BC5{ BC3 v9 v10} BC3 v11 v12 v13 v14} vd v15 FL Fi} VBC3 vd v1 v2 v3 v4 v5 v6 Fp[2]}


 S7319C2 ::~S7319C2(){ note_dtor("S7319C2", this);}
void  S7319C2 ::v13(){vfunc_called(this, "_ZN7S7319C23v13Ev");}
void  S7319C2 ::v14(){vfunc_called(this, "_ZN7S7319C23v14Ev");}
void  S7319C2 ::v15(){vfunc_called(this, "_ZN7S7319C23v15Ev");}
void  S7319C2 ::v16(){vfunc_called(this, "_ZN7S7319C23v16Ev");}
void  S7319C2 ::v17(){vfunc_called(this, "_ZN7S7319C23v17Ev");}
void  S7319C2 ::v18(){vfunc_called(this, "_ZN7S7319C23v18Ev");}
S7319C2 ::S7319C2(){ note_ctor("S7319C2", this);} // tgen

static void Test_S7319C2()
{
  extern Class_Descriptor cd_S7319C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,31)];
    init_test(&cd_S7319C2, buf);
    S7319C2 *dp, &lv = *(dp=new (buf) S7319C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,120), "sizeof(S7319C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7319C2)");
    /*is_ambiguous_... S7319C3::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C3*), ABISELECT(32,12), "S7319C2");
    check_base_class_offset(lv, (S7319C4*)(S7319C6*)(S7319C5*), ABISELECT(96,48), "S7319C2");
    check_base_class_offset(lv, (S7319C6*)(S7319C5*), ABISELECT(96,48), "S7319C2");
    /*is_ambiguous_... S7319C5::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C5*), ABISELECT(144,72), "S7319C2");
    check_base_class_offset(lv, (S7319C5*)(S7319C3*), ABISELECT(96,48), "S7319C2");
    check_base_class_offset(lv, (S7319C3*), ABISELECT(32,12), "S7319C2");
    /*is_ambiguous_... S7319C2::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*), ABISELECT(192,96), "S7319C2");
    check_field_offset(lv, s7319c2f0, ABISELECT(8,4), "S7319C2.s7319c2f0");
    test_class_info(&lv, &cd_S7319C2);
    dp->~S7319C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C2(Test_S7319C2, "S7319C2", ABISELECT(240,120));

#else // __cplusplus

extern void _ZN7S7319C2C1Ev();
extern void _ZN7S7319C2D2Ev();
Name_Map name_map_S7319C2[] = {
  NSPAIR(_ZN7S7319C2C1Ev),
  NSPAIR(_ZN7S7319C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C6;
extern VTBL_ENTRY _ZTI7S7319C6[];
extern  VTBL_ENTRY _ZTV7S7319C6[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C5;
extern VTBL_ENTRY _ZTI7S7319C5[];
extern  VTBL_ENTRY _ZTV7S7319C5[];
extern Class_Descriptor cd_S7319C3;
extern VTBL_ENTRY _ZTI7S7319C3[];
extern  VTBL_ENTRY _ZTV7S7319C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C3[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
static Base_Class bases_S7319C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C4,    ABISELECT(32,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
    5, //immediately_derived
  0, 0},
  {&cd_S7319C4,    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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7319C6,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7319C4,    ABISELECT(144,72), //bcp->offset
    43, //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
    4, //immediately_derived
  0, 0},
  {&cd_S7319C5,    ABISELECT(96,48), //bcp->offset
    25, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7319C3,    ABISELECT(32,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7319C4,    ABISELECT(192,96), //bcp->offset
    47, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7319C2[];
extern void _ZN7S7319C2D1Ev();
extern void _ZN7S7319C2D0Ev();
extern void _ZN7S7319C23v13Ev();
extern void _ZN7S7319C23v14Ev();
extern void _ZN7S7319C23v15Ev();
extern void _ZN7S7319C23v16Ev();
extern void _ZN7S7319C23v17Ev();
extern void _ZN7S7319C23v18Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7319C2D1Ev,_ZTv0_n24_N7S7319C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7319C2D1Ev,_ZThn12_N7S7319C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7319C2D0Ev,_ZTv0_n24_N7S7319C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7319C2D0Ev,_ZThn12_N7S7319C2D0Ev)() __attribute__((weak));
extern void _ZN7S7319C33v12Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY vtc_S7319C2[] = {
  ABISELECT(192,96),
  ABISELECT(96,48),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7319C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v18Ev,
  0,
  ABISELECT(-32,-12),
  0,
  0,
  ABISELECT(64,36),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7319C2D1Ev,_ZTv0_n24_N7S7319C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7319C2D0Ev,_ZTv0_n24_N7S7319C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7319C33v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  0,
  0,
  ABISELECT(-192,-96),
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
extern VTBL_ENTRY _ZTV7S7319C2[];
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C3D1Ev();
extern void _ZN7S7319C3D0Ev();
extern void _ZN7S7319C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C3__7S7319C2[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7319C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7319C33v12Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C5__7S7319C3__7S7319C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C47S7319C5__A2__7S7319C3__7S7319C2[] = {
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
static  VTT_ENTRY vtt_S7319C2[] = {
  {&(_ZTV7S7319C2[5]),  5,53},
  {&(_ZTV7S7319C2[20]),  20,53},
  {&(_ZTV7S7319C2[35]),  35,53},
  {&(_ZTV7S7319C2[45]),  45,53},
  {&(_ZTV7S7319C2[51]),  51,53},
  {&(_tg__ZTV7S7319C3__7S7319C2[3]),  3,8},
  {&(_tg__ZTV7S7319C5__7S7319C3__7S7319C2[10]),  10,18},
  {&(_tg__ZTV7S7319C47S7319C5__A2__7S7319C3__7S7319C2[2]),  2,4},
};
extern VTBL_ENTRY _ZTI7S7319C2[];
extern  VTBL_ENTRY _ZTV7S7319C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C2[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7319C2D0Ev,_ZTv0_n24_N7S7319C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7319C2D0Ev,_ZThn12_N7S7319C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7319C2D1Ev,_ZTv0_n24_N7S7319C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7319C2D1Ev,_ZThn12_N7S7319C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7319C2 = {  "S7319C2", // class name
  bases_S7319C2, 7,
  &(vtc_S7319C2[0]), // expected_vtbl_contents
  &(vtt_S7319C2[0]), // expected_vtt_contents
  ABISELECT(240,120), // object size
  NSPAIRA(_ZTI7S7319C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7319C2),53, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7319C2),8, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7319C8_nt  {
  virtual void  v19(); // _ZN10S7319C8_nt3v19Ev
  virtual void  v20(); // _ZN10S7319C8_nt3v20Ev
  virtual void  v21(); // _ZN10S7319C8_nt3v21Ev
  virtual void  v22(); // _ZN10S7319C8_nt3v22Ev
  virtual void  v23(); // _ZN10S7319C8_nt3v23Ev
  virtual void  v24(); // _ZN10S7319C8_nt3v24Ev
  ~S7319C8_nt(); // tgen
  S7319C8_nt(); // tgen
};
//SIG(-1 S7319C8_nt) C1{ v1 v2 v3 v4 v5 v6}


void  S7319C8_nt ::v19(){vfunc_called(this, "_ZN10S7319C8_nt3v19Ev");}
void  S7319C8_nt ::v20(){vfunc_called(this, "_ZN10S7319C8_nt3v20Ev");}
void  S7319C8_nt ::v21(){vfunc_called(this, "_ZN10S7319C8_nt3v21Ev");}
void  S7319C8_nt ::v22(){vfunc_called(this, "_ZN10S7319C8_nt3v22Ev");}
void  S7319C8_nt ::v23(){vfunc_called(this, "_ZN10S7319C8_nt3v23Ev");}
void  S7319C8_nt ::v24(){vfunc_called(this, "_ZN10S7319C8_nt3v24Ev");}
S7319C8_nt ::~S7319C8_nt(){ note_dtor("S7319C8_nt", this);} // tgen
S7319C8_nt ::S7319C8_nt(){ note_ctor("S7319C8_nt", this);} // tgen

//skip512 S7319C8_nt

#else // __cplusplus

extern void _ZN10S7319C8_ntC1Ev();
extern void _ZN10S7319C8_ntD1Ev();
Name_Map name_map_S7319C8_nt[] = {
  NSPAIR(_ZN10S7319C8_ntC1Ev),
  NSPAIR(_ZN10S7319C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7319C8_nt[];
extern void _ZN10S7319C8_nt3v19Ev();
extern void _ZN10S7319C8_nt3v20Ev();
extern void _ZN10S7319C8_nt3v21Ev();
extern void _ZN10S7319C8_nt3v22Ev();
extern void _ZN10S7319C8_nt3v23Ev();
extern void _ZN10S7319C8_nt3v24Ev();
static  VTBL_ENTRY vtc_S7319C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7319C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v24Ev,
};
extern VTBL_ENTRY _ZTI10S7319C8_nt[];
VTBL_ENTRY *P__ZTI10S7319C8_nt = _ZTI10S7319C8_nt; 
extern  VTBL_ENTRY _ZTV10S7319C8_nt[];
Class_Descriptor cd_S7319C8_nt = {  "S7319C8_nt", // class name
  0,0,//no base classes
  &(vtc_S7319C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7319C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7319C8_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  S7319C12  {
  ::S1400C17_nt s7319c12f0;
  void *s7319c12f1;
  virtual void  v25(); // _ZN8S7319C123v25Ev
  ~S7319C12(); // tgen
  S7319C12(); // tgen
};
//SIG(-1 S7319C12) C1{ v1 FC2{ v2 v3} Fp}


void  S7319C12 ::v25(){vfunc_called(this, "_ZN8S7319C123v25Ev");}
S7319C12 ::~S7319C12(){ note_dtor("S7319C12", this);} // tgen
S7319C12 ::S7319C12(){ note_ctor("S7319C12", this);} // tgen

static void Test_S7319C12()
{
  extern Class_Descriptor cd_S7319C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7319C12, buf);
    S7319C12 *dp, &lv = *(dp=new (buf) S7319C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7319C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7319C12)");
    check_field_offset(lv, s7319c12f0, ABISELECT(8,4), "S7319C12.s7319c12f0");
    check_field_offset(lv, s7319c12f1, ABISELECT(16,8), "S7319C12.s7319c12f1");
    test_class_info(&lv, &cd_S7319C12);
    dp->~S7319C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C12(Test_S7319C12, "S7319C12", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S7319C12C1Ev();
extern void _ZN8S7319C12D1Ev();
Name_Map name_map_S7319C12[] = {
  NSPAIR(_ZN8S7319C12C1Ev),
  NSPAIR(_ZN8S7319C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7319C12[];
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY vtc_S7319C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C12[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern VTBL_ENTRY _ZTI8S7319C12[];
extern  VTBL_ENTRY _ZTV8S7319C12[];
Class_Descriptor cd_S7319C12 = {  "S7319C12", // class name
  0,0,//no base classes
  &(vtc_S7319C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S7319C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7319C12),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7319C11  : virtual S7319C12 {
  virtual void  v26(); // _ZN8S7319C113v26Ev
  ~S7319C11(); // tgen
  S7319C11(); // tgen
};
//SIG(-1 S7319C11) C1{ VBC2{ v2 FC3{ v3 v4} Fp} v1}


void  S7319C11 ::v26(){vfunc_called(this, "_ZN8S7319C113v26Ev");}
S7319C11 ::~S7319C11(){ note_dtor("S7319C11", this);} // tgen
S7319C11 ::S7319C11(){ note_ctor("S7319C11", this);} // tgen

static void Test_S7319C11()
{
  extern Class_Descriptor cd_S7319C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7319C11, buf);
    S7319C11 *dp, &lv = *(dp=new (buf) S7319C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7319C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7319C11)");
    check_base_class_offset(lv, (S7319C12*), ABISELECT(8,4), "S7319C11");
    test_class_info(&lv, &cd_S7319C11);
    dp->~S7319C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C11(Test_S7319C11, "S7319C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S7319C11C1Ev();
extern void _ZN8S7319C11D1Ev();
Name_Map name_map_S7319C11[] = {
  NSPAIR(_ZN8S7319C11C1Ev),
  NSPAIR(_ZN8S7319C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C12;
extern VTBL_ENTRY _ZTI8S7319C12[];
extern  VTBL_ENTRY _ZTV8S7319C12[];
static Base_Class bases_S7319C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C12,    ABISELECT(8,4), //bcp->offset
    4, //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 _ZTI8S7319C11[];
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY vtc_S7319C11[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern VTBL_ENTRY _ZTV8S7319C11[];
static  VTT_ENTRY vtt_S7319C11[] = {
  {&(_ZTV8S7319C11[3]),  3,8},
  {&(_ZTV8S7319C11[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S7319C11[];
extern  VTBL_ENTRY _ZTV8S7319C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C11[];
Class_Descriptor cd_S7319C11 = {  "S7319C11", // class name
  bases_S7319C11, 1,
  &(vtc_S7319C11[0]), // expected_vtbl_contents
  &(vtt_S7319C11[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S7319C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7319C11),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7319C11),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  S7319C10  : virtual S7319C11 {
  virtual void  v27(); // _ZN8S7319C103v27Ev
  virtual void  v28(); // _ZN8S7319C103v28Ev
  virtual void  v29(); // _ZN8S7319C103v29Ev
  ~S7319C10(); // tgen
  S7319C10(); // tgen
};
//SIG(-1 S7319C10) C1{ VBC2{ VBC3{ v4 FC4{ v6 v7} Fp} v5} v1 v2 v3}


void  S7319C10 ::v27(){vfunc_called(this, "_ZN8S7319C103v27Ev");}
void  S7319C10 ::v28(){vfunc_called(this, "_ZN8S7319C103v28Ev");}
void  S7319C10 ::v29(){vfunc_called(this, "_ZN8S7319C103v29Ev");}
S7319C10 ::~S7319C10(){ note_dtor("S7319C10", this);} // tgen
S7319C10 ::S7319C10(){ note_ctor("S7319C10", this);} // tgen

static void Test_S7319C10()
{
  extern Class_Descriptor cd_S7319C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7319C10, buf);
    S7319C10 *dp, &lv = *(dp=new (buf) S7319C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7319C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7319C10)");
    check_base_class_offset(lv, (S7319C12*)(S7319C11*), ABISELECT(8,4), "S7319C10");
    check_base_class_offset(lv, (S7319C11*), 0, "S7319C10");
    test_class_info(&lv, &cd_S7319C10);
    dp->~S7319C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C10(Test_S7319C10, "S7319C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S7319C10C1Ev();
extern void _ZN8S7319C10D1Ev();
Name_Map name_map_S7319C10[] = {
  NSPAIR(_ZN8S7319C10C1Ev),
  NSPAIR(_ZN8S7319C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C12;
extern VTBL_ENTRY _ZTI8S7319C12[];
extern  VTBL_ENTRY _ZTV8S7319C12[];
extern Class_Descriptor cd_S7319C11;
extern VTBL_ENTRY _ZTI8S7319C11[];
extern  VTBL_ENTRY _ZTV8S7319C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C11[];
static Base_Class bases_S7319C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C12,    ABISELECT(8,4), //bcp->offset
    9, //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
    1, //immediately_derived
  0, 1},
  {&cd_S7319C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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 _ZTI8S7319C10[];
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY vtc_S7319C10[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C10[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C10[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern VTBL_ENTRY _ZTV8S7319C10[];
extern void _ZN8S7319C113v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C11__8S7319C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__8S7319C11__8S7319C10[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
static  VTT_ENTRY vtt_S7319C10[] = {
  {&(_ZTV8S7319C10[5]),  5,13},
  {&(_ZTV8S7319C10[5]),  5,13},
  {&(_ZTV8S7319C10[12]),  12,13},
  {&(_tg__ZTV8S7319C11__8S7319C10[3]),  3,4},
  {&(_tg__ZTV8S7319C12__8S7319C11__8S7319C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7319C10[];
extern  VTBL_ENTRY _ZTV8S7319C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C10[];
Class_Descriptor cd_S7319C10 = {  "S7319C10", // class name
  bases_S7319C10, 2,
  &(vtc_S7319C10[0]), // expected_vtbl_contents
  &(vtt_S7319C10[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S7319C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7319C10),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7319C10),5, //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  S7319C9  : S7319C5 , virtual S7319C10 {
  virtual void  v30(); // _ZN7S7319C93v30Ev
  virtual void  v31(); // _ZN7S7319C93v31Ev
  virtual void  v32(); // _ZN7S7319C93v32Ev
  ~S7319C9(); // tgen
  S7319C9(); // tgen
};
//SIG(-1 S7319C9) C1{ BC2{ BC3{ BC4{ v4 v5 Fp FD Fi} v6 v7} BC4 v8 v9 v10 v11} VBC5{ VBC6{ VBC7{ v12 FC8{ v17 v18} Fp} v13} v14 v15 v16} v1 v2 v3}


void  S7319C9 ::v30(){vfunc_called(this, "_ZN7S7319C93v30Ev");}
void  S7319C9 ::v31(){vfunc_called(this, "_ZN7S7319C93v31Ev");}
void  S7319C9 ::v32(){vfunc_called(this, "_ZN7S7319C93v32Ev");}
S7319C9 ::~S7319C9(){ note_dtor("S7319C9", this);} // tgen
S7319C9 ::S7319C9(){ note_ctor("S7319C9", this);} // tgen

static void Test_S7319C9()
{
  extern Class_Descriptor cd_S7319C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S7319C9, buf);
    S7319C9 *dp, &lv = *(dp=new (buf) S7319C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S7319C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7319C9)");
    check_base_class_offset(lv, (S7319C4*)(S7319C6*)(S7319C5*), 0, "S7319C9");
    check_base_class_offset(lv, (S7319C6*)(S7319C5*), 0, "S7319C9");
    /*is_ambiguous_... S7319C5::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C5*), ABISELECT(48,24), "S7319C9");
    check_base_class_offset(lv, (S7319C5*), 0, "S7319C9");
    check_base_class_offset(lv, (S7319C12*)(S7319C11*), ABISELECT(96,52), "S7319C9");
    check_base_class_offset(lv, (S7319C11*)(S7319C10*), ABISELECT(88,48), "S7319C9");
    check_base_class_offset(lv, (S7319C10*), ABISELECT(88,48), "S7319C9");
    test_class_info(&lv, &cd_S7319C9);
    dp->~S7319C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C9(Test_S7319C9, "S7319C9", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN7S7319C9C1Ev();
extern void _ZN7S7319C9D1Ev();
Name_Map name_map_S7319C9[] = {
  NSPAIR(_ZN7S7319C9C1Ev),
  NSPAIR(_ZN7S7319C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C6;
extern VTBL_ENTRY _ZTI7S7319C6[];
extern  VTBL_ENTRY _ZTV7S7319C6[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C5;
extern VTBL_ENTRY _ZTI7S7319C5[];
extern  VTBL_ENTRY _ZTV7S7319C5[];
extern Class_Descriptor cd_S7319C12;
extern VTBL_ENTRY _ZTI8S7319C12[];
extern  VTBL_ENTRY _ZTV8S7319C12[];
extern Class_Descriptor cd_S7319C11;
extern VTBL_ENTRY _ZTI8S7319C11[];
extern  VTBL_ENTRY _ZTV8S7319C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C11[];
extern Class_Descriptor cd_S7319C10;
extern VTBL_ENTRY _ZTI8S7319C10[];
extern  VTBL_ENTRY _ZTV8S7319C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C10[];
static Base_Class bases_S7319C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S7319C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S7319C4,    ABISELECT(48,24), //bcp->offset
    16, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S7319C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S7319C12,    ABISELECT(96,52), //bcp->offset
    32, //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
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7319C11,    ABISELECT(88,48), //bcp->offset
    -1, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7319C10,    ABISELECT(88,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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 _ZTI7S7319C9[];
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C93v30Ev();
extern void _ZN7S7319C93v31Ev();
extern void _ZN7S7319C93v32Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY vtc_S7319C9[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v32Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern VTBL_ENTRY _ZTV7S7319C9[];
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C10__7S7319C9[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C10[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__8S7319C10__7S7319C9[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C10[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern void _ZN8S7319C113v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C11__7S7319C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__8S7319C11__7S7319C9[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
static  VTT_ENTRY vtt_S7319C9[] = {
  {&(_ZTV7S7319C9[5]),  5,36},
  {&(_ZTV7S7319C9[28]),  28,36},
  {&(_ZTV7S7319C9[28]),  28,36},
  {&(_ZTV7S7319C9[35]),  35,36},
  {&(_tg__ZTV8S7319C10__7S7319C9[5]),  5,9},
  {&(_tg__ZTV8S7319C10__7S7319C9[5]),  5,9},
  {&(_tg__ZTV8S7319C12__8S7319C10__7S7319C9[3]),  3,4},
  {&(_tg__ZTV8S7319C11__7S7319C9[3]),  3,4},
  {&(_tg__ZTV8S7319C12__8S7319C11__7S7319C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7319C9[];
extern  VTBL_ENTRY _ZTV7S7319C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C9[];
Class_Descriptor cd_S7319C9 = {  "S7319C9", // class name
  bases_S7319C9, 7,
  &(vtc_S7319C9[0]), // expected_vtbl_contents
  &(vtt_S7319C9[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI7S7319C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7319C9),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7319C9),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7319C7  : S7319C8_nt , virtual S7319C9 {
  void *s7319c7f0;
  __tsi64 s7319c7f1:5;
  virtual  ~S7319C7(); // _ZN7S7319C7D2Ev
  virtual void  v33(); // _ZN7S7319C73v33Ev
  S7319C7(); // tgen
};
//SIG(-1 S7319C7) C1{ BC2{ v2 v3 v4 v5 v6 v7} VBC3{ BC4{ BC5{ BC6{ v8 v9 Fp FD Fi} v10 v11} BC6 v12 v13 v14 v15} VBC7{ VBC8{ VBC9{ v16 FC10{ v24 v25} Fp} v17} v18 v19 v20} v21 v22 v23} vd v1 Fp FL:5}


 S7319C7 ::~S7319C7(){ note_dtor("S7319C7", this);}
void  S7319C7 ::v33(){vfunc_called(this, "_ZN7S7319C73v33Ev");}
S7319C7 ::S7319C7(){ note_ctor("S7319C7", this);} // tgen

static void Test_S7319C7()
{
  extern Class_Descriptor cd_S7319C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,20)];
    init_test(&cd_S7319C7, buf);
    S7319C7 *dp, &lv = *(dp=new (buf) S7319C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,76), "sizeof(S7319C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7319C7)");
    check_base_class_offset(lv, (S7319C8_nt*), 0, "S7319C7");
    check_base_class_offset(lv, (S7319C4*)(S7319C6*)(S7319C5*)(S7319C9*), ABISELECT(32,12), "S7319C7");
    check_base_class_offset(lv, (S7319C6*)(S7319C5*)(S7319C9*), ABISELECT(32,12), "S7319C7");
    /*is_ambiguous_... S7319C5::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C5*)(S7319C9*), ABISELECT(80,36), "S7319C7");
    check_base_class_offset(lv, (S7319C5*)(S7319C9*), ABISELECT(32,12), "S7319C7");
    check_base_class_offset(lv, (S7319C12*)(S7319C11*), ABISELECT(128,64), "S7319C7");
    check_base_class_offset(lv, (S7319C11*)(S7319C10*), ABISELECT(120,60), "S7319C7");
    check_base_class_offset(lv, (S7319C10*)(S7319C9*), ABISELECT(120,60), "S7319C7");
    check_base_class_offset(lv, (S7319C9*), ABISELECT(32,12), "S7319C7");
    check_field_offset(lv, s7319c7f0, ABISELECT(8,4), "S7319C7.s7319c7f0");
    set_bf_and_test(lv, s7319c7f1, ABISELECT(16,8), 0, 5, 1, "S7319C7");
    set_bf_and_test(lv, s7319c7f1, ABISELECT(16,8), 0, 5, hide_sll(1LL<<4), "S7319C7");
    test_class_info(&lv, &cd_S7319C7);
    dp->~S7319C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C7(Test_S7319C7, "S7319C7", ABISELECT(160,76));

#else // __cplusplus

extern void _ZN7S7319C7C1Ev();
extern void _ZN7S7319C7D2Ev();
Name_Map name_map_S7319C7[] = {
  NSPAIR(_ZN7S7319C7C1Ev),
  NSPAIR(_ZN7S7319C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C8_nt;
extern VTBL_ENTRY _ZTI10S7319C8_nt[];
extern  VTBL_ENTRY _ZTV10S7319C8_nt[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C6;
extern VTBL_ENTRY _ZTI7S7319C6[];
extern  VTBL_ENTRY _ZTV7S7319C6[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C5;
extern VTBL_ENTRY _ZTI7S7319C5[];
extern  VTBL_ENTRY _ZTV7S7319C5[];
extern Class_Descriptor cd_S7319C12;
extern VTBL_ENTRY _ZTI8S7319C12[];
extern  VTBL_ENTRY _ZTV8S7319C12[];
extern Class_Descriptor cd_S7319C11;
extern VTBL_ENTRY _ZTI8S7319C11[];
extern  VTBL_ENTRY _ZTV8S7319C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C11[];
extern Class_Descriptor cd_S7319C10;
extern VTBL_ENTRY _ZTI8S7319C10[];
extern  VTBL_ENTRY _ZTV8S7319C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C10[];
extern Class_Descriptor cd_S7319C9;
extern VTBL_ENTRY _ZTI7S7319C9[];
extern  VTBL_ENTRY _ZTV7S7319C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C9[];
static Base_Class bases_S7319C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C8_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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7319C4,    ABISELECT(32,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
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7319C6,    ABISELECT(32,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
    4, //immediately_derived
  0, 0},
  {&cd_S7319C4,    ABISELECT(80,36), //bcp->offset
    42, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7319C5,    ABISELECT(32,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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7319C12,    ABISELECT(128,64), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //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
    6, //immediately_derived
  0, 1},
  {&cd_S7319C11,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7319C10,    ABISELECT(120,60), //bcp->offset
    46, //bcp->virtual_function_table_offset
    8, //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
    8, //immediately_derived
  0, 1},
  {&cd_S7319C9,    ABISELECT(32,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7319C7[];
extern void _ZN10S7319C8_nt3v19Ev();
extern void _ZN10S7319C8_nt3v20Ev();
extern void _ZN10S7319C8_nt3v21Ev();
extern void _ZN10S7319C8_nt3v22Ev();
extern void _ZN10S7319C8_nt3v23Ev();
extern void _ZN10S7319C8_nt3v24Ev();
extern void _ZN7S7319C7D1Ev();
extern void _ZN7S7319C7D0Ev();
extern void _ZN7S7319C73v33Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C93v30Ev();
extern void _ZN7S7319C93v31Ev();
extern void _ZN7S7319C93v32Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY vtc_S7319C7[] = {
  ABISELECT(128,64),
  ABISELECT(120,60),
  ABISELECT(120,60),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v24Ev,
  (VTBL_ENTRY)&_ZN7S7319C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7319C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7319C73v33Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v32Ev,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern VTBL_ENTRY _ZTV7S7319C7[];
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C93v30Ev();
extern void _ZN7S7319C93v31Ev();
extern void _ZN7S7319C93v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C9__7S7319C7[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v32Ev,
};
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C10__7S7319C9__7S7319C7[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__7S7319C9__7S7319C7[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C10__7S7319C7[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C10[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__8S7319C10__7S7319C7[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C10[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern void _ZN8S7319C113v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C11__7S7319C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__8S7319C11__7S7319C7[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
static  VTT_ENTRY vtt_S7319C7[] = {
  {&(_ZTV7S7319C7[6]),  6,62},
  {&(_ZTV7S7319C7[31]),  31,62},
  {&(_ZTV7S7319C7[44]),  44,62},
  {&(_ZTV7S7319C7[54]),  54,62},
  {&(_ZTV7S7319C7[54]),  54,62},
  {&(_ZTV7S7319C7[61]),  61,62},
  {&(_tg__ZTV7S7319C9__7S7319C7[5]),  5,16},
  {&(_tg__ZTV8S7319C10__7S7319C9__7S7319C7[8]),  8,12},
  {&(_tg__ZTV8S7319C10__7S7319C9__7S7319C7[8]),  8,12},
  {&(_tg__ZTV8S7319C12__7S7319C9__7S7319C7[3]),  3,4},
  {&(_tg__ZTV8S7319C10__7S7319C7[5]),  5,9},
  {&(_tg__ZTV8S7319C10__7S7319C7[5]),  5,9},
  {&(_tg__ZTV8S7319C12__8S7319C10__7S7319C7[3]),  3,4},
  {&(_tg__ZTV8S7319C11__7S7319C7[3]),  3,4},
  {&(_tg__ZTV8S7319C12__8S7319C11__7S7319C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7319C7[];
extern  VTBL_ENTRY _ZTV7S7319C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C7[];
Class_Descriptor cd_S7319C7 = {  "S7319C7", // class name
  bases_S7319C7, 9,
  &(vtc_S7319C7[0]), // expected_vtbl_contents
  &(vtt_S7319C7[0]), // expected_vtt_contents
  ABISELECT(160,76), // object size
  NSPAIRA(_ZTI7S7319C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7319C7),62, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7319C7),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7319C1  : S7319C2 , virtual S7319C7 {
  char s7319c1f0;
  virtual  ~S7319C1(); // _ZN7S7319C1D2Ev
  virtual void  v1(); // _ZN7S7319C12v1Ev
  virtual void  v2(); // _ZN7S7319C12v2Ev
  virtual void  v3(); // _ZN7S7319C12v3Ev
  S7319C1(); // tgen
};
//SIG(1 S7319C1) C1{ BC2{ VBC3{ BC4{ v4 v5 Fp FD Fi} VBC5{ BC6{ BC4 v6 v7} BC4 v8 v9 v10 v11} vd v12 FL Fi} VBC4 vd v13 v14 v15 v16 v17 v18 Fp[2]} VBC7{ BC8{ v19 v20 v21 v22 v23 v24} VBC9{ BC5 VBC10{ VBC11{ VBC12{ v25 FC13{ v34 v35} Fp} v26} v27 v28 v29} v30 v31 v32} vd v33 Fp FL:5} vd v1 v2 v3 Fc}


 S7319C1 ::~S7319C1(){ note_dtor("S7319C1", this);}
void  S7319C1 ::v1(){vfunc_called(this, "_ZN7S7319C12v1Ev");}
void  S7319C1 ::v2(){vfunc_called(this, "_ZN7S7319C12v2Ev");}
void  S7319C1 ::v3(){vfunc_called(this, "_ZN7S7319C12v3Ev");}
S7319C1 ::S7319C1(){ note_ctor("S7319C1", this);} // tgen

static void Test_S7319C1()
{
  extern Class_Descriptor cd_S7319C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,51)];
    init_test(&cd_S7319C1, buf);
    S7319C1 *dp, &lv = *(dp=new (buf) S7319C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,200), "sizeof(S7319C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7319C1)");
    /*is_ambiguous_... S7319C3::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C3*), ABISELECT(32,16), "S7319C1");
    /*is_ambiguous_... S7319C1::S7319C5 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C6*)(S7319C5*), ABISELECT(96,52), "S7319C1");
    /*is_ambiguous_... S7319C1::S7319C5 */ AMB_check_base_class_offset(lv, (S7319C6*)(S7319C5*), ABISELECT(96,52), "S7319C1");
    /*is_ambiguous_... S7319C1::S7319C5 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C5*), ABISELECT(144,76), "S7319C1");
    check_base_class_offset(lv, (S7319C5*)(S7319C3*), ABISELECT(96,52), "S7319C1");
    check_base_class_offset(lv, (S7319C3*)(S7319C2*), ABISELECT(32,16), "S7319C1");
    /*is_ambiguous_... S7319C2::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C2*), ABISELECT(192,100), "S7319C1");
    check_base_class_offset(lv, (S7319C2*), 0, "S7319C1");
    check_base_class_offset(lv, (S7319C8_nt*)(S7319C7*), ABISELECT(232,124), "S7319C1");
    check_base_class_offset(lv, (S7319C4*)(S7319C6*)(S7319C5*)(S7319C9*), ABISELECT(256,136), "S7319C1");
    check_base_class_offset(lv, (S7319C6*)(S7319C5*)(S7319C9*), ABISELECT(256,136), "S7319C1");
    /*is_ambiguous_... S7319C5::S7319C4 */ AMB_check_base_class_offset(lv, (S7319C4*)(S7319C5*)(S7319C9*), ABISELECT(304,160), "S7319C1");
    check_base_class_offset(lv, (S7319C5*)(S7319C9*), ABISELECT(256,136), "S7319C1");
    check_base_class_offset(lv, (S7319C12*)(S7319C11*), ABISELECT(352,188), "S7319C1");
    check_base_class_offset(lv, (S7319C11*)(S7319C10*), ABISELECT(344,184), "S7319C1");
    check_base_class_offset(lv, (S7319C10*)(S7319C9*), ABISELECT(344,184), "S7319C1");
    check_base_class_offset(lv, (S7319C9*)(S7319C7*), ABISELECT(256,136), "S7319C1");
    check_base_class_offset(lv, (S7319C7*), ABISELECT(232,124), "S7319C1");
    check_field_offset(lv, s7319c1f0, ABISELECT(24,12), "S7319C1.s7319c1f0");
    test_class_info(&lv, &cd_S7319C1);
    dp->~S7319C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7319C1(Test_S7319C1, "S7319C1", ABISELECT(384,200));

#else // __cplusplus

extern void _ZN7S7319C1C1Ev();
extern void _ZN7S7319C1D2Ev();
Name_Map name_map_S7319C1[] = {
  NSPAIR(_ZN7S7319C1C1Ev),
  NSPAIR(_ZN7S7319C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C6;
extern VTBL_ENTRY _ZTI7S7319C6[];
extern  VTBL_ENTRY _ZTV7S7319C6[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C5;
extern VTBL_ENTRY _ZTI7S7319C5[];
extern  VTBL_ENTRY _ZTV7S7319C5[];
extern Class_Descriptor cd_S7319C3;
extern VTBL_ENTRY _ZTI7S7319C3[];
extern  VTBL_ENTRY _ZTV7S7319C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C3[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C2;
extern VTBL_ENTRY _ZTI7S7319C2[];
extern  VTBL_ENTRY _ZTV7S7319C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C2[];
extern Class_Descriptor cd_S7319C8_nt;
extern VTBL_ENTRY _ZTI10S7319C8_nt[];
extern  VTBL_ENTRY _ZTV10S7319C8_nt[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C6;
extern VTBL_ENTRY _ZTI7S7319C6[];
extern  VTBL_ENTRY _ZTV7S7319C6[];
extern Class_Descriptor cd_S7319C4;
extern VTBL_ENTRY _ZTI7S7319C4[];
extern  VTBL_ENTRY _ZTV7S7319C4[];
extern Class_Descriptor cd_S7319C5;
extern VTBL_ENTRY _ZTI7S7319C5[];
extern  VTBL_ENTRY _ZTV7S7319C5[];
extern Class_Descriptor cd_S7319C12;
extern VTBL_ENTRY _ZTI8S7319C12[];
extern  VTBL_ENTRY _ZTV8S7319C12[];
extern Class_Descriptor cd_S7319C11;
extern VTBL_ENTRY _ZTI8S7319C11[];
extern  VTBL_ENTRY _ZTV8S7319C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C11[];
extern Class_Descriptor cd_S7319C10;
extern VTBL_ENTRY _ZTI8S7319C10[];
extern  VTBL_ENTRY _ZTV8S7319C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7319C10[];
extern Class_Descriptor cd_S7319C9;
extern VTBL_ENTRY _ZTI7S7319C9[];
extern  VTBL_ENTRY _ZTV7S7319C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C9[];
extern Class_Descriptor cd_S7319C7;
extern VTBL_ENTRY _ZTI7S7319C7[];
extern  VTBL_ENTRY _ZTV7S7319C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C7[];
static Base_Class bases_S7319C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7319C4,    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
    5, //immediately_derived
  0, 0},
  {&cd_S7319C4,    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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7319C6,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7319C4,    ABISELECT(144,76), //bcp->offset
    51, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7319C5,    ABISELECT(96,52), //bcp->offset
    33, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7319C3,    ABISELECT(32,16), //bcp->offset
    21, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7319C4,    ABISELECT(192,100), //bcp->offset
    55, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7319C2,    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
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7319C8_nt,    ABISELECT(232,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
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7319C4,    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
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7319C6,    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
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7319C4,    ABISELECT(304,160), //bcp->offset
    111, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7319C5,    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
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7319C12,    ABISELECT(352,188), //bcp->offset
    127, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7319C11,    ABISELECT(344,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7319C10,    ABISELECT(344,184), //bcp->offset
    115, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7319C9,    ABISELECT(256,136), //bcp->offset
    84, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7319C7,    ABISELECT(232,124), //bcp->offset
    61, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7319C1[];
extern void _ZN7S7319C1D1Ev();
extern void _ZN7S7319C1D0Ev();
extern void _ZN7S7319C23v13Ev();
extern void _ZN7S7319C23v14Ev();
extern void _ZN7S7319C23v15Ev();
extern void _ZN7S7319C23v16Ev();
extern void _ZN7S7319C23v17Ev();
extern void _ZN7S7319C23v18Ev();
extern void _ZN7S7319C12v1Ev();
extern void _ZN7S7319C12v2Ev();
extern void _ZN7S7319C12v3Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7319C1D1Ev,_ZTv0_n24_N7S7319C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7319C1D1Ev,_ZThn16_N7S7319C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7319C1D0Ev,_ZTv0_n24_N7S7319C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7319C1D0Ev,_ZThn16_N7S7319C1D0Ev)() __attribute__((weak));
extern void _ZN7S7319C33v12Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN10S7319C8_nt3v19Ev();
extern void _ZN10S7319C8_nt3v20Ev();
extern void _ZN10S7319C8_nt3v21Ev();
extern void _ZN10S7319C8_nt3v22Ev();
extern void _ZN10S7319C8_nt3v23Ev();
extern void _ZN10S7319C8_nt3v24Ev();
extern void ABISELECT(_ZTv0_n104_N7S7319C1D1Ev,_ZTv0_n52_N7S7319C1D1Ev)();
extern void ABISELECT(_ZThn232_N7S7319C1D1Ev,_ZThn124_N7S7319C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7319C1D0Ev,_ZTv0_n52_N7S7319C1D0Ev)();
extern void ABISELECT(_ZThn232_N7S7319C1D0Ev,_ZThn124_N7S7319C1D0Ev)() __attribute__((weak));
extern void _ZN7S7319C73v33Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C93v30Ev();
extern void _ZN7S7319C93v31Ev();
extern void _ZN7S7319C93v32Ev();
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY vtc_S7319C1[] = {
  ABISELECT(352,188),
  ABISELECT(344,184),
  ABISELECT(344,184),
  ABISELECT(256,136),
  ABISELECT(232,124),
  ABISELECT(192,100),
  ABISELECT(96,52),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN7S7319C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7319C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7319C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7319C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7319C12v3Ev,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  ABISELECT(64,36),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7319C1D1Ev,_ZTv0_n24_N7S7319C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7319C1D0Ev,_ZTv0_n24_N7S7319C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7319C33v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  0,
  0,
  ABISELECT(-192,-100),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  0,
  ABISELECT(-232,-124),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,64),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(24,12),
  ABISELECT(-232,-124),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7319C1D1Ev,_ZTv0_n52_N7S7319C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7319C1D0Ev,_ZTv0_n52_N7S7319C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7319C73v33Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v32Ev,
  ABISELECT(-304,-160),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-344,-184),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
  0,
  ABISELECT(-352,-188),
  (VTBL_ENTRY)&(_ZTI7S7319C1[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern VTBL_ENTRY _ZTV7S7319C1[];
extern void _ZN7S7319C2D1Ev();
extern void _ZN7S7319C2D0Ev();
extern void _ZN7S7319C23v13Ev();
extern void _ZN7S7319C23v14Ev();
extern void _ZN7S7319C23v15Ev();
extern void _ZN7S7319C23v16Ev();
extern void _ZN7S7319C23v17Ev();
extern void _ZN7S7319C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C2__7S7319C1[] = {
  ABISELECT(192,100),
  ABISELECT(96,52),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7319C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7319C23v18Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void ABISELECT(_ZTv0_n48_N7S7319C2D1Ev,_ZTv0_n24_N7S7319C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7319C2D1Ev,_ZThn16_N7S7319C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7319C2D0Ev,_ZTv0_n24_N7S7319C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7319C2D0Ev,_ZThn16_N7S7319C2D0Ev)() __attribute__((weak));
extern void _ZN7S7319C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C3__7S7319C2__7S7319C1[] = {
  0,
  ABISELECT(-32,-16),
  0,
  0,
  ABISELECT(64,36),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7319C2D1Ev,_ZTv0_n24_N7S7319C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7319C2D0Ev,_ZTv0_n24_N7S7319C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7319C33v12Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C5__7S7319C2__7S7319C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C47S7319C5__A2__7S7319C2__7S7319C1[] = {
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C4__A3__7S7319C2__7S7319C1[] = {
  0,
  0,
  ABISELECT(-192,-100),
  (VTBL_ENTRY)&(_ZTI7S7319C2[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C3D1Ev();
extern void _ZN7S7319C3D0Ev();
extern void _ZN7S7319C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C3__7S7319C1[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7319C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7319C33v12Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C5__7S7319C3__7S7319C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C47S7319C5__A2__7S7319C3__7S7319C1[] = {
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7319C3[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
extern void _ZN10S7319C8_nt3v19Ev();
extern void _ZN10S7319C8_nt3v20Ev();
extern void _ZN10S7319C8_nt3v21Ev();
extern void _ZN10S7319C8_nt3v22Ev();
extern void _ZN10S7319C8_nt3v23Ev();
extern void _ZN10S7319C8_nt3v24Ev();
extern void _ZN7S7319C7D1Ev();
extern void _ZN7S7319C7D0Ev();
extern void _ZN7S7319C73v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C7__7S7319C1[] = {
  ABISELECT(120,64),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S7319C8_nt3v24Ev,
  (VTBL_ENTRY)&_ZN7S7319C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7319C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7319C73v33Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C93v30Ev();
extern void _ZN7S7319C93v31Ev();
extern void _ZN7S7319C93v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C9__7S7319C7__7S7319C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v32Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C47S7319C57S7319C9__A1__7S7319C7__7S7319C1[] = {
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
};
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C10__7S7319C7__7S7319C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__7S7319C7__7S7319C1[] = {
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S7319C7[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern void _ZN7S7319C42v4Ev();
extern void _ZN7S7319C42v5Ev();
extern void _ZN7S7319C62v6Ev();
extern void _ZN7S7319C62v7Ev();
extern void _ZN7S7319C52v8Ev();
extern void _ZN7S7319C52v9Ev();
extern void _ZN7S7319C53v10Ev();
extern void _ZN7S7319C53v11Ev();
extern void _ZN7S7319C93v30Ev();
extern void _ZN7S7319C93v31Ev();
extern void _ZN7S7319C93v32Ev();
static  VTBL_ENTRY _tg__ZTV7S7319C9__7S7319C1[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN7S7319C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7319C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v6Ev,
  (VTBL_ENTRY)&_ZN7S7319C62v7Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7319C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v10Ev,
  (VTBL_ENTRY)&_ZN7S7319C53v11Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v30Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v31Ev,
  (VTBL_ENTRY)&_ZN7S7319C93v32Ev,
};
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C10__7S7319C9__7S7319C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__7S7319C9__7S7319C1[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7319C9[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern void _ZN8S7319C113v26Ev();
extern void _ZN8S7319C103v27Ev();
extern void _ZN8S7319C103v28Ev();
extern void _ZN8S7319C103v29Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C10__7S7319C1[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C10[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v27Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v28Ev,
  (VTBL_ENTRY)&_ZN8S7319C103v29Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__8S7319C10__7S7319C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C10[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
extern void _ZN8S7319C113v26Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C11__7S7319C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C113v26Ev,
};
extern void _ZN8S7319C123v25Ev();
static  VTBL_ENTRY _tg__ZTV8S7319C12__8S7319C11__7S7319C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7319C11[0]),
  (VTBL_ENTRY)&_ZN8S7319C123v25Ev,
};
static  VTT_ENTRY vtt_S7319C1[] = {
  {&(_ZTV7S7319C1[10]),  10,131},
  {&(_tg__ZTV7S7319C2__7S7319C1[5]),  5,13},
  {&(_tg__ZTV7S7319C3__7S7319C2__7S7319C1[7]),  7,12},
  {&(_tg__ZTV7S7319C5__7S7319C2__7S7319C1[10]),  10,18},
  {&(_tg__ZTV7S7319C47S7319C5__A2__7S7319C2__7S7319C1[2]),  2,4},
  {&(_tg__ZTV7S7319C4__A3__7S7319C2__7S7319C1[4]),  4,6},
  {&(_ZTV7S7319C1[28]),  28,131},
  {&(_ZTV7S7319C1[43]),  43,131},
  {&(_ZTV7S7319C1[53]),  53,131},
  {&(_ZTV7S7319C1[59]),  59,131},
  {&(_ZTV7S7319C1[75]),  75,131},
  {&(_ZTV7S7319C1[100]),  100,131},
  {&(_ZTV7S7319C1[113]),  113,131},
  {&(_ZTV7S7319C1[123]),  123,131},
  {&(_ZTV7S7319C1[123]),  123,131},
  {&(_ZTV7S7319C1[130]),  130,131},
  {&(_tg__ZTV7S7319C3__7S7319C1[3]),  3,8},
  {&(_tg__ZTV7S7319C5__7S7319C3__7S7319C1[10]),  10,18},
  {&(_tg__ZTV7S7319C47S7319C5__A2__7S7319C3__7S7319C1[2]),  2,4},
  {&(_tg__ZTV7S7319C7__7S7319C1[6]),  6,15},
  {&(_tg__ZTV7S7319C9__7S7319C7__7S7319C1[16]),  16,27},
  {&(_tg__ZTV7S7319C47S7319C57S7319C9__A1__7S7319C7__7S7319C1[2]),  2,4},
  {&(_tg__ZTV8S7319C10__7S7319C7__7S7319C1[8]),  8,12},
  {&(_tg__ZTV8S7319C10__7S7319C7__7S7319C1[8]),  8,12},
  {&(_tg__ZTV8S7319C12__7S7319C7__7S7319C1[3]),  3,4},
  {&(_tg__ZTV7S7319C9__7S7319C1[5]),  5,16},
  {&(_tg__ZTV8S7319C10__7S7319C9__7S7319C1[8]),  8,12},
  {&(_tg__ZTV8S7319C10__7S7319C9__7S7319C1[8]),  8,12},
  {&(_tg__ZTV8S7319C12__7S7319C9__7S7319C1[3]),  3,4},
  {&(_tg__ZTV8S7319C10__7S7319C1[5]),  5,9},
  {&(_tg__ZTV8S7319C10__7S7319C1[5]),  5,9},
  {&(_tg__ZTV8S7319C12__8S7319C10__7S7319C1[3]),  3,4},
  {&(_tg__ZTV8S7319C11__7S7319C1[3]),  3,4},
  {&(_tg__ZTV8S7319C12__8S7319C11__7S7319C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7319C1[];
extern  VTBL_ENTRY _ZTV7S7319C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7319C1[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7319C2D0Ev,_ZTv0_n24_N7S7319C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7319C2D0Ev,_ZThn16_N7S7319C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7319C2D1Ev,_ZTv0_n24_N7S7319C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7319C2D1Ev,_ZThn16_N7S7319C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7319C1D0Ev,_ZTv0_n52_N7S7319C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7319C1D0Ev,_ZThn124_N7S7319C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7319C1D1Ev,_ZTv0_n52_N7S7319C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N7S7319C1D1Ev,_ZThn124_N7S7319C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7319C1D0Ev,_ZTv0_n24_N7S7319C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7319C1D0Ev,_ZThn16_N7S7319C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7319C1D1Ev,_ZTv0_n24_N7S7319C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7319C1D1Ev,_ZThn16_N7S7319C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7319C1 = {  "S7319C1", // class name
  bases_S7319C1, 18,
  &(vtc_S7319C1[0]), // expected_vtbl_contents
  &(vtt_S7319C1[0]), // expected_vtt_contents
  ABISELECT(384,200), // object size
  NSPAIRA(_ZTI7S7319C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7319C1),131, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7319C1),34, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4477C3  {
  int s4477c3f0[4];
  ::S4474C4_nt s4477c3f1;
  int s4477c3f2;
  char s4477c3f3;
  ::S4474C5_nt s4477c3f4;
  int s4477c3f5;
  virtual  ~S4477C3(); // _ZN7S4477C3D1Ev
  virtual void  v2(); // _ZN7S4477C32v2Ev
  virtual void  v3(); // _ZN7S4477C32v3Ev
  virtual void  v4(); // _ZN7S4477C32v4Ev
  S4477C3(); // tgen
};
//SIG(-1 S4477C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4477C3 ::~S4477C3(){ note_dtor("S4477C3", this);}
void  S4477C3 ::v2(){vfunc_called(this, "_ZN7S4477C32v2Ev");}
void  S4477C3 ::v3(){vfunc_called(this, "_ZN7S4477C32v3Ev");}
void  S4477C3 ::v4(){vfunc_called(this, "_ZN7S4477C32v4Ev");}
S4477C3 ::S4477C3(){ note_ctor("S4477C3", this);} // tgen

static void Test_S4477C3()
{
  extern Class_Descriptor cd_S4477C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4477C3, buf);
    S4477C3 *dp, &lv = *(dp=new (buf) S4477C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4477C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4477C3)");
    check_field_offset(lv, s4477c3f0, ABISELECT(8,4), "S4477C3.s4477c3f0");
    check_field_offset(lv, s4477c3f1, ABISELECT(24,20), "S4477C3.s4477c3f1");
    check_field_offset(lv, s4477c3f2, ABISELECT(40,28), "S4477C3.s4477c3f2");
    check_field_offset(lv, s4477c3f3, ABISELECT(44,32), "S4477C3.s4477c3f3");
    check_field_offset(lv, s4477c3f4, ABISELECT(48,36), "S4477C3.s4477c3f4");
    check_field_offset(lv, s4477c3f5, ABISELECT(64,48), "S4477C3.s4477c3f5");
    test_class_info(&lv, &cd_S4477C3);
    dp->~S4477C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4477C3(Test_S4477C3, "S4477C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4477C3C1Ev();
extern void _ZN7S4477C3D1Ev();
Name_Map name_map_S4477C3[] = {
  NSPAIR(_ZN7S4477C3C1Ev),
  NSPAIR(_ZN7S4477C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4477C3[];
extern void _ZN7S4477C3D1Ev();
extern void _ZN7S4477C3D0Ev();
extern void _ZN7S4477C32v2Ev();
extern void _ZN7S4477C32v3Ev();
extern void _ZN7S4477C32v4Ev();
static  VTBL_ENTRY vtc_S4477C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4477C3[0]),
  (VTBL_ENTRY)&_ZN7S4477C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4477C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4477C3[];
extern  VTBL_ENTRY _ZTV7S4477C3[];
Class_Descriptor cd_S4477C3 = {  "S4477C3", // class name
  0,0,//no base classes
  &(vtc_S4477C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4477C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4477C3),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  S4477C6  {
  virtual  ~S4477C6(); // _ZN7S4477C6D1Ev
  virtual void  v5(); // _ZN7S4477C62v5Ev
  S4477C6(); // tgen
};
//SIG(-1 S4477C6) C1{ vd v1}


 S4477C6 ::~S4477C6(){ note_dtor("S4477C6", this);}
void  S4477C6 ::v5(){vfunc_called(this, "_ZN7S4477C62v5Ev");}
S4477C6 ::S4477C6(){ note_ctor("S4477C6", this);} // tgen

static void Test_S4477C6()
{
  extern Class_Descriptor cd_S4477C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4477C6, buf);
    S4477C6 *dp, &lv = *(dp=new (buf) S4477C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4477C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4477C6)");
    test_class_info(&lv, &cd_S4477C6);
    dp->~S4477C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4477C6(Test_S4477C6, "S4477C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4477C6C1Ev();
extern void _ZN7S4477C6D1Ev();
Name_Map name_map_S4477C6[] = {
  NSPAIR(_ZN7S4477C6C1Ev),
  NSPAIR(_ZN7S4477C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4477C6[];
extern void _ZN7S4477C6D1Ev();
extern void _ZN7S4477C6D0Ev();
extern void _ZN7S4477C62v5Ev();
static  VTBL_ENTRY vtc_S4477C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4477C6[0]),
  (VTBL_ENTRY)&_ZN7S4477C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4477C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4477C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4477C6[];
extern  VTBL_ENTRY _ZTV7S4477C6[];
Class_Descriptor cd_S4477C6 = {  "S4477C6", // class name
  0,0,//no base classes
  &(vtc_S4477C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4477C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4477C6),5, //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  S4477C2  : S4477C3 , S4477C6 {
  void *s4477c2f0;
  int s4477c2f1;
  void *s4477c2f2;
  virtual  ~S4477C2(); // _ZN7S4477C2D1Ev
  virtual void  v6(); // _ZN7S4477C22v6Ev
  virtual void  v7(); // _ZN7S4477C22v7Ev
  S4477C2(); // tgen
};
//SIG(-1 S4477C2) C1{ BC2{ vd v3 v4 v5 Fi[4] FC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} BC5{ vd v6} vd v1 v2 Fp Fi Fp}


 S4477C2 ::~S4477C2(){ note_dtor("S4477C2", this);}
void  S4477C2 ::v6(){vfunc_called(this, "_ZN7S4477C22v6Ev");}
void  S4477C2 ::v7(){vfunc_called(this, "_ZN7S4477C22v7Ev");}
S4477C2 ::S4477C2(){ note_ctor("S4477C2", this);} // tgen

static void Test_S4477C2()
{
  extern Class_Descriptor cd_S4477C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4477C2, buf);
    S4477C2 *dp, &lv = *(dp=new (buf) S4477C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4477C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4477C2)");
    check_base_class_offset(lv, (S4477C3*), 0, "S4477C2");
    check_base_class_offset(lv, (S4477C6*), ABISELECT(72,52), "S4477C2");
    check_field_offset(lv, s4477c2f0, ABISELECT(80,56), "S4477C2.s4477c2f0");
    check_field_offset(lv, s4477c2f1, ABISELECT(88,60), "S4477C2.s4477c2f1");
    check_field_offset(lv, s4477c2f2, ABISELECT(96,64), "S4477C2.s4477c2f2");
    test_class_info(&lv, &cd_S4477C2);
    dp->~S4477C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4477C2(Test_S4477C2, "S4477C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4477C2C1Ev();
extern void _ZN7S4477C2D1Ev();
Name_Map name_map_S4477C2[] = {
  NSPAIR(_ZN7S4477C2C1Ev),
  NSPAIR(_ZN7S4477C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4477C3;
extern VTBL_ENTRY _ZTI7S4477C3[];
extern  VTBL_ENTRY _ZTV7S4477C3[];
extern Class_Descriptor cd_S4477C6;
extern VTBL_ENTRY _ZTI7S4477C6[];
extern  VTBL_ENTRY _ZTV7S4477C6[];
static Base_Class bases_S4477C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4477C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4477C6,    ABISELECT(72,52), //bcp->offset
    9, //bcp->virtual_function_table_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 _ZTI7S4477C2[];
extern void _ZN7S4477C2D1Ev();
extern void _ZN7S4477C2D0Ev();
extern void _ZN7S4477C32v2Ev();
extern void _ZN7S4477C32v3Ev();
extern void _ZN7S4477C32v4Ev();
extern void _ZN7S4477C22v6Ev();
extern void _ZN7S4477C22v7Ev();
extern void ABISELECT(_ZThn72_N7S4477C2D1Ev,_ZThn52_N7S4477C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S4477C2D0Ev,_ZThn52_N7S4477C2D0Ev)();
extern void _ZN7S4477C62v5Ev();
static  VTBL_ENTRY vtc_S4477C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4477C2[0]),
  (VTBL_ENTRY)&_ZN7S4477C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4477C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4477C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4477C22v7Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4477C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4477C2D1Ev,_ZThn52_N7S4477C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4477C2D0Ev,_ZThn52_N7S4477C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4477C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4477C2[];
extern  VTBL_ENTRY _ZTV7S4477C2[];
Class_Descriptor cd_S4477C2 = {  "S4477C2", // class name
  bases_S4477C2, 2,
  &(vtc_S4477C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4477C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4477C2),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  S4477C7_nt  {
  ::S2366C5_nt s4477c7f0;
  int s4477c7f1;
  ::S4474C10_nt s4477c7f2;
  void  mf4477c7(); // _ZN10S4477C7_nt8mf4477c7Ev
  virtual  ~S4477C7_nt(); // _ZN10S4477C7_ntD1Ev
  S4477C7_nt(); // tgen
};
//SIG(-1 S4477C7_nt) C1{ vd m FC2{ m Fp Fi FC3{ m}} Fi FC4{ BC5{ vd m Fc} vd FL[2]}}


void  S4477C7_nt ::mf4477c7(){}
 S4477C7_nt ::~S4477C7_nt(){ note_dtor("S4477C7_nt", this);}
S4477C7_nt ::S4477C7_nt(){ note_ctor("S4477C7_nt", this);} // tgen

//skip512 S4477C7_nt

#else // __cplusplus

extern void _ZN10S4477C7_ntC1Ev();
extern void _ZN10S4477C7_ntD1Ev();
Name_Map name_map_S4477C7_nt[] = {
  NSPAIR(_ZN10S4477C7_ntC1Ev),
  NSPAIR(_ZN10S4477C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4477C7_nt[];
extern void _ZN10S4477C7_ntD1Ev();
extern void _ZN10S4477C7_ntD0Ev();
static  VTBL_ENTRY vtc_S4477C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4477C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S4477C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4477C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4477C7_nt[];
VTBL_ENTRY *P__ZTI10S4477C7_nt = _ZTI10S4477C7_nt; 
extern  VTBL_ENTRY _ZTV10S4477C7_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4477C14_nt  {
  void *s4477c14f0;
  int s4477c14f1;
  ::S4474C14_nt s4477c14f2;
  void *s4477c14f3[2];
  char s4477c14f4;
  ::S4474C14_nt s4477c14f5;
  void  mf4477c14(); // _ZN11S4477C14_nt9mf4477c14Ev
};
//SIG(-1 S4477C14_nt) C1{ m Fp Fi FC2{ m FC3{ vd m FL Fc} FC3} Fp[2] Fc FC2}


void  S4477C14_nt ::mf4477c14(){}

//skip512 S4477C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4477C1  : S4477C2 {
  ::S4477C7_nt s4477c1f0;
  void *s4477c1f1;
  ::S4474C14_nt s4477c1f2;
  ::S4477C14_nt s4477c1f3;
  void *s4477c1f4;
  virtual  ~S4477C1(); // _ZN7S4477C1D1Ev
  virtual void  v1(); // _ZN7S4477C12v1Ev
  S4477C1(); // tgen
};
//SIG(1 S4477C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} BC6{ vd v5} vd v6 v7 Fp Fi Fp} vd v1 FC7{ vd m FC8{ m Fp Fi FC9{ m}} Fi FC10{ BC11{ vd m Fc} vd FL[2]}} Fp FC12{ m FC13{ vd m FL Fc} FC13} FC14{ m Fp Fi FC12 Fp[2] Fc FC12} Fp}


 S4477C1 ::~S4477C1(){ note_dtor("S4477C1", this);}
void  S4477C1 ::v1(){vfunc_called(this, "_ZN7S4477C12v1Ev");}
S4477C1 ::S4477C1(){ note_ctor("S4477C1", this);} // tgen

static void Test_S4477C1()
{
  extern Class_Descriptor cd_S4477C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,60)];
    init_test(&cd_S4477C1, buf);
    S4477C1 *dp, &lv = *(dp=new (buf) S4477C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,236), "sizeof(S4477C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4477C1)");
    check_base_class_offset(lv, (S4477C3*)(S4477C2*), 0, "S4477C1");
    check_base_class_offset(lv, (S4477C6*)(S4477C2*), ABISELECT(72,52), "S4477C1");
    check_base_class_offset(lv, (S4477C2*), 0, "S4477C1");
    check_field_offset(lv, s4477c1f0, ABISELECT(104,68), "S4477C1.s4477c1f0");
    check_field_offset(lv, s4477c1f1, ABISELECT(168,112), "S4477C1.s4477c1f1");
    check_field_offset(lv, s4477c1f2, ABISELECT(176,116), "S4477C1.s4477c1f2");
    check_field_offset(lv, s4477c1f3, ABISELECT(224,148), "S4477C1.s4477c1f3");
    check_field_offset(lv, s4477c1f4, ABISELECT(360,232), "S4477C1.s4477c1f4");
    test_class_info(&lv, &cd_S4477C1);
    dp->~S4477C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4477C1(Test_S4477C1, "S4477C1", ABISELECT(368,236));

#else // __cplusplus

extern void _ZN7S4477C1C1Ev();
extern void _ZN7S4477C1D1Ev();
Name_Map name_map_S4477C1[] = {
  NSPAIR(_ZN7S4477C1C1Ev),
  NSPAIR(_ZN7S4477C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4477C3;
extern VTBL_ENTRY _ZTI7S4477C3[];
extern  VTBL_ENTRY _ZTV7S4477C3[];
extern Class_Descriptor cd_S4477C6;
extern VTBL_ENTRY _ZTI7S4477C6[];
extern  VTBL_ENTRY _ZTV7S4477C6[];
extern Class_Descriptor cd_S4477C2;
extern VTBL_ENTRY _ZTI7S4477C2[];
extern  VTBL_ENTRY _ZTV7S4477C2[];
static Base_Class bases_S4477C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4477C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4477C6,    ABISELECT(72,52), //bcp->offset
    10, //bcp->virtual_function_table_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_S4477C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4477C1[];
extern void _ZN7S4477C1D1Ev();
extern void _ZN7S4477C1D0Ev();
extern void _ZN7S4477C32v2Ev();
extern void _ZN7S4477C32v3Ev();
extern void _ZN7S4477C32v4Ev();
extern void _ZN7S4477C22v6Ev();
extern void _ZN7S4477C22v7Ev();
extern void _ZN7S4477C12v1Ev();
extern void ABISELECT(_ZThn72_N7S4477C1D1Ev,_ZThn52_N7S4477C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4477C1D0Ev,_ZThn52_N7S4477C1D0Ev)();
extern void _ZN7S4477C62v5Ev();
static  VTBL_ENTRY vtc_S4477C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4477C1[0]),
  (VTBL_ENTRY)&_ZN7S4477C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4477C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4477C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4477C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4477C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4477C12v1Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4477C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4477C1D1Ev,_ZThn52_N7S4477C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4477C1D0Ev,_ZThn52_N7S4477C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4477C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4477C1[];
extern  VTBL_ENTRY _ZTV7S4477C1[];
Class_Descriptor cd_S4477C1 = {  "S4477C1", // class name
  bases_S4477C1, 3,
  &(vtc_S4477C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,236), // object size
  NSPAIRA(_ZTI7S4477C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4477C1),15, //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  S4466C3  {
  int s4466c3f0[4];
  ::S4474C4_nt s4466c3f1;
  int s4466c3f2;
  char s4466c3f3;
  ::S4474C5_nt s4466c3f4;
  int s4466c3f5;
  virtual  ~S4466C3(); // _ZN7S4466C3D1Ev
  virtual void  v2(); // _ZN7S4466C32v2Ev
  virtual void  v3(); // _ZN7S4466C32v3Ev
  virtual void  v4(); // _ZN7S4466C32v4Ev
  S4466C3(); // tgen
};
//SIG(-1 S4466C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4466C3 ::~S4466C3(){ note_dtor("S4466C3", this);}
void  S4466C3 ::v2(){vfunc_called(this, "_ZN7S4466C32v2Ev");}
void  S4466C3 ::v3(){vfunc_called(this, "_ZN7S4466C32v3Ev");}
void  S4466C3 ::v4(){vfunc_called(this, "_ZN7S4466C32v4Ev");}
S4466C3 ::S4466C3(){ note_ctor("S4466C3", this);} // tgen

static void Test_S4466C3()
{
  extern Class_Descriptor cd_S4466C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4466C3, buf);
    S4466C3 *dp, &lv = *(dp=new (buf) S4466C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4466C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4466C3)");
    check_field_offset(lv, s4466c3f0, ABISELECT(8,4), "S4466C3.s4466c3f0");
    check_field_offset(lv, s4466c3f1, ABISELECT(24,20), "S4466C3.s4466c3f1");
    check_field_offset(lv, s4466c3f2, ABISELECT(40,28), "S4466C3.s4466c3f2");
    check_field_offset(lv, s4466c3f3, ABISELECT(44,32), "S4466C3.s4466c3f3");
    check_field_offset(lv, s4466c3f4, ABISELECT(48,36), "S4466C3.s4466c3f4");
    check_field_offset(lv, s4466c3f5, ABISELECT(64,48), "S4466C3.s4466c3f5");
    test_class_info(&lv, &cd_S4466C3);
    dp->~S4466C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4466C3(Test_S4466C3, "S4466C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4466C3C1Ev();
extern void _ZN7S4466C3D1Ev();
Name_Map name_map_S4466C3[] = {
  NSPAIR(_ZN7S4466C3C1Ev),
  NSPAIR(_ZN7S4466C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4466C3[];
extern void _ZN7S4466C3D1Ev();
extern void _ZN7S4466C3D0Ev();
extern void _ZN7S4466C32v2Ev();
extern void _ZN7S4466C32v3Ev();
extern void _ZN7S4466C32v4Ev();
static  VTBL_ENTRY vtc_S4466C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4466C3[0]),
  (VTBL_ENTRY)&_ZN7S4466C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4466C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4466C3[];
extern  VTBL_ENTRY _ZTV7S4466C3[];
Class_Descriptor cd_S4466C3 = {  "S4466C3", // class name
  0,0,//no base classes
  &(vtc_S4466C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4466C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4466C3),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  S4466C2  : S4466C3 {
  virtual  ~S4466C2(); // _ZN7S4466C2D1Ev
  virtual void  v5(); // _ZN7S4466C22v5Ev
  S4466C2(); // tgen
};
//SIG(-1 S4466C2) C1{ BC2{ vd v2 v3 v4 Fi[4] FC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} vd v1}


 S4466C2 ::~S4466C2(){ note_dtor("S4466C2", this);}
void  S4466C2 ::v5(){vfunc_called(this, "_ZN7S4466C22v5Ev");}
S4466C2 ::S4466C2(){ note_ctor("S4466C2", this);} // tgen

static void Test_S4466C2()
{
  extern Class_Descriptor cd_S4466C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4466C2, buf);
    S4466C2 *dp, &lv = *(dp=new (buf) S4466C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4466C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4466C2)");
    check_base_class_offset(lv, (S4466C3*), 0, "S4466C2");
    test_class_info(&lv, &cd_S4466C2);
    dp->~S4466C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4466C2(Test_S4466C2, "S4466C2", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4466C2C1Ev();
extern void _ZN7S4466C2D1Ev();
Name_Map name_map_S4466C2[] = {
  NSPAIR(_ZN7S4466C2C1Ev),
  NSPAIR(_ZN7S4466C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4466C3;
extern VTBL_ENTRY _ZTI7S4466C3[];
extern  VTBL_ENTRY _ZTV7S4466C3[];
static Base_Class bases_S4466C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4466C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4466C2[];
extern void _ZN7S4466C2D1Ev();
extern void _ZN7S4466C2D0Ev();
extern void _ZN7S4466C32v2Ev();
extern void _ZN7S4466C32v3Ev();
extern void _ZN7S4466C32v4Ev();
extern void _ZN7S4466C22v5Ev();
static  VTBL_ENTRY vtc_S4466C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4466C2[0]),
  (VTBL_ENTRY)&_ZN7S4466C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4466C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4466C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4466C2[];
extern  VTBL_ENTRY _ZTV7S4466C2[];
Class_Descriptor cd_S4466C2 = {  "S4466C2", // class name
  bases_S4466C2, 1,
  &(vtc_S4466C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4466C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4466C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4466C11  {
  ::S2366C5_nt s4466c11f0;
  ::S2366C5_nt s4466c11f1;
  ::S4474C14_nt s4466c11f2;
  int s4466c11f3;
  void  mf4466c11(); // _ZN8S4466C119mf4466c11Ev
};
//SIG(-1 S4466C11) C1{ m FC2{ m Fp Fi FC3{ m}} FC2 FC4{ m FC5{ vd m FL Fc} FC5} Fi}


void  S4466C11 ::mf4466c11(){}

static void Test_S4466C11()
{
  {
    init_simple_test("S4466C11");
    S4466C11 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S4466C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4466C11)");
    check_field_offset(lv, s4466c11f0, 0, "S4466C11.s4466c11f0");
    check_field_offset(lv, s4466c11f1, ABISELECT(16,12), "S4466C11.s4466c11f1");
    check_field_offset(lv, s4466c11f2, ABISELECT(32,24), "S4466C11.s4466c11f2");
    check_field_offset(lv, s4466c11f3, ABISELECT(80,56), "S4466C11.s4466c11f3");
  }
}
static Arrange_To_Call_Me vS4466C11(Test_S4466C11, "S4466C11", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4466C1  : S4466C2 {
  ::S4474C7_nt s4466c1f0;
  void *s4466c1f1;
  ::S4466C11 s4466c1f2;
  ::S4465C17 s4466c1f3;
  virtual  ~S4466C1(); // _ZN7S4466C1D1Ev
  virtual void  v1(); // _ZN7S4466C12v1Ev
  S4466C1(); // tgen
};
//SIG(1 S4466C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} vd v5} vd v1 FC6{ vd m FC7{ m Fp Fi FC8{ m}} FC9{ BC10{ vd m Fc} vd FL[2]} Fi[2]} Fp FC11{ m FC7 FC7 FC12{ m FC13{ vd m FL Fc} FC13} Fi} FC14{ m FC15{ m Fp Fi FC8 FC16{ m}} Fi}}


 S4466C1 ::~S4466C1(){ note_dtor("S4466C1", this);}
void  S4466C1 ::v1(){vfunc_called(this, "_ZN7S4466C12v1Ev");}
S4466C1 ::S4466C1(){ note_ctor("S4466C1", this);} // tgen

static void Test_S4466C1()
{
  extern Class_Descriptor cd_S4466C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,46)];
    init_test(&cd_S4466C1, buf);
    S4466C1 *dp, &lv = *(dp=new (buf) S4466C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,180), "sizeof(S4466C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4466C1)");
    check_base_class_offset(lv, (S4466C3*)(S4466C2*), 0, "S4466C1");
    check_base_class_offset(lv, (S4466C2*), 0, "S4466C1");
    check_field_offset(lv, s4466c1f0, ABISELECT(72,52), "S4466C1.s4466c1f0");
    check_field_offset(lv, s4466c1f1, ABISELECT(136,100), "S4466C1.s4466c1f1");
    check_field_offset(lv, s4466c1f2, ABISELECT(144,104), "S4466C1.s4466c1f2");
    check_field_offset(lv, s4466c1f3, ABISELECT(232,164), "S4466C1.s4466c1f3");
    test_class_info(&lv, &cd_S4466C1);
    dp->~S4466C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4466C1(Test_S4466C1, "S4466C1", ABISELECT(256,180));

#else // __cplusplus

extern void _ZN7S4466C1C1Ev();
extern void _ZN7S4466C1D1Ev();
Name_Map name_map_S4466C1[] = {
  NSPAIR(_ZN7S4466C1C1Ev),
  NSPAIR(_ZN7S4466C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4466C3;
extern VTBL_ENTRY _ZTI7S4466C3[];
extern  VTBL_ENTRY _ZTV7S4466C3[];
extern Class_Descriptor cd_S4466C2;
extern VTBL_ENTRY _ZTI7S4466C2[];
extern  VTBL_ENTRY _ZTV7S4466C2[];
static Base_Class bases_S4466C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4466C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4466C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4466C1[];
extern void _ZN7S4466C1D1Ev();
extern void _ZN7S4466C1D0Ev();
extern void _ZN7S4466C32v2Ev();
extern void _ZN7S4466C32v3Ev();
extern void _ZN7S4466C32v4Ev();
extern void _ZN7S4466C22v5Ev();
extern void _ZN7S4466C12v1Ev();
static  VTBL_ENTRY vtc_S4466C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4466C1[0]),
  (VTBL_ENTRY)&_ZN7S4466C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4466C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4466C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4466C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4466C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4466C1[];
extern  VTBL_ENTRY _ZTV7S4466C1[];
Class_Descriptor cd_S4466C1 = {  "S4466C1", // class name
  bases_S4466C1, 2,
  &(vtc_S4466C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,180), // object size
  NSPAIRA(_ZTI7S4466C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4466C1),9, //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  S4467C3  {
  int s4467c3f0[4];
  ::S4474C4_nt s4467c3f1;
  int s4467c3f2;
  char s4467c3f3;
  ::S4474C5_nt s4467c3f4;
  int s4467c3f5;
  virtual  ~S4467C3(); // _ZN7S4467C3D1Ev
  virtual void  v2(); // _ZN7S4467C32v2Ev
  virtual void  v3(); // _ZN7S4467C32v3Ev
  virtual void  v4(); // _ZN7S4467C32v4Ev
  S4467C3(); // tgen
};
//SIG(-1 S4467C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4467C3 ::~S4467C3(){ note_dtor("S4467C3", this);}
void  S4467C3 ::v2(){vfunc_called(this, "_ZN7S4467C32v2Ev");}
void  S4467C3 ::v3(){vfunc_called(this, "_ZN7S4467C32v3Ev");}
void  S4467C3 ::v4(){vfunc_called(this, "_ZN7S4467C32v4Ev");}
S4467C3 ::S4467C3(){ note_ctor("S4467C3", this);} // tgen

static void Test_S4467C3()
{
  extern Class_Descriptor cd_S4467C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4467C3, buf);
    S4467C3 *dp, &lv = *(dp=new (buf) S4467C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4467C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4467C3)");
    check_field_offset(lv, s4467c3f0, ABISELECT(8,4), "S4467C3.s4467c3f0");
    check_field_offset(lv, s4467c3f1, ABISELECT(24,20), "S4467C3.s4467c3f1");
    check_field_offset(lv, s4467c3f2, ABISELECT(40,28), "S4467C3.s4467c3f2");
    check_field_offset(lv, s4467c3f3, ABISELECT(44,32), "S4467C3.s4467c3f3");
    check_field_offset(lv, s4467c3f4, ABISELECT(48,36), "S4467C3.s4467c3f4");
    check_field_offset(lv, s4467c3f5, ABISELECT(64,48), "S4467C3.s4467c3f5");
    test_class_info(&lv, &cd_S4467C3);
    dp->~S4467C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4467C3(Test_S4467C3, "S4467C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4467C3C1Ev();
extern void _ZN7S4467C3D1Ev();
Name_Map name_map_S4467C3[] = {
  NSPAIR(_ZN7S4467C3C1Ev),
  NSPAIR(_ZN7S4467C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4467C3[];
extern void _ZN7S4467C3D1Ev();
extern void _ZN7S4467C3D0Ev();
extern void _ZN7S4467C32v2Ev();
extern void _ZN7S4467C32v3Ev();
extern void _ZN7S4467C32v4Ev();
static  VTBL_ENTRY vtc_S4467C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4467C3[0]),
  (VTBL_ENTRY)&_ZN7S4467C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4467C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4467C3[];
extern  VTBL_ENTRY _ZTV7S4467C3[];
Class_Descriptor cd_S4467C3 = {  "S4467C3", // class name
  0,0,//no base classes
  &(vtc_S4467C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4467C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4467C3),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  S4467C2  : S4467C3 {
  virtual  ~S4467C2(); // _ZN7S4467C2D1Ev
  virtual void  v5(); // _ZN7S4467C22v5Ev
  S4467C2(); // tgen
};
//SIG(-1 S4467C2) C1{ BC2{ vd v2 v3 v4 Fi[4] FC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} vd v1}


 S4467C2 ::~S4467C2(){ note_dtor("S4467C2", this);}
void  S4467C2 ::v5(){vfunc_called(this, "_ZN7S4467C22v5Ev");}
S4467C2 ::S4467C2(){ note_ctor("S4467C2", this);} // tgen

static void Test_S4467C2()
{
  extern Class_Descriptor cd_S4467C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4467C2, buf);
    S4467C2 *dp, &lv = *(dp=new (buf) S4467C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4467C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4467C2)");
    check_base_class_offset(lv, (S4467C3*), 0, "S4467C2");
    test_class_info(&lv, &cd_S4467C2);
    dp->~S4467C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4467C2(Test_S4467C2, "S4467C2", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4467C2C1Ev();
extern void _ZN7S4467C2D1Ev();
Name_Map name_map_S4467C2[] = {
  NSPAIR(_ZN7S4467C2C1Ev),
  NSPAIR(_ZN7S4467C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4467C3;
extern VTBL_ENTRY _ZTI7S4467C3[];
extern  VTBL_ENTRY _ZTV7S4467C3[];
static Base_Class bases_S4467C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4467C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4467C2[];
extern void _ZN7S4467C2D1Ev();
extern void _ZN7S4467C2D0Ev();
extern void _ZN7S4467C32v2Ev();
extern void _ZN7S4467C32v3Ev();
extern void _ZN7S4467C32v4Ev();
extern void _ZN7S4467C22v5Ev();
static  VTBL_ENTRY vtc_S4467C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4467C2[0]),
  (VTBL_ENTRY)&_ZN7S4467C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4467C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4467C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4467C2[];
extern  VTBL_ENTRY _ZTV7S4467C2[];
Class_Descriptor cd_S4467C2 = {  "S4467C2", // class name
  bases_S4467C2, 1,
  &(vtc_S4467C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4467C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4467C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4467C12  {
  ::S2366C5_nt s4467c12f0;
  ::S4474C14_nt s4467c12f1;
  ::S2366C5_nt s4467c12f2;
  ::S4465C14_nt s4467c12f3;
};
//SIG(-1 S4467C12) C1{ FC2{ m Fp Fi FC3{ m}} FC4{ m FC5{ vd m FL Fc} FC5} FC2 FC6{ m Fp Fi FC3 FC7{ m}}}



static void Test_S4467C12()
{
  {
    init_simple_test("S4467C12");
    S4467C12 lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S4467C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4467C12)");
    check_field_offset(lv, s4467c12f0, 0, "S4467C12.s4467c12f0");
    check_field_offset(lv, s4467c12f1, ABISELECT(16,12), "S4467C12.s4467c12f1");
    check_field_offset(lv, s4467c12f2, ABISELECT(64,44), "S4467C12.s4467c12f2");
    check_field_offset(lv, s4467c12f3, ABISELECT(80,56), "S4467C12.s4467c12f3");
  }
}
static Arrange_To_Call_Me vS4467C12(Test_S4467C12, "S4467C12", ABISELECT(96,68));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4467C11  {
  ::S4467C12 s4467c11f0;
  int s4467c11f1;
  void  mf4467c11(); // _ZN8S4467C119mf4467c11Ev
};
//SIG(-1 S4467C11) C1{ m FC2{ FC3{ m Fp Fi FC4{ m}} FC5{ m FC6{ vd m FL Fc} FC6} FC3 FC7{ m Fp Fi FC4 FC8{ m}}} Fi}


void  S4467C11 ::mf4467c11(){}

static void Test_S4467C11()
{
  {
    init_simple_test("S4467C11");
    S4467C11 lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S4467C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4467C11)");
    check_field_offset(lv, s4467c11f0, 0, "S4467C11.s4467c11f0");
    check_field_offset(lv, s4467c11f1, ABISELECT(96,68), "S4467C11.s4467c11f1");
  }
}
static Arrange_To_Call_Me vS4467C11(Test_S4467C11, "S4467C11", ABISELECT(104,72));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4467C1  : S4467C2 {
  ::S4477C7_nt s4467c1f0;
  void *s4467c1f1;
  ::S4467C11 s4467c1f2;
  virtual  ~S4467C1(); // _ZN7S4467C1D1Ev
  virtual void  v1(); // _ZN7S4467C12v1Ev
  S4467C1(); // tgen
};
//SIG(1 S4467C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} vd v5} vd v1 FC6{ vd m FC7{ m Fp Fi FC8{ m}} Fi FC9{ BC10{ vd m Fc} vd FL[2]}} Fp FC11{ m FC12{ FC7 FC13{ m FC14{ vd m FL Fc} FC14} FC7 FC15{ m Fp Fi FC8 FC16{ m}}} Fi}}


 S4467C1 ::~S4467C1(){ note_dtor("S4467C1", this);}
void  S4467C1 ::v1(){vfunc_called(this, "_ZN7S4467C12v1Ev");}
S4467C1 ::S4467C1(){ note_ctor("S4467C1", this);} // tgen

static void Test_S4467C1()
{
  extern Class_Descriptor cd_S4467C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,44)];
    init_test(&cd_S4467C1, buf);
    S4467C1 *dp, &lv = *(dp=new (buf) S4467C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,172), "sizeof(S4467C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4467C1)");
    check_base_class_offset(lv, (S4467C3*)(S4467C2*), 0, "S4467C1");
    check_base_class_offset(lv, (S4467C2*), 0, "S4467C1");
    check_field_offset(lv, s4467c1f0, ABISELECT(72,52), "S4467C1.s4467c1f0");
    check_field_offset(lv, s4467c1f1, ABISELECT(136,96), "S4467C1.s4467c1f1");
    check_field_offset(lv, s4467c1f2, ABISELECT(144,100), "S4467C1.s4467c1f2");
    test_class_info(&lv, &cd_S4467C1);
    dp->~S4467C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4467C1(Test_S4467C1, "S4467C1", ABISELECT(248,172));

#else // __cplusplus

extern void _ZN7S4467C1C1Ev();
extern void _ZN7S4467C1D1Ev();
Name_Map name_map_S4467C1[] = {
  NSPAIR(_ZN7S4467C1C1Ev),
  NSPAIR(_ZN7S4467C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4467C3;
extern VTBL_ENTRY _ZTI7S4467C3[];
extern  VTBL_ENTRY _ZTV7S4467C3[];
extern Class_Descriptor cd_S4467C2;
extern VTBL_ENTRY _ZTI7S4467C2[];
extern  VTBL_ENTRY _ZTV7S4467C2[];
static Base_Class bases_S4467C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4467C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4467C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4467C1[];
extern void _ZN7S4467C1D1Ev();
extern void _ZN7S4467C1D0Ev();
extern void _ZN7S4467C32v2Ev();
extern void _ZN7S4467C32v3Ev();
extern void _ZN7S4467C32v4Ev();
extern void _ZN7S4467C22v5Ev();
extern void _ZN7S4467C12v1Ev();
static  VTBL_ENTRY vtc_S4467C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4467C1[0]),
  (VTBL_ENTRY)&_ZN7S4467C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4467C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4467C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4467C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4467C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4467C1[];
extern  VTBL_ENTRY _ZTV7S4467C1[];
Class_Descriptor cd_S4467C1 = {  "S4467C1", // class name
  bases_S4467C1, 2,
  &(vtc_S4467C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,172), // object size
  NSPAIRA(_ZTI7S4467C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4467C1),9, //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  S7458C4  : virtual S19572C5 {
  ~S7458C4(); // tgen
  S7458C4(); // tgen
};
//SIG(-1 S7458C4) C1{ VBC2{ m Fs:13}}


S7458C4 ::~S7458C4(){ note_dtor("S7458C4", this);} // tgen
S7458C4 ::S7458C4(){ note_ctor("S7458C4", this);} // tgen

static void Test_S7458C4()
{
  extern Class_Descriptor cd_S7458C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7458C4, buf);
    S7458C4 *dp, &lv = *(dp=new (buf) S7458C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7458C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7458C4)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S7458C4");
    test_class_info(&lv, &cd_S7458C4);
    dp->~S7458C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C4(Test_S7458C4, "S7458C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7458C4C1Ev();
extern void _ZN7S7458C4D1Ev();
Name_Map name_map_S7458C4[] = {
  NSPAIR(_ZN7S7458C4C1Ev),
  NSPAIR(_ZN7S7458C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S7458C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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 _ZTI7S7458C4[];
static  VTBL_ENTRY vtc_S7458C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern VTBL_ENTRY _ZTV7S7458C4[];
static  VTT_ENTRY vtt_S7458C4[] = {
  {&(_ZTV7S7458C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
Class_Descriptor cd_S7458C4 = {  "S7458C4", // class name
  bases_S7458C4, 1,
  &(vtc_S7458C4[0]), // expected_vtbl_contents
  &(vtt_S7458C4[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7458C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7458C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7458C4),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  S7458C2  : virtual S19572C5 , virtual S7458C4 {
  ~S7458C2(); // tgen
  S7458C2(); // tgen
};
//SIG(-1 S7458C2) C1{ VBC2{ m Fs:13} VBC3{ VBC2}}


S7458C2 ::~S7458C2(){ note_dtor("S7458C2", this);} // tgen
S7458C2 ::S7458C2(){ note_ctor("S7458C2", this);} // tgen

static void Test_S7458C2()
{
  extern Class_Descriptor cd_S7458C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7458C2, buf);
    S7458C2 *dp, &lv = *(dp=new (buf) S7458C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7458C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7458C2)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S7458C2");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(8,4), "S7458C2");
    check_base_class_offset(lv, (S7458C4*), 0, "S7458C2");
    test_class_info(&lv, &cd_S7458C2);
    dp->~S7458C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C2(Test_S7458C2, "S7458C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7458C2C1Ev();
extern void _ZN7S7458C2D1Ev();
Name_Map name_map_S7458C2[] = {
  NSPAIR(_ZN7S7458C2C1Ev),
  NSPAIR(_ZN7S7458C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
static Base_Class bases_S7458C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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},
  {&cd_S7458C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7458C2[];
static  VTBL_ENTRY vtc_S7458C2[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
extern VTBL_ENTRY _ZTV7S7458C2[];
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTT_ENTRY vtt_S7458C2[] = {
  {&(_ZTV7S7458C2[4]),  4,4},
  {&(_ZTV7S7458C2[4]),  4,4},
  {&(_tg__ZTV7S7458C4__7S7458C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7458C2[];
extern  VTBL_ENTRY _ZTV7S7458C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C2[];
Class_Descriptor cd_S7458C2 = {  "S7458C2", // class name
  bases_S7458C2, 2,
  &(vtc_S7458C2[0]), // expected_vtbl_contents
  &(vtt_S7458C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7458C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7458C2),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7458C2),3, //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  S7458C9  : S19572C5 {
};
//SIG(-1 S7458C9) C1{ BC2{ m Fs:13}}



static void Test_S7458C9()
{
  extern Class_Descriptor cd_S7458C9;
  void *lvp;
  {
    short buf[2];
    init_test(&cd_S7458C9, buf);
    S7458C9 &lv = *(new (buf) S7458C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), 2, "sizeof(S7458C9)");
    check2(__alignof__(lv), 2, "__alignof__(S7458C9)");
    check_base_class_offset(lv, (S19572C5*), 0, "S7458C9");
    test_class_info(&lv, &cd_S7458C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C9(Test_S7458C9, "S7458C9", 2);

#else // __cplusplus

extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S7458C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7458C9[];
Class_Descriptor cd_S7458C9 = {  "S7458C9", // class name
  bases_S7458C9, 1,
  0, // no vftv
  0, //no vtt
  2, // object size
  NSPAIRA(_ZTI7S7458C9),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  S7458C8  : S7458C4 , S7458C9 {
  virtual  ~S7458C8(); // _ZN7S7458C8D2Ev
  S7458C8(); // tgen
};
//SIG(-1 S7458C8) C1{ BC2{ VBC3{ m Fs:13}} BC4{ BC3} vd}


 S7458C8 ::~S7458C8(){ note_dtor("S7458C8", this);}
S7458C8 ::S7458C8(){ note_ctor("S7458C8", this);} // tgen

static void Test_S7458C8()
{
  extern Class_Descriptor cd_S7458C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7458C8, buf);
    S7458C8 *dp, &lv = *(dp=new (buf) S7458C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7458C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7458C8)");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(10,6), "S7458C8");
    check_base_class_offset(lv, (S7458C4*), 0, "S7458C8");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(8,4), "S7458C8");
    check_base_class_offset(lv, (S7458C9*), ABISELECT(8,4), "S7458C8");
    test_class_info(&lv, &cd_S7458C8);
    dp->~S7458C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C8(Test_S7458C8, "S7458C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7458C8C1Ev();
extern void _ZN7S7458C8D2Ev();
Name_Map name_map_S7458C8[] = {
  NSPAIR(_ZN7S7458C8C1Ev),
  NSPAIR(_ZN7S7458C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
static Base_Class bases_S7458C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7458C4,    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},
  {&cd_S19572C5,    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_S7458C9,    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 _ZTI7S7458C8[];
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY vtc_S7458C8[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
extern VTBL_ENTRY _ZTV7S7458C8[];
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C8[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTT_ENTRY vtt_S7458C8[] = {
  {&(_ZTV7S7458C8[3]),  3,5},
  {&(_tg__ZTV7S7458C4__7S7458C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
Class_Descriptor cd_S7458C8 = {  "S7458C8", // class name
  bases_S7458C8, 4,
  &(vtc_S7458C8[0]), // expected_vtbl_contents
  &(vtt_S7458C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7458C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7458C8),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7458C8),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  S7458C10  : virtual S7458C9 {
  ~S7458C10(); // tgen
  S7458C10(); // tgen
};
//SIG(-1 S7458C10) C1{ VBC2{ BC3{ m Fs:13}}}


S7458C10 ::~S7458C10(){ note_dtor("S7458C10", this);} // tgen
S7458C10 ::S7458C10(){ note_ctor("S7458C10", this);} // tgen

static void Test_S7458C10()
{
  extern Class_Descriptor cd_S7458C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7458C10, buf);
    S7458C10 *dp, &lv = *(dp=new (buf) S7458C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7458C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7458C10)");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(8,4), "S7458C10");
    check_base_class_offset(lv, (S7458C9*), ABISELECT(8,4), "S7458C10");
    test_class_info(&lv, &cd_S7458C10);
    dp->~S7458C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C10(Test_S7458C10, "S7458C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7458C10C1Ev();
extern void _ZN8S7458C10D1Ev();
Name_Map name_map_S7458C10[] = {
  NSPAIR(_ZN8S7458C10C1Ev),
  NSPAIR(_ZN8S7458C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
static Base_Class bases_S7458C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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_S7458C9,    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 _ZTI8S7458C10[];
static  VTBL_ENTRY vtc_S7458C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern VTBL_ENTRY _ZTV8S7458C10[];
static  VTT_ENTRY vtt_S7458C10[] = {
  {&(_ZTV8S7458C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
Class_Descriptor cd_S7458C10 = {  "S7458C10", // class name
  bases_S7458C10, 2,
  &(vtc_S7458C10[0]), // expected_vtbl_contents
  &(vtt_S7458C10[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7458C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7458C10),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7458C10),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  S7458C12  : virtual S7458C4 {
  ~S7458C12(); // tgen
  S7458C12(); // tgen
};
//SIG(-1 S7458C12) C1{ VBC2{ VBC3{ m Fs:13}}}


S7458C12 ::~S7458C12(){ note_dtor("S7458C12", this);} // tgen
S7458C12 ::S7458C12(){ note_ctor("S7458C12", this);} // tgen

static void Test_S7458C12()
{
  extern Class_Descriptor cd_S7458C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7458C12, buf);
    S7458C12 *dp, &lv = *(dp=new (buf) S7458C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7458C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7458C12)");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(8,4), "S7458C12");
    check_base_class_offset(lv, (S7458C4*), 0, "S7458C12");
    test_class_info(&lv, &cd_S7458C12);
    dp->~S7458C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C12(Test_S7458C12, "S7458C12", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7458C12C1Ev();
extern void _ZN8S7458C12D1Ev();
Name_Map name_map_S7458C12[] = {
  NSPAIR(_ZN8S7458C12C1Ev),
  NSPAIR(_ZN8S7458C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
static Base_Class bases_S7458C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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, 1},
  {&cd_S7458C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7458C12[];
static  VTBL_ENTRY vtc_S7458C12[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C12[0]),
};
extern VTBL_ENTRY _ZTV8S7458C12[];
static  VTBL_ENTRY _tg__ZTV7S7458C4__8S7458C12[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTT_ENTRY vtt_S7458C12[] = {
  {&(_ZTV8S7458C12[4]),  4,4},
  {&(_ZTV8S7458C12[4]),  4,4},
  {&(_tg__ZTV7S7458C4__8S7458C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7458C12[];
extern  VTBL_ENTRY _ZTV8S7458C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C12[];
Class_Descriptor cd_S7458C12 = {  "S7458C12", // class name
  bases_S7458C12, 2,
  &(vtc_S7458C12[0]), // expected_vtbl_contents
  &(vtt_S7458C12[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7458C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7458C12),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7458C12),3, //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  S7458C14  : virtual S19572C5 , virtual S7458C9 , S7458C10 , S7458C8 , S7458C4 {
  long double s7458c14f0[5];
  virtual  ~S7458C14(); // _ZN8S7458C14D2Ev
  S7458C14(); // tgen
};
//SIG(-1 S7458C14) C1{ VBC2{ m Fs:13} VBC3{ BC2} BC4{ VBC3} BC5{ BC6{ VBC2} BC3 vd} BC6 vd FD[5]}


 S7458C14 ::~S7458C14(){ note_dtor("S7458C14", this);}
S7458C14 ::S7458C14(){ note_ctor("S7458C14", this);} // tgen

static void Test_S7458C14()
{
  extern Class_Descriptor cd_S7458C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,21)];
    init_test(&cd_S7458C14, buf);
    S7458C14 *dp, &lv = *(dp=new (buf) S7458C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S7458C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7458C14)");
    /*is_ambiguous_... S7458C14::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(112,76), "S7458C14");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*), ABISELECT(112,76), "S7458C14");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(112,76), "S7458C14");
    /*is_ambiguous_... S7458C14::S7458C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(114,78), "S7458C14");
    /*is_ambiguous_... S7458C14::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*), ABISELECT(114,78), "S7458C14");
    check_base_class_offset(lv, (S7458C9*)(S7458C10*), ABISELECT(114,78), "S7458C14");
    check_base_class_offset(lv, (S7458C10*), 0, "S7458C14");
    check_base_class_offset(lv, (S7458C4*)(S7458C8*), ABISELECT(8,4), "S7458C14");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*), ABISELECT(16,8), "S7458C14");
    check_base_class_offset(lv, (S7458C9*)(S7458C8*), ABISELECT(16,8), "S7458C14");
    check_base_class_offset(lv, (S7458C8*), ABISELECT(8,4), "S7458C14");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*), ABISELECT(24,12), "S7458C14");
    check_field_offset(lv, s7458c14f0, ABISELECT(32,16), "S7458C14.s7458c14f0");
    test_class_info(&lv, &cd_S7458C14);
    dp->~S7458C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C14(Test_S7458C14, "S7458C14", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN8S7458C14C1Ev();
extern void _ZN8S7458C14D2Ev();
Name_Map name_map_S7458C14[] = {
  NSPAIR(_ZN8S7458C14C1Ev),
  NSPAIR(_ZN8S7458C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
static Base_Class bases_S7458C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(112,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19572C5,    ABISELECT(114,78), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7458C9,    ABISELECT(114,78), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7458C10,    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},
  {&cd_S7458C4,    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
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    6, //immediately_derived
  0, 0},
  {&cd_S7458C9,    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
    7, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7458C4,    ABISELECT(24,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7458C14[];
extern void _ZN8S7458C14D1Ev();
extern void _ZN8S7458C14D0Ev();
extern void ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev)();
static  VTBL_ENTRY vtc_S7458C14[] = {
  ABISELECT(112,76),
  ABISELECT(114,78),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&_ZN8S7458C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C14D0Ev,
  ABISELECT(104,72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev),
  ABISELECT(88,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
};
extern VTBL_ENTRY _ZTV8S7458C14[];
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C14[] = {
  ABISELECT(114,78),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C8__8S7458C14[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C8__8S7458C14[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__8S7458C14[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTT_ENTRY vtt_S7458C14[] = {
  {&(_ZTV8S7458C14[4]),  4,14},
  {&(_tg__ZTV8S7458C10__8S7458C14[3]),  3,3},
  {&(_tg__ZTV7S7458C8__8S7458C14[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C8__8S7458C14[3]),  3,3},
  {&(_tg__ZTV7S7458C4__A1__8S7458C14[3]),  3,3},
  {&(_ZTV8S7458C14[9]),  9,14},
  {&(_ZTV8S7458C14[14]),  14,14},
};
extern VTBL_ENTRY _ZTI8S7458C14[];
extern  VTBL_ENTRY _ZTV8S7458C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C14[];
Class_Descriptor cd_S7458C14 = {  "S7458C14", // class name
  bases_S7458C14, 9,
  &(vtc_S7458C14[0]), // expected_vtbl_contents
  &(vtt_S7458C14[0]), // expected_vtt_contents
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI8S7458C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7458C14),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7458C14),7, //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  S7458C13  : virtual S7458C9 , virtual S7458C10 , virtual S7458C14 , S7458C4 {
  ::S19572C19 s7458c13f0;
  virtual void  v1(); // _ZN8S7458C132v1Ev
  ~S7458C13(); // tgen
  S7458C13(); // tgen
};
//SIG(-1 S7458C13) C1{ VBC2{ BC3{ m Fs:13}} VBC4{ VBC2} VBC5{ VBC3 VBC2 BC4 BC6{ BC7{ VBC3} BC2 vd} BC7 vd FD[5]} BC7 v1 FC8{ VBC9{ VBC3} VBC10{ VBC3} BC3 VBC11{ BC3} vd Fi}}


void  S7458C13 ::v1(){vfunc_called(this, "_ZN8S7458C132v1Ev");}
S7458C13 ::~S7458C13(){ note_dtor("S7458C13", this);} // tgen
S7458C13 ::S7458C13(){ note_ctor("S7458C13", this);} // tgen

static void Test_S7458C13()
{
  extern Class_Descriptor cd_S7458C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,30)];
    init_test(&cd_S7458C13, buf);
    S7458C13 *dp, &lv = *(dp=new (buf) S7458C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,116), "sizeof(S7458C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7458C13)");
    /*is_ambiguous_... S7458C13::S7458C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(48,28), "S7458C13");
    /*is_ambiguous_... S7458C13::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*), ABISELECT(48,28), "S7458C13");
    /*is_ambiguous_... S7458C13::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C10*), ABISELECT(48,28), "S7458C13");
    /*is_ambiguous_... S7458C14::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C14*), ABISELECT(48,28), "S7458C13");
    check_base_class_offset(lv, (S7458C9*)(S7458C10*)(S7458C14*), ABISELECT(48,28), "S7458C13");
    /*is_ambiguous_... S7458C13::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*), ABISELECT(56,32), "S7458C13");
    /*is_ambiguous_... S7458C14::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C14*), ABISELECT(176,112), "S7458C13");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(176,112), "S7458C13");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C14*), ABISELECT(176,112), "S7458C13");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(176,112), "S7458C13");
    check_base_class_offset(lv, (S7458C10*)(S7458C14*), ABISELECT(64,36), "S7458C13");
    check_base_class_offset(lv, (S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(72,40), "S7458C13");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(80,44), "S7458C13");
    check_base_class_offset(lv, (S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(80,44), "S7458C13");
    check_base_class_offset(lv, (S7458C8*)(S7458C14*), ABISELECT(72,40), "S7458C13");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C14*), ABISELECT(88,48), "S7458C13");
    check_base_class_offset(lv, (S7458C14*), ABISELECT(64,36), "S7458C13");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*), 0, "S7458C13");
    check_field_offset(lv, s7458c13f0, ABISELECT(8,4), "S7458C13.s7458c13f0");
    test_class_info(&lv, &cd_S7458C13);
    dp->~S7458C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C13(Test_S7458C13, "S7458C13", ABISELECT(192,116));

#else // __cplusplus

extern void _ZN8S7458C13C1Ev();
extern void _ZN8S7458C13D1Ev();
Name_Map name_map_S7458C13[] = {
  NSPAIR(_ZN8S7458C13C1Ev),
  NSPAIR(_ZN8S7458C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C14;
extern VTBL_ENTRY _ZTI8S7458C14[];
extern  VTBL_ENTRY _ZTV8S7458C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C14[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
static Base_Class bases_S7458C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    1, //immediately_derived
  0, 0},
  {&cd_S7458C9,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S7458C10,    ABISELECT(56,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(176,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
    5, //immediately_derived
  0, 1},
  {&cd_S7458C10,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(72,40), //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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    7, //immediately_derived
  0, 0},
  {&cd_S7458C9,    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
    8, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(72,40), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(88,48), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7458C14,    ABISELECT(64,36), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7458C4,    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 _ZTI8S7458C13[];
extern void _ZN8S7458C132v1Ev();
extern void _ZN8S7458C13D1Ev();
extern void _ZN8S7458C13D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZThn64_N8S7458C13D1Ev,_ZThn36_N8S7458C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev)();
extern void ABISELECT(_ZThn64_N8S7458C13D0Ev,_ZThn36_N8S7458C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev)();
static  VTBL_ENTRY vtc_S7458C13[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  ABISELECT(-64,-36),
  ABISELECT(112,76),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev),
  ABISELECT(104,72),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev),
  ABISELECT(88,64),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern VTBL_ENTRY _ZTV8S7458C13[];
static  VTBL_ENTRY _tg__ZTV7S7458C4__A2__8S7458C13[] = {
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C13[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN8S7458C14D1Ev();
extern void _ZN8S7458C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C13[] = {
  ABISELECT(112,76),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&_ZN8S7458C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7458C108S7458C14__A1__8S7458C13[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C13[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C88S7458C14__8S7458C13[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A1__8S7458C13[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C8__8S7458C14__8S7458C13[] = {
  ABISELECT(104,72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__8S7458C14__8S7458C13[] = {
  ABISELECT(88,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
};
static  VTT_ENTRY vtt_S7458C13[] = {
  {&(_ZTV8S7458C13[6]),  6,27},
  {&(_tg__ZTV7S7458C4__A2__8S7458C13[3]),  3,3},
  {&(_ZTV8S7458C13[12]),  12,27},
  {&(_ZTV8S7458C13[17]),  17,27},
  {&(_ZTV8S7458C13[22]),  22,27},
  {&(_ZTV8S7458C13[27]),  27,27},
  {&(_tg__ZTV8S7458C10__8S7458C13[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C13[4]),  4,6},
  {&(_tg__ZTV8S7458C108S7458C14__A1__8S7458C13[3]),  3,3},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C13[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C88S7458C14__8S7458C13[3]),  3,3},
  {&(_tg__ZTV7S7458C48S7458C14__A1__8S7458C13[3]),  3,3},
  {&(_tg__ZTV7S7458C8__8S7458C14__8S7458C13[3]),  3,5},
  {&(_tg__ZTV7S7458C4__A1__8S7458C14__8S7458C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7458C13[];
extern  VTBL_ENTRY _ZTV8S7458C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C13[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7458C13D0Ev,_ZThn36_N8S7458C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7458C13D1Ev,_ZThn36_N8S7458C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7458C13 = {  "S7458C13", // class name
  bases_S7458C13, 12,
  &(vtc_S7458C13[0]), // expected_vtbl_contents
  &(vtt_S7458C13[0]), // expected_vtt_contents
  ABISELECT(192,116), // object size
  NSPAIRA(_ZTI8S7458C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7458C13),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7458C13),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7458C11  : virtual S19572C5 , virtual S7458C12 , virtual S7458C13 {
  int s7458c11f0;
  virtual  ~S7458C11(); // _ZN8S7458C11D2Ev
  S7458C11(); // tgen
};
//SIG(-1 S7458C11) C1{ VBC2{ m Fs:13} VBC3{ VBC4{ VBC2}} VBC5{ VBC6{ BC2} VBC7{ VBC6} VBC8{ VBC2 VBC6 BC7 BC9{ BC4 BC6 vd} BC4 vd FD[5]} BC4 v1 FC10{ VBC11{ VBC2} VBC12{ VBC2} BC2 VBC13{ BC2} vd Fi}} vd Fi}


 S7458C11 ::~S7458C11(){ note_dtor("S7458C11", this);}
S7458C11 ::S7458C11(){ note_ctor("S7458C11", this);} // tgen

static void Test_S7458C11()
{
  extern Class_Descriptor cd_S7458C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,32)];
    init_test(&cd_S7458C11, buf);
    S7458C11 *dp, &lv = *(dp=new (buf) S7458C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S7458C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7458C11)");
    /*is_ambiguous_... S7458C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(12,8), "S7458C11");
    /*is_ambiguous_... S7458C11::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(12,8), "S7458C11");
    /*is_ambiguous_... S7458C14::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C14*), ABISELECT(12,8), "S7458C11");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(12,8), "S7458C11");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C14*), ABISELECT(12,8), "S7458C11");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C13*), ABISELECT(12,8), "S7458C11");
    check_base_class_offset(lv, (S7458C4*)(S7458C12*), 0, "S7458C11");
    check_base_class_offset(lv, (S7458C12*), 0, "S7458C11");
    /*is_ambiguous_... S7458C11::S7458C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(64,40), "S7458C11");
    /*is_ambiguous_... S7458C13::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C13*), ABISELECT(64,40), "S7458C11");
    /*is_ambiguous_... S7458C11::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C10*), ABISELECT(64,40), "S7458C11");
    /*is_ambiguous_... S7458C14::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C14*), ABISELECT(64,40), "S7458C11");
    check_base_class_offset(lv, (S7458C9*)(S7458C10*)(S7458C14*), ABISELECT(64,40), "S7458C11");
    /*is_ambiguous_... S7458C13::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*)(S7458C13*), ABISELECT(72,44), "S7458C11");
    check_base_class_offset(lv, (S7458C10*)(S7458C14*), ABISELECT(80,48), "S7458C11");
    check_base_class_offset(lv, (S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(88,52), "S7458C11");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(96,56), "S7458C11");
    check_base_class_offset(lv, (S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(96,56), "S7458C11");
    check_base_class_offset(lv, (S7458C8*)(S7458C14*), ABISELECT(88,52), "S7458C11");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C14*), ABISELECT(104,60), "S7458C11");
    check_base_class_offset(lv, (S7458C14*)(S7458C13*), ABISELECT(80,48), "S7458C11");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C13*), ABISELECT(16,12), "S7458C11");
    check_base_class_offset(lv, (S7458C13*), ABISELECT(16,12), "S7458C11");
    check_field_offset(lv, s7458c11f0, ABISELECT(8,4), "S7458C11.s7458c11f0");
    test_class_info(&lv, &cd_S7458C11);
    dp->~S7458C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C11(Test_S7458C11, "S7458C11", ABISELECT(192,124));

#else // __cplusplus

extern void _ZN8S7458C11C1Ev();
extern void _ZN8S7458C11D2Ev();
Name_Map name_map_S7458C11[] = {
  NSPAIR(_ZN8S7458C11C1Ev),
  NSPAIR(_ZN8S7458C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C12;
extern VTBL_ENTRY _ZTI8S7458C12[];
extern  VTBL_ENTRY _ZTV8S7458C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C12[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C14;
extern VTBL_ENTRY _ZTI8S7458C14[];
extern  VTBL_ENTRY _ZTV8S7458C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C14[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C13;
extern VTBL_ENTRY _ZTI8S7458C13[];
extern  VTBL_ENTRY _ZTV8S7458C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C13[];
static Base_Class bases_S7458C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S7458C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7458C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7458C9,    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
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7458C10,    ABISELECT(72,44), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7458C10,    ABISELECT(80,48), //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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(88,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(96,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_S7458C9,    ABISELECT(96,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
    10, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(88,52), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(104,60), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7458C14,    ABISELECT(80,48), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7458C4,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7458C13,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7458C11[];
extern void _ZN8S7458C11D1Ev();
extern void _ZN8S7458C11D0Ev();
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7458C11D1Ev,_ZThn12_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S7458C11D0Ev,_ZThn12_N8S7458C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn80_N8S7458C11D1Ev,_ZThn48_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn80_N8S7458C11D0Ev,_ZThn48_N8S7458C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev)();
static  VTBL_ENTRY vtc_S7458C11[] = {
  ABISELECT(80,48),
  ABISELECT(72,44),
  ABISELECT(64,40),
  ABISELECT(16,12),
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C11D0Ev,
  ABISELECT(-16,-12),
  0,
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  -4,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  ABISELECT(-80,-48),
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev),
  ABISELECT(-76,-44),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev),
  ABISELECT(-92,-52),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
extern VTBL_ENTRY _ZTV8S7458C11[];
static  VTBL_ENTRY _tg__ZTV8S7458C12__8S7458C11[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__8S7458C11[] = {
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void _ZN8S7458C13D1Ev();
extern void _ZN8S7458C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C13__8S7458C11[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C13__A3__8S7458C11[] = {
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C13__8S7458C11[] = {
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZThn64_N8S7458C13D1Ev,_ZThn36_N8S7458C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev)();
extern void ABISELECT(_ZThn64_N8S7458C13D0Ev,_ZThn36_N8S7458C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C13__8S7458C11[] = {
  ABISELECT(-64,-36),
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C13__8S7458C11[] = {
  ABISELECT(-76,-44),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A1__8S7458C13__8S7458C11[] = {
  ABISELECT(-92,-52),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C11[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN8S7458C14D1Ev();
extern void _ZN8S7458C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C11[] = {
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&_ZN8S7458C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7458C108S7458C14__A1__8S7458C11[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C11[] = {
  ABISELECT(-76,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C88S7458C14__A1__8S7458C11[] = {
  ABISELECT(-76,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A2__8S7458C11[] = {
  ABISELECT(-92,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C8__8S7458C14__8S7458C11[] = {
  ABISELECT(-76,-44),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__8S7458C14__8S7458C11[] = {
  ABISELECT(-92,-52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
};
static  VTT_ENTRY vtt_S7458C11[] = {
  {&(_ZTV8S7458C11[9]),  9,40},
  {&(_ZTV8S7458C11[9]),  9,40},
  {&(_ZTV8S7458C11[9]),  9,40},
  {&(_ZTV8S7458C11[19]),  19,40},
  {&(_ZTV8S7458C11[25]),  25,40},
  {&(_ZTV8S7458C11[30]),  30,40},
  {&(_ZTV8S7458C11[35]),  35,40},
  {&(_ZTV8S7458C11[40]),  40,40},
  {&(_tg__ZTV8S7458C12__8S7458C11[4]),  4,4},
  {&(_tg__ZTV8S7458C12__8S7458C11[4]),  4,4},
  {&(_tg__ZTV7S7458C4__8S7458C11[3]),  3,3},
  {&(_tg__ZTV8S7458C13__8S7458C11[6]),  6,9},
  {&(_tg__ZTV7S7458C48S7458C13__A3__8S7458C11[3]),  3,3},
  {&(_tg__ZTV8S7458C10__8S7458C13__8S7458C11[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C13__8S7458C11[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C13__8S7458C11[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A1__8S7458C13__8S7458C11[3]),  3,3},
  {&(_tg__ZTV8S7458C10__8S7458C11[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C11[4]),  4,6},
  {&(_tg__ZTV8S7458C108S7458C14__A1__8S7458C11[3]),  3,3},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C11[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C88S7458C14__A1__8S7458C11[3]),  3,3},
  {&(_tg__ZTV7S7458C48S7458C14__A2__8S7458C11[3]),  3,3},
  {&(_tg__ZTV7S7458C8__8S7458C14__8S7458C11[3]),  3,5},
  {&(_tg__ZTV7S7458C4__A1__8S7458C14__8S7458C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7458C11[];
extern  VTBL_ENTRY _ZTV8S7458C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C11[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7458C13D0Ev,_ZThn36_N8S7458C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S7458C13D1Ev,_ZThn36_N8S7458C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7458C11D0Ev,_ZThn48_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S7458C11D1Ev,_ZThn48_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7458C11D0Ev,_ZThn12_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7458C11D1Ev,_ZThn12_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7458C11 = {  "S7458C11", // class name
  bases_S7458C11, 15,
  &(vtc_S7458C11[0]), // expected_vtbl_contents
  &(vtt_S7458C11[0]), // expected_vtt_contents
  ABISELECT(192,124), // object size
  NSPAIRA(_ZTI8S7458C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7458C11),40, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7458C11),25, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7458C7  : virtual S7458C8 , virtual S7458C10 , S7458C11 , S7458C2 , virtual S629C14 {
  ~S7458C7(); // tgen
  S7458C7(); // tgen
};
//SIG(-1 S7458C7) C1{ VBC2{ BC3{ VBC4{ m Fs:13}} BC5{ BC4} vd} VBC6{ VBC5} BC7{ VBC4 VBC8{ VBC3} VBC9{ VBC5 VBC6 VBC10{ VBC4 VBC5 BC6 BC2 BC3 vd FD[5]} BC3 v1 FC11{ VBC12{ VBC4} VBC13{ VBC4} BC4 VBC14{ BC4} vd Fi}} vd Fi} BC15{ VBC4 VBC3} VBC16{ m}}


S7458C7 ::~S7458C7(){ note_dtor("S7458C7", this);} // tgen
S7458C7 ::S7458C7(){ note_ctor("S7458C7", this);} // tgen

static void Test_S7458C7()
{
  extern Class_Descriptor cd_S7458C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,34)];
    init_test(&cd_S7458C7, buf);
    S7458C7 *dp, &lv = *(dp=new (buf) S7458C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,132), "sizeof(S7458C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7458C7)");
    /*is_ambiguous_... S7458C7::S7458C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*), ABISELECT(34,18), "S7458C7");
    /*is_ambiguous_... S7458C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C11*), ABISELECT(34,18), "S7458C7");
    /*is_ambiguous_... S7458C7::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(34,18), "S7458C7");
    /*is_ambiguous_... S7458C14::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C14*), ABISELECT(34,18), "S7458C7");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(34,18), "S7458C7");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C14*), ABISELECT(34,18), "S7458C7");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C13*), ABISELECT(34,18), "S7458C7");
    check_base_class_offset(lv, (S19572C5*)(S7458C2*), ABISELECT(34,18), "S7458C7");
    /*is_ambiguous_... S7458C7::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C8*), ABISELECT(24,12), "S7458C7");
    /*is_ambiguous_... S7458C7::S7458C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*), ABISELECT(32,16), "S7458C7");
    /*is_ambiguous_... S7458C7::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C8*), ABISELECT(32,16), "S7458C7");
    /*is_ambiguous_... S7458C7::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C8*), ABISELECT(24,12), "S7458C7");
    /*is_ambiguous_... S7458C7::S7458C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(48,24), "S7458C7");
    /*is_ambiguous_... S7458C7::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C10*), ABISELECT(48,24), "S7458C7");
    /*is_ambiguous_... S7458C13::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C13*), ABISELECT(48,24), "S7458C7");
    /*is_ambiguous_... S7458C14::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C14*), ABISELECT(48,24), "S7458C7");
    check_base_class_offset(lv, (S7458C9*)(S7458C10*)(S7458C14*), ABISELECT(48,24), "S7458C7");
    /*is_ambiguous_... S7458C7::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*), ABISELECT(40,20), "S7458C7");
    /*is_ambiguous_... S7458C13::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*)(S7458C13*), ABISELECT(40,20), "S7458C7");
    check_base_class_offset(lv, (S7458C4*)(S7458C12*), 0, "S7458C7");
    check_base_class_offset(lv, (S7458C4*)(S7458C2*), 0, "S7458C7");
    check_base_class_offset(lv, (S7458C12*)(S7458C11*), 0, "S7458C7");
    check_base_class_offset(lv, (S7458C10*)(S7458C14*), ABISELECT(112,56), "S7458C7");
    check_base_class_offset(lv, (S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(120,60), "S7458C7");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(128,64), "S7458C7");
    check_base_class_offset(lv, (S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(128,64), "S7458C7");
    check_base_class_offset(lv, (S7458C8*)(S7458C14*), ABISELECT(120,60), "S7458C7");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C14*), ABISELECT(136,68), "S7458C7");
    check_base_class_offset(lv, (S7458C14*)(S7458C13*), ABISELECT(112,56), "S7458C7");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C13*), ABISELECT(56,28), "S7458C7");
    check_base_class_offset(lv, (S7458C13*)(S7458C11*), ABISELECT(56,28), "S7458C7");
    check_base_class_offset(lv, (S7458C11*), 0, "S7458C7");
    check_base_class_offset(lv, (S7458C2*), ABISELECT(16,8), "S7458C7");
    check_base_class_offset(lv, (S629C14*), 0, "S7458C7");
    test_class_info(&lv, &cd_S7458C7);
    dp->~S7458C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C7(Test_S7458C7, "S7458C7", ABISELECT(224,132));

#else // __cplusplus

extern void _ZN7S7458C7C1Ev();
extern void _ZN7S7458C7D1Ev();
Name_Map name_map_S7458C7[] = {
  NSPAIR(_ZN7S7458C7C1Ev),
  NSPAIR(_ZN7S7458C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C12;
extern VTBL_ENTRY _ZTI8S7458C12[];
extern  VTBL_ENTRY _ZTV8S7458C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C12[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C14;
extern VTBL_ENTRY _ZTI8S7458C14[];
extern  VTBL_ENTRY _ZTV8S7458C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C14[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C13;
extern VTBL_ENTRY _ZTI8S7458C13[];
extern  VTBL_ENTRY _ZTV8S7458C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C13[];
extern Class_Descriptor cd_S7458C11;
extern VTBL_ENTRY _ZTI8S7458C11[];
extern  VTBL_ENTRY _ZTV8S7458C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C11[];
extern Class_Descriptor cd_S7458C2;
extern VTBL_ENTRY _ZTI7S7458C2[];
extern  VTBL_ENTRY _ZTV7S7458C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C2[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
static Base_Class bases_S7458C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(34,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7458C4,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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_S7458C9,    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, 0},
  {&cd_S7458C8,    ABISELECT(24,12), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    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
    6, //immediately_derived
  0, 0},
  {&cd_S7458C9,    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
    7, //immediately_derived
  0, 1},
  {&cd_S7458C10,    ABISELECT(40,20), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7458C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7458C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7458C10,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    13, //immediately_derived
  0, 0},
  {&cd_S7458C9,    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
    14, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(120,60), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(136,68), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C14,    ABISELECT(112,56), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7458C4,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7458C13,    ABISELECT(56,28), //bcp->offset
    26, //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
    12, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7458C11,    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
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7458C2,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7458C7[];
extern void _ZN7S7458C7D1Ev();
extern void _ZN7S7458C7D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7458C7D1Ev,_ZThn12_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7458C7D0Ev,_ZThn12_N7S7458C7D0Ev)() __attribute__((weak));
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn56_N7S7458C7D1Ev,_ZThn28_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn56_N7S7458C7D0Ev,_ZThn28_N7S7458C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn112_N7S7458C7D1Ev,_ZThn56_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn112_N7S7458C7D0Ev,_ZThn56_N7S7458C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S7458C7D1Ev,_ZTvn4_n20_N7S7458C7D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C7D0Ev,_ZTvn4_n20_N7S7458C7D0Ev)();
static  VTBL_ENTRY vtc_S7458C7[] = {
  0,
  ABISELECT(24,12),
  ABISELECT(112,56),
  ABISELECT(40,20),
  ABISELECT(48,24),
  ABISELECT(56,28),
  0,
  0,
  ABISELECT(34,18),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&_ZN7S7458C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C7D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(18,10),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  ABISELECT(-24,-12),
  ABISELECT(10,6),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev),
  ABISELECT(8,4),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  ABISELECT(-56,-28),
  0,
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(-22,-10),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev),
  ABISELECT(-112,-56),
  ABISELECT(-78,-38),
  ABISELECT(-64,-32),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev),
  ABISELECT(-86,-42),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C7D1Ev,_ZTvn4_n20_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C7D0Ev,_ZTvn4_n20_N7S7458C7D0Ev),
  ABISELECT(-102,-50),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
extern VTBL_ENTRY _ZTV7S7458C7[];
extern void _ZN8S7458C11D1Ev();
extern void _ZN8S7458C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C11__7S7458C7[] = {
  ABISELECT(112,56),
  ABISELECT(40,20),
  ABISELECT(48,24),
  ABISELECT(56,28),
  0,
  0,
  ABISELECT(34,18),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C11D0Ev,
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn56_N8S7458C11D1Ev,_ZThn28_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn56_N8S7458C11D0Ev,_ZThn28_N8S7458C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__8S7458C11__7S7458C7[] = {
  ABISELECT(-56,-28),
  0,
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(-22,-10),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C11__7S7458C7[] = {
  ABISELECT(8,4),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn112_N8S7458C11D1Ev,_ZThn56_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn112_N8S7458C11D0Ev,_ZThn56_N8S7458C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C11__7S7458C7[] = {
  ABISELECT(-112,-56),
  ABISELECT(-78,-38),
  ABISELECT(-64,-32),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C11__7S7458C7[] = {
  ABISELECT(-86,-42),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A2__8S7458C11__7S7458C7[] = {
  ABISELECT(-102,-50),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C2__7S7458C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(18,10),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C2__7S7458C7[] = {
  ABISELECT(34,18),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C7[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C8__7S7458C7[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__7S7458C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C12__7S7458C7[] = {
  0,
  ABISELECT(34,18),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__7S7458C7[] = {
  ABISELECT(34,18),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void _ZN8S7458C13D1Ev();
extern void _ZN8S7458C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C7[] = {
  ABISELECT(56,28),
  ABISELECT(-16,-8),
  ABISELECT(-8,-4),
  ABISELECT(-22,-10),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C13__A4__7S7458C7[] = {
  ABISELECT(-22,-10),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C13__7S7458C7[] = {
  ABISELECT(8,4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZThn56_N8S7458C13D1Ev,_ZThn28_N8S7458C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev)();
extern void ABISELECT(_ZThn56_N8S7458C13D0Ev,_ZThn28_N8S7458C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C13__7S7458C7[] = {
  ABISELECT(-56,-28),
  ABISELECT(-78,-38),
  ABISELECT(-64,-32),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C13__7S7458C7[] = {
  ABISELECT(-86,-42),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A1__8S7458C13__7S7458C7[] = {
  ABISELECT(-102,-50),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void _ZN8S7458C14D1Ev();
extern void _ZN8S7458C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C7[] = {
  ABISELECT(-78,-38),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&_ZN8S7458C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7458C108S7458C14__A1__7S7458C7[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C7[] = {
  ABISELECT(-86,-42),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C88S7458C14__A2__7S7458C7[] = {
  ABISELECT(-86,-42),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C7[] = {
  ABISELECT(-102,-50),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C8__8S7458C14__7S7458C7[] = {
  ABISELECT(-86,-42),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__8S7458C14__7S7458C7[] = {
  ABISELECT(-102,-50),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
};
static  VTT_ENTRY vtt_S7458C7[] = {
  {&(_ZTV7S7458C7[11]),  11,52},
  {&(_tg__ZTV8S7458C11__7S7458C7[9]),  9,11},
  {&(_tg__ZTV8S7458C11__7S7458C7[9]),  9,11},
  {&(_tg__ZTV8S7458C11__7S7458C7[9]),  9,11},
  {&(_tg__ZTV8S7458C13__8S7458C11__7S7458C7[8]),  8,11},
  {&(_tg__ZTV8S7458C10__8S7458C11__7S7458C7[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C11__7S7458C7[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C11__7S7458C7[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A2__8S7458C11__7S7458C7[3]),  3,3},
  {&(_tg__ZTV7S7458C2__7S7458C7[4]),  4,4},
  {&(_tg__ZTV7S7458C4__7S7458C2__7S7458C7[3]),  3,3},
  {&(_ZTV7S7458C7[21]),  21,52},
  {&(_ZTV7S7458C7[26]),  26,52},
  {&(_ZTV7S7458C7[11]),  11,52},
  {&(_ZTV7S7458C7[11]),  11,52},
  {&(_ZTV7S7458C7[34]),  34,52},
  {&(_ZTV7S7458C7[42]),  42,52},
  {&(_ZTV7S7458C7[47]),  47,52},
  {&(_ZTV7S7458C7[52]),  52,52},
  {&(_ZTV7S7458C7[17]),  17,52},
  {&(_tg__ZTV7S7458C8__7S7458C7[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C8__7S7458C7[3]),  3,3},
  {&(_tg__ZTV8S7458C10__7S7458C7[3]),  3,3},
  {&(_tg__ZTV8S7458C12__7S7458C7[4]),  4,4},
  {&(_tg__ZTV8S7458C12__7S7458C7[4]),  4,4},
  {&(_tg__ZTV7S7458C4__A1__7S7458C7[3]),  3,3},
  {&(_tg__ZTV8S7458C13__7S7458C7[6]),  6,9},
  {&(_tg__ZTV7S7458C48S7458C13__A4__7S7458C7[3]),  3,3},
  {&(_tg__ZTV8S7458C10__8S7458C13__7S7458C7[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C13__7S7458C7[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C13__7S7458C7[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A1__8S7458C13__7S7458C7[3]),  3,3},
  {&(_tg__ZTV8S7458C14__7S7458C7[4]),  4,6},
  {&(_tg__ZTV8S7458C108S7458C14__A1__7S7458C7[3]),  3,3},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C7[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C88S7458C14__A2__7S7458C7[3]),  3,3},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C7[3]),  3,3},
  {&(_tg__ZTV7S7458C8__8S7458C14__7S7458C7[3]),  3,5},
  {&(_tg__ZTV7S7458C4__A1__8S7458C14__7S7458C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7458C7[];
extern  VTBL_ENTRY _ZTV7S7458C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C7[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7458C13D0Ev,_ZThn28_N8S7458C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7458C13D1Ev,_ZThn28_N8S7458C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S7458C11D0Ev,_ZThn56_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S7458C11D1Ev,_ZThn56_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7458C11D0Ev,_ZThn28_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7458C11D1Ev,_ZThn28_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C7D0Ev,_ZThn56_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C7D1Ev,_ZThn56_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7458C7D0Ev,_ZThn28_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7458C7D1Ev,_ZThn28_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C7D0Ev,_ZThn12_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C7D1Ev,_ZThn12_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7458C7 = {  "S7458C7", // class name
  bases_S7458C7, 22,
  &(vtc_S7458C7[0]), // expected_vtbl_contents
  &(vtt_S7458C7[0]), // expected_vtt_contents
  ABISELECT(224,132), // object size
  NSPAIRA(_ZTI7S7458C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7458C7),52, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7458C7),39, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7458C6  : virtual S7458C4 , virtual S7458C7 , S629C14 {
  virtual  ~S7458C6(); // _ZN7S7458C6D2Ev
  S7458C6(); // tgen
};
//SIG(-1 S7458C6) C1{ VBC2{ VBC3{ m Fs:13}} VBC4{ VBC5{ BC2 BC6{ BC3} vd} VBC7{ VBC6} BC8{ VBC3 VBC9{ VBC2} VBC10{ VBC6 VBC7 VBC11{ VBC3 VBC6 BC7 BC5 BC2 vd FD[5]} BC2 v1 FC12{ VBC13{ VBC3} VBC14{ VBC3} BC3 VBC15{ BC3} vd Fi}} vd Fi} BC16{ VBC3 VBC2} VBC17{ m}} BC17 vd}


 S7458C6 ::~S7458C6(){ note_dtor("S7458C6", this);}
S7458C6 ::S7458C6(){ note_ctor("S7458C6", this);} // tgen

static void Test_S7458C6()
{
  extern Class_Descriptor cd_S7458C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,35)];
    init_test(&cd_S7458C6, buf);
    S7458C6 *dp, &lv = *(dp=new (buf) S7458C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,136), "sizeof(S7458C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7458C6)");
    /*is_ambiguous_... S7458C6::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(8,4), "S7458C6");
    /*is_ambiguous_... S7458C6::S7458C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*), ABISELECT(8,4), "S7458C6");
    /*is_ambiguous_... S7458C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C11*)(S7458C7*), ABISELECT(8,4), "S7458C6");
    /*is_ambiguous_... S7458C14::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C14*), ABISELECT(8,4), "S7458C6");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(8,4), "S7458C6");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C14*), ABISELECT(8,4), "S7458C6");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C13*), ABISELECT(8,4), "S7458C6");
    check_base_class_offset(lv, (S19572C5*)(S7458C2*)(S7458C7*), ABISELECT(8,4), "S7458C6");
    /*is_ambiguous_... S7458C6::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*), ABISELECT(16,8), "S7458C6");
    check_base_class_offset(lv, (S7458C4*)(S7458C12*), ABISELECT(16,8), "S7458C6");
    check_base_class_offset(lv, (S7458C4*)(S7458C2*)(S7458C7*), ABISELECT(16,8), "S7458C6");
    /*is_ambiguous_... S7458C6::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C8*), ABISELECT(40,20), "S7458C6");
    /*is_ambiguous_... S7458C6::S7458C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*), ABISELECT(48,24), "S7458C6");
    /*is_ambiguous_... S7458C6::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C8*), ABISELECT(48,24), "S7458C6");
    /*is_ambiguous_... S7458C7::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C8*)(S7458C7*), ABISELECT(40,20), "S7458C6");
    /*is_ambiguous_... S7458C6::S7458C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(50,26), "S7458C6");
    /*is_ambiguous_... S7458C6::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C10*), ABISELECT(50,26), "S7458C6");
    /*is_ambiguous_... S7458C13::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C13*), ABISELECT(50,26), "S7458C6");
    /*is_ambiguous_... S7458C14::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C14*), ABISELECT(50,26), "S7458C6");
    check_base_class_offset(lv, (S7458C9*)(S7458C10*)(S7458C14*), ABISELECT(50,26), "S7458C6");
    /*is_ambiguous_... S7458C7::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*)(S7458C7*), 0, "S7458C6");
    /*is_ambiguous_... S7458C13::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*)(S7458C13*), 0, "S7458C6");
    check_base_class_offset(lv, (S7458C12*)(S7458C11*)(S7458C7*), ABISELECT(16,8), "S7458C6");
    check_base_class_offset(lv, (S7458C10*)(S7458C14*), ABISELECT(112,56), "S7458C6");
    check_base_class_offset(lv, (S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(120,60), "S7458C6");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(128,64), "S7458C6");
    check_base_class_offset(lv, (S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(128,64), "S7458C6");
    check_base_class_offset(lv, (S7458C8*)(S7458C14*), ABISELECT(120,60), "S7458C6");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C14*), ABISELECT(136,68), "S7458C6");
    check_base_class_offset(lv, (S7458C14*)(S7458C13*), ABISELECT(112,56), "S7458C6");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C13*), ABISELECT(56,28), "S7458C6");
    check_base_class_offset(lv, (S7458C13*)(S7458C11*)(S7458C7*), ABISELECT(56,28), "S7458C6");
    check_base_class_offset(lv, (S7458C11*)(S7458C7*), ABISELECT(16,8), "S7458C6");
    check_base_class_offset(lv, (S7458C2*)(S7458C7*), ABISELECT(32,16), "S7458C6");
    check_base_class_offset(lv, (S629C14*)(S7458C7*), ABISELECT(224,132), "S7458C6");
    check_base_class_offset(lv, (S7458C7*), ABISELECT(16,8), "S7458C6");
    /*is_ambiguous_... S7458C6::S629C14 */ AMB_check_base_class_offset(lv, (S629C14*), 0, "S7458C6");
    test_class_info(&lv, &cd_S7458C6);
    dp->~S7458C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C6(Test_S7458C6, "S7458C6", ABISELECT(240,136));

#else // __cplusplus

extern void _ZN7S7458C6C1Ev();
extern void _ZN7S7458C6D2Ev();
Name_Map name_map_S7458C6[] = {
  NSPAIR(_ZN7S7458C6C1Ev),
  NSPAIR(_ZN7S7458C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C12;
extern VTBL_ENTRY _ZTI8S7458C12[];
extern  VTBL_ENTRY _ZTV8S7458C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C12[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C14;
extern VTBL_ENTRY _ZTI8S7458C14[];
extern  VTBL_ENTRY _ZTV8S7458C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C14[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C13;
extern VTBL_ENTRY _ZTI8S7458C13[];
extern  VTBL_ENTRY _ZTV8S7458C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C13[];
extern Class_Descriptor cd_S7458C11;
extern VTBL_ENTRY _ZTI8S7458C11[];
extern  VTBL_ENTRY _ZTV8S7458C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C11[];
extern Class_Descriptor cd_S7458C2;
extern VTBL_ENTRY _ZTI7S7458C2[];
extern  VTBL_ENTRY _ZTV7S7458C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C2[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S7458C7;
extern VTBL_ENTRY _ZTI7S7458C7[];
extern  VTBL_ENTRY _ZTV7S7458C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C7[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
static Base_Class bases_S7458C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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, 1},
  {&cd_S7458C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7458C4,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7458C9,    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
    5, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(40,20), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(50,26), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7458C9,    ABISELECT(50,26), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7458C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7458C12,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7458C10,    ABISELECT(112,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    13, //immediately_derived
  0, 0},
  {&cd_S7458C9,    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
    14, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(120,60), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(136,68), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C14,    ABISELECT(112,56), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7458C4,    ABISELECT(56,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    18, //immediately_derived
  0, 0},
  {&cd_S7458C13,    ABISELECT(56,28), //bcp->offset
    38, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7458C11,    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
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7458C2,    ABISELECT(32,16), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S629C14,    ABISELECT(224,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7458C7,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7458C6[];
extern void _ZN7S7458C6D1Ev();
extern void _ZN7S7458C6D0Ev();
extern void ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn16_N7S7458C6D1Ev,_ZThn8_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn16_N7S7458C6D0Ev,_ZThn8_N7S7458C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn40_N7S7458C6D1Ev,_ZThn20_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn40_N7S7458C6D0Ev,_ZThn20_N7S7458C6D0Ev)() __attribute__((weak));
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn56_N7S7458C6D1Ev,_ZThn28_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn56_N7S7458C6D0Ev,_ZThn28_N7S7458C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn112_N7S7458C6D1Ev,_ZThn56_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn112_N7S7458C6D0Ev,_ZThn56_N7S7458C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S7458C6D1Ev,_ZTvn4_n20_N7S7458C6D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C6D0Ev,_ZTvn4_n20_N7S7458C6D0Ev)();
static  VTBL_ENTRY vtc_S7458C6[] = {
  ABISELECT(224,132),
  ABISELECT(112,56),
  ABISELECT(56,28),
  ABISELECT(16,8),
  0,
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(8,4),
  ABISELECT(16,8),
  ABISELECT(50,26),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&_ZN7S7458C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C6D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(208,124),
  ABISELECT(24,12),
  ABISELECT(96,48),
  ABISELECT(-16,-8),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  ABISELECT(-40,-20),
  ABISELECT(-32,-16),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev),
  ABISELECT(-56,-28),
  0,
  ABISELECT(56,28),
  ABISELECT(-56,-28),
  ABISELECT(-6,-2),
  ABISELECT(-48,-24),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev),
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev),
  ABISELECT(-112,-56),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C6D1Ev,_ZTvn4_n20_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C6D0Ev,_ZTvn4_n20_N7S7458C6D0Ev),
  ABISELECT(-128,-64),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
};
extern VTBL_ENTRY _ZTV7S7458C6[];
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C6[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void _ZN7S7458C7D1Ev();
extern void _ZN7S7458C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C7__7S7458C6[] = {
  ABISELECT(208,124),
  ABISELECT(24,12),
  ABISELECT(96,48),
  ABISELECT(-16,-8),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&_ZN7S7458C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C7D0Ev,
};
extern void _ZN8S7458C11D1Ev();
extern void _ZN8S7458C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C117S7458C7__7S7458C6[] = {
  ABISELECT(96,48),
  ABISELECT(-16,-8),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C11D0Ev,
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn40_N8S7458C11D1Ev,_ZThn20_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn40_N8S7458C11D0Ev,_ZThn20_N8S7458C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__8S7458C117S7458C7__7S7458C6[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(56,28),
  ABISELECT(-56,-28),
  ABISELECT(-6,-2),
  ABISELECT(-48,-24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C117S7458C7__7S7458C6[] = {
  ABISELECT(50,26),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn96_N8S7458C11D1Ev,_ZThn48_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn96_N8S7458C11D0Ev,_ZThn48_N8S7458C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C117S7458C7__7S7458C6[] = {
  ABISELECT(-96,-48),
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C117S7458C7__7S7458C6[] = {
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A2__8S7458C117S7458C7__7S7458C6[] = {
  ABISELECT(-128,-64),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C27S7458C7__7S7458C6[] = {
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C27S7458C7__7S7458C6[] = {
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7458C7D1Ev,_ZThn12_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7458C7D0Ev,_ZThn12_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C7__7S7458C6[] = {
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__7S7458C7__7S7458C6[] = {
  ABISELECT(50,26),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S7458C7D1Ev,_ZThn20_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S7458C7D0Ev,_ZThn20_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C7__7S7458C6[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(56,28),
  ABISELECT(-56,-28),
  ABISELECT(-6,-2),
  ABISELECT(-48,-24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn96_N7S7458C7D1Ev,_ZThn48_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn96_N7S7458C7D0Ev,_ZThn48_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C7__7S7458C6[] = {
  ABISELECT(-96,-48),
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7458C7D1Ev,_ZTvn4_n20_N7S7458C7D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C7D0Ev,_ZTvn4_n20_N7S7458C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C7__7S7458C6[] = {
  ABISELECT(-112,-56),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C7D1Ev,_ZTvn4_n20_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C7D0Ev,_ZTvn4_n20_N7S7458C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C7__7S7458C6[] = {
  ABISELECT(-128,-64),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C2__7S7458C7__7S7458C6[] = {
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C6[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C8__A1__7S7458C6[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__7S7458C6[] = {
  ABISELECT(50,26),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C12__7S7458C6[] = {
  0,
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C12[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void _ZN8S7458C13D1Ev();
extern void _ZN8S7458C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C6[] = {
  ABISELECT(56,28),
  ABISELECT(-56,-28),
  ABISELECT(-6,-2),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C13__A4__7S7458C6[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C13__7S7458C6[] = {
  ABISELECT(50,26),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZThn56_N8S7458C13D1Ev,_ZThn28_N8S7458C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev)();
extern void ABISELECT(_ZThn56_N8S7458C13D0Ev,_ZThn28_N8S7458C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C13__7S7458C6[] = {
  ABISELECT(-56,-28),
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C13__7S7458C6[] = {
  ABISELECT(-112,-56),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A1__8S7458C13__7S7458C6[] = {
  ABISELECT(-128,-64),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void _ZN8S7458C14D1Ev();
extern void _ZN8S7458C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C6[] = {
  ABISELECT(-104,-52),
  ABISELECT(-62,-30),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&_ZN8S7458C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7458C108S7458C14__A1__7S7458C6[] = {
  ABISELECT(-62,-30),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C6[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C88S7458C14__A2__7S7458C6[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C6[] = {
  ABISELECT(-128,-64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C8__8S7458C14__7S7458C6[] = {
  ABISELECT(-112,-56),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__8S7458C14__7S7458C6[] = {
  ABISELECT(-128,-64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
};
static  VTT_ENTRY vtt_S7458C6[] = {
  {&(_ZTV7S7458C6[12]),  12,64},
  {&(_ZTV7S7458C6[26]),  26,64},
  {&(_ZTV7S7458C6[26]),  26,64},
  {&(_ZTV7S7458C6[36]),  36,64},
  {&(_ZTV7S7458C6[12]),  12,64},
  {&(_ZTV7S7458C6[26]),  26,64},
  {&(_ZTV7S7458C6[46]),  46,64},
  {&(_ZTV7S7458C6[54]),  54,64},
  {&(_ZTV7S7458C6[59]),  59,64},
  {&(_ZTV7S7458C6[64]),  64,64},
  {&(_ZTV7S7458C6[32]),  32,64},
  {&(_tg__ZTV7S7458C4__7S7458C6[3]),  3,3},
  {&(_tg__ZTV7S7458C7__7S7458C6[11]),  11,13},
  {&(_tg__ZTV8S7458C117S7458C7__7S7458C6[9]),  9,11},
  {&(_tg__ZTV8S7458C117S7458C7__7S7458C6[9]),  9,11},
  {&(_tg__ZTV8S7458C117S7458C7__7S7458C6[9]),  9,11},
  {&(_tg__ZTV8S7458C13__8S7458C117S7458C7__7S7458C6[8]),  8,11},
  {&(_tg__ZTV8S7458C10__8S7458C117S7458C7__7S7458C6[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C117S7458C7__7S7458C6[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C117S7458C7__7S7458C6[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A2__8S7458C117S7458C7__7S7458C6[3]),  3,3},
  {&(_tg__ZTV7S7458C27S7458C7__7S7458C6[4]),  4,4},
  {&(_tg__ZTV7S7458C4__7S7458C27S7458C7__7S7458C6[3]),  3,3},
  {&(_tg__ZTV7S7458C8__7S7458C7__7S7458C6[4]),  4,6},
  {&(_tg__ZTV8S7458C10__7S7458C7__7S7458C6[3]),  3,3},
  {&(_tg__ZTV7S7458C7__7S7458C6[11]),  11,13},
  {&(_tg__ZTV7S7458C7__7S7458C6[11]),  11,13},
  {&(_tg__ZTV8S7458C13__7S7458C7__7S7458C6[8]),  8,11},
  {&(_tg__ZTV8S7458C14__7S7458C7__7S7458C6[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C7__7S7458C6[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C7__7S7458C6[3]),  3,3},
  {&(_tg__ZTV7S7458C2__7S7458C7__7S7458C6[4]),  4,4},
  {&(_tg__ZTV7S7458C8__7S7458C6[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C8__A1__7S7458C6[3]),  3,3},
  {&(_tg__ZTV8S7458C10__7S7458C6[3]),  3,3},
  {&(_tg__ZTV8S7458C12__7S7458C6[4]),  4,4},
  {&(_tg__ZTV8S7458C12__7S7458C6[4]),  4,4},
  {&(_tg__ZTV8S7458C13__7S7458C6[6]),  6,9},
  {&(_tg__ZTV7S7458C48S7458C13__A4__7S7458C6[3]),  3,3},
  {&(_tg__ZTV8S7458C10__8S7458C13__7S7458C6[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C13__7S7458C6[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C13__7S7458C6[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A1__8S7458C13__7S7458C6[3]),  3,3},
  {&(_tg__ZTV8S7458C14__7S7458C6[4]),  4,6},
  {&(_tg__ZTV8S7458C108S7458C14__A1__7S7458C6[3]),  3,3},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C6[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C88S7458C14__A2__7S7458C6[3]),  3,3},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C6[3]),  3,3},
  {&(_tg__ZTV7S7458C8__8S7458C14__7S7458C6[3]),  3,5},
  {&(_tg__ZTV7S7458C4__A1__8S7458C14__7S7458C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7458C6[];
extern  VTBL_ENTRY _ZTV7S7458C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C6[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7458C13D0Ev,_ZThn28_N8S7458C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7458C13D1Ev,_ZThn28_N8S7458C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7458C7D0Ev,_ZThn48_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7458C7D1Ev,_ZThn48_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C7D0Ev,_ZThn20_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C7D1Ev,_ZThn20_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C7D0Ev,_ZThn12_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C7D1Ev,_ZThn12_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7458C11D0Ev,_ZThn48_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S7458C11D1Ev,_ZThn48_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7458C11D0Ev,_ZThn20_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7458C11D1Ev,_ZThn20_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C6D0Ev,_ZThn56_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C6D1Ev,_ZThn56_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7458C6D0Ev,_ZThn28_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7458C6D1Ev,_ZThn28_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C6D0Ev,_ZThn20_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C6D1Ev,_ZThn20_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7458C6D0Ev,_ZThn8_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7458C6D1Ev,_ZThn8_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7458C6 = {  "S7458C6", // class name
  bases_S7458C6, 24,
  &(vtc_S7458C6[0]), // expected_vtbl_contents
  &(vtt_S7458C6[0]), // expected_vtt_contents
  ABISELECT(240,136), // object size
  NSPAIRA(_ZTI7S7458C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7458C6),64, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7458C6),50, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7458C5  : virtual S7458C6 {
  char s7458c5f0[10];
  ~S7458C5(); // tgen
  S7458C5(); // tgen
};
//SIG(-1 S7458C5) C1{ VBC2{ VBC3{ VBC4{ m Fs:13}} VBC5{ VBC6{ BC3 BC7{ BC4} vd} VBC8{ VBC7} BC9{ VBC4 VBC10{ VBC3} VBC11{ VBC7 VBC8 VBC12{ VBC4 VBC7 BC8 BC6 BC3 vd FD[5]} BC3 v1 FC13{ VBC14{ VBC4} VBC15{ VBC4} BC4 VBC16{ BC4} vd Fi}} vd Fi} BC17{ VBC4 VBC3} VBC18{ m}} BC18 vd} Fc[10]}


S7458C5 ::~S7458C5(){ note_dtor("S7458C5", this);} // tgen
S7458C5 ::S7458C5(){ note_ctor("S7458C5", this);} // tgen

static void Test_S7458C5()
{
  extern Class_Descriptor cd_S7458C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,37)];
    init_test(&cd_S7458C5, buf);
    S7458C5 *dp, &lv = *(dp=new (buf) S7458C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,144), "sizeof(S7458C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7458C5)");
    /*is_ambiguous_... S7458C5::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(18,14), "S7458C5");
    /*is_ambiguous_... S7458C5::S7458C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*), ABISELECT(18,14), "S7458C5");
    /*is_ambiguous_... S7458C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C11*)(S7458C7*), ABISELECT(18,14), "S7458C5");
    /*is_ambiguous_... S7458C14::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C14*), ABISELECT(18,14), "S7458C5");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(18,14), "S7458C5");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C14*), ABISELECT(18,14), "S7458C5");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C13*), ABISELECT(18,14), "S7458C5");
    check_base_class_offset(lv, (S19572C5*)(S7458C2*)(S7458C7*), ABISELECT(18,14), "S7458C5");
    /*is_ambiguous_... S7458C6::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C6*), ABISELECT(24,16), "S7458C5");
    check_base_class_offset(lv, (S7458C4*)(S7458C12*), ABISELECT(24,16), "S7458C5");
    check_base_class_offset(lv, (S7458C4*)(S7458C2*)(S7458C7*), ABISELECT(24,16), "S7458C5");
    /*is_ambiguous_... S7458C5::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C8*), ABISELECT(48,28), "S7458C5");
    /*is_ambiguous_... S7458C5::S7458C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*), ABISELECT(56,32), "S7458C5");
    /*is_ambiguous_... S7458C5::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C8*), ABISELECT(56,32), "S7458C5");
    /*is_ambiguous_... S7458C7::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C8*)(S7458C7*), ABISELECT(48,28), "S7458C5");
    /*is_ambiguous_... S7458C5::S7458C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(58,34), "S7458C5");
    /*is_ambiguous_... S7458C5::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C10*), ABISELECT(58,34), "S7458C5");
    /*is_ambiguous_... S7458C13::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C13*), ABISELECT(58,34), "S7458C5");
    /*is_ambiguous_... S7458C14::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C14*), ABISELECT(58,34), "S7458C5");
    check_base_class_offset(lv, (S7458C9*)(S7458C10*)(S7458C14*), ABISELECT(58,34), "S7458C5");
    /*is_ambiguous_... S7458C7::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*)(S7458C7*), 0, "S7458C5");
    /*is_ambiguous_... S7458C13::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*)(S7458C13*), 0, "S7458C5");
    check_base_class_offset(lv, (S7458C12*)(S7458C11*)(S7458C7*), ABISELECT(24,16), "S7458C5");
    check_base_class_offset(lv, (S7458C10*)(S7458C14*), ABISELECT(112,64), "S7458C5");
    check_base_class_offset(lv, (S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(120,68), "S7458C5");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(128,72), "S7458C5");
    check_base_class_offset(lv, (S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(128,72), "S7458C5");
    check_base_class_offset(lv, (S7458C8*)(S7458C14*), ABISELECT(120,68), "S7458C5");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C14*), ABISELECT(136,76), "S7458C5");
    check_base_class_offset(lv, (S7458C14*)(S7458C13*), ABISELECT(112,64), "S7458C5");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C13*), ABISELECT(64,36), "S7458C5");
    check_base_class_offset(lv, (S7458C13*)(S7458C11*)(S7458C7*), ABISELECT(64,36), "S7458C5");
    check_base_class_offset(lv, (S7458C11*)(S7458C7*), ABISELECT(24,16), "S7458C5");
    check_base_class_offset(lv, (S7458C2*)(S7458C7*), ABISELECT(40,24), "S7458C5");
    check_base_class_offset(lv, (S629C14*)(S7458C7*), ABISELECT(224,140), "S7458C5");
    check_base_class_offset(lv, (S7458C7*)(S7458C6*), ABISELECT(24,16), "S7458C5");
    /*is_ambiguous_... S7458C6::S629C14 */ AMB_check_base_class_offset(lv, (S629C14*)(S7458C6*), 0, "S7458C5");
    check_base_class_offset(lv, (S7458C6*), 0, "S7458C5");
    check_field_offset(lv, s7458c5f0, ABISELECT(8,4), "S7458C5.s7458c5f0");
    test_class_info(&lv, &cd_S7458C5);
    dp->~S7458C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C5(Test_S7458C5, "S7458C5", ABISELECT(240,144));

#else // __cplusplus

extern void _ZN7S7458C5C1Ev();
extern void _ZN7S7458C5D1Ev();
Name_Map name_map_S7458C5[] = {
  NSPAIR(_ZN7S7458C5C1Ev),
  NSPAIR(_ZN7S7458C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C12;
extern VTBL_ENTRY _ZTI8S7458C12[];
extern  VTBL_ENTRY _ZTV8S7458C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C12[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C14;
extern VTBL_ENTRY _ZTI8S7458C14[];
extern  VTBL_ENTRY _ZTV8S7458C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C14[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C13;
extern VTBL_ENTRY _ZTI8S7458C13[];
extern  VTBL_ENTRY _ZTV8S7458C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C13[];
extern Class_Descriptor cd_S7458C11;
extern VTBL_ENTRY _ZTI8S7458C11[];
extern  VTBL_ENTRY _ZTV8S7458C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C11[];
extern Class_Descriptor cd_S7458C2;
extern VTBL_ENTRY _ZTI7S7458C2[];
extern  VTBL_ENTRY _ZTV7S7458C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C2[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S7458C7;
extern VTBL_ENTRY _ZTI7S7458C7[];
extern  VTBL_ENTRY _ZTV7S7458C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C7[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S7458C6;
extern VTBL_ENTRY _ZTI7S7458C6[];
extern  VTBL_ENTRY _ZTV7S7458C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C6[];
static Base_Class bases_S7458C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(18,14), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7458C4,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7458C4,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    4, //immediately_derived
  0, 0},
  {&cd_S7458C9,    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
    5, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(48,28), //bcp->offset
    34, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(58,34), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7458C9,    ABISELECT(58,34), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7458C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7458C12,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7458C10,    ABISELECT(112,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(120,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7458C9,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7458C8,    ABISELECT(120,68), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(136,76), //bcp->offset
    63, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7458C14,    ABISELECT(112,64), //bcp->offset
    51, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S7458C4,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S7458C13,    ABISELECT(64,36), //bcp->offset
    40, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7458C11,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S7458C2,    ABISELECT(40,24), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S629C14,    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
    -1, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S7458C7,    ABISELECT(24,16), //bcp->offset
    16, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7458C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7458C5[];
extern void _ZN7S7458C5D1Ev();
extern void _ZN7S7458C5D0Ev();
extern void ABISELECT(_ZTv0_n96_N7S7458C5D1Ev,_ZTv0_n48_N7S7458C5D1Ev)();
extern void ABISELECT(_ZThn24_N7S7458C5D1Ev,_ZThn16_N7S7458C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7458C5D0Ev,_ZTv0_n48_N7S7458C5D0Ev)();
extern void ABISELECT(_ZThn24_N7S7458C5D0Ev,_ZThn16_N7S7458C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C5D1Ev,_ZTv0_n16_N7S7458C5D1Ev)();
extern void ABISELECT(_ZThn48_N7S7458C5D1Ev,_ZThn28_N7S7458C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C5D0Ev,_ZTv0_n16_N7S7458C5D0Ev)();
extern void ABISELECT(_ZThn48_N7S7458C5D0Ev,_ZThn28_N7S7458C5D0Ev)() __attribute__((weak));
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C5D1Ev,_ZTv0_n32_N7S7458C5D1Ev)();
extern void ABISELECT(_ZThn64_N7S7458C5D1Ev,_ZThn36_N7S7458C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C5D0Ev,_ZTv0_n32_N7S7458C5D0Ev)();
extern void ABISELECT(_ZThn64_N7S7458C5D0Ev,_ZThn36_N7S7458C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C5D1Ev,_ZTv0_n20_N7S7458C5D1Ev)();
extern void ABISELECT(_ZThn112_N7S7458C5D1Ev,_ZThn64_N7S7458C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C5D0Ev,_ZTv0_n20_N7S7458C5D0Ev)();
extern void ABISELECT(_ZThn112_N7S7458C5D0Ev,_ZThn64_N7S7458C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S7458C5D1Ev,_ZTvn4_n20_N7S7458C5D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C5D0Ev,_ZTvn4_n20_N7S7458C5D0Ev)();
static  VTBL_ENTRY vtc_S7458C5[] = {
  0,
  0,
  ABISELECT(224,140),
  ABISELECT(112,64),
  ABISELECT(64,36),
  ABISELECT(24,16),
  0,
  ABISELECT(48,28),
  ABISELECT(24,16),
  ABISELECT(18,14),
  ABISELECT(24,16),
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&_ZN7S7458C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C5D0Ev,
  ABISELECT(-24,-16),
  ABISELECT(200,124),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-6,-2),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C5D1Ev,_ZTv0_n48_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C5D0Ev,_ZTv0_n48_N7S7458C5D0Ev),
  ABISELECT(-16,-8),
  ABISELECT(-22,-10),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  ABISELECT(-48,-28),
  ABISELECT(-30,-14),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C5D1Ev,_ZTv0_n16_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C5D0Ev,_ZTv0_n16_N7S7458C5D0Ev),
  ABISELECT(-64,-36),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-46,-22),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C5D1Ev,_ZTv0_n32_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C5D0Ev,_ZTv0_n32_N7S7458C5D0Ev),
  ABISELECT(-112,-64),
  ABISELECT(-94,-50),
  ABISELECT(-54,-30),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C5D1Ev,_ZTv0_n20_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C5D0Ev,_ZTv0_n20_N7S7458C5D0Ev),
  ABISELECT(-102,-54),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C5D1Ev,_ZTvn4_n20_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C5D0Ev,_ZTvn4_n20_N7S7458C5D0Ev),
  ABISELECT(-118,-62),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
};
extern VTBL_ENTRY _ZTV7S7458C5[];
extern void _ZN7S7458C6D1Ev();
extern void _ZN7S7458C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C6__7S7458C5[] = {
  ABISELECT(224,140),
  ABISELECT(112,64),
  ABISELECT(64,36),
  ABISELECT(24,16),
  0,
  ABISELECT(48,28),
  ABISELECT(24,16),
  ABISELECT(18,14),
  ABISELECT(24,16),
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&_ZN7S7458C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C6D0Ev,
};
extern void ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn24_N7S7458C6D1Ev,_ZThn16_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn24_N7S7458C6D0Ev,_ZThn16_N7S7458C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C7__7S7458C6__7S7458C5[] = {
  ABISELECT(-24,-16),
  ABISELECT(200,124),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-6,-2),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S7458C6D1Ev,_ZThn28_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn48_N7S7458C6D0Ev,_ZThn28_N7S7458C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C6__7S7458C5[] = {
  ABISELECT(-48,-28),
  ABISELECT(-30,-14),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev),
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn64_N7S7458C6D1Ev,_ZThn36_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn64_N7S7458C6D0Ev,_ZThn36_N7S7458C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C6__7S7458C5[] = {
  ABISELECT(-64,-36),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-46,-22),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn112_N7S7458C6D1Ev,_ZThn64_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn112_N7S7458C6D0Ev,_ZThn64_N7S7458C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C6__7S7458C5[] = {
  ABISELECT(-112,-64),
  ABISELECT(-94,-50),
  ABISELECT(-54,-30),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7458C6D1Ev,_ZTvn4_n20_N7S7458C6D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C6D0Ev,_ZTvn4_n20_N7S7458C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C6__7S7458C5[] = {
  ABISELECT(-102,-54),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C6D1Ev,_ZTvn4_n20_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C6D0Ev,_ZTvn4_n20_N7S7458C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C6__7S7458C5[] = {
  ABISELECT(-118,-62),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C27S7458C7__7S7458C6__7S7458C5[] = {
  ABISELECT(-16,-8),
  ABISELECT(-22,-10),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C5[] = {
  ABISELECT(-6,-2),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void _ZN7S7458C7D1Ev();
extern void _ZN7S7458C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C7__7S7458C5[] = {
  ABISELECT(200,124),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-6,-2),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&_ZN7S7458C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C7D0Ev,
};
extern void _ZN8S7458C11D1Ev();
extern void _ZN8S7458C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C117S7458C7__7S7458C5[] = {
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  0,
  ABISELECT(-6,-2),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C11D0Ev,
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn40_N8S7458C11D1Ev,_ZThn20_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn40_N8S7458C11D0Ev,_ZThn20_N8S7458C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__8S7458C117S7458C7__7S7458C5[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-46,-22),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C117S7458C7__7S7458C5[] = {
  ABISELECT(58,34),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn88_N8S7458C11D1Ev,_ZThn48_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn88_N8S7458C11D0Ev,_ZThn48_N8S7458C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C117S7458C7__7S7458C5[] = {
  ABISELECT(-88,-48),
  ABISELECT(-94,-50),
  ABISELECT(-54,-30),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C117S7458C7__7S7458C5[] = {
  ABISELECT(-102,-54),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A2__8S7458C117S7458C7__7S7458C5[] = {
  ABISELECT(-118,-62),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C27S7458C7__7S7458C5[] = {
  ABISELECT(-16,-8),
  ABISELECT(-22,-10),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C27S7458C7__7S7458C5[] = {
  ABISELECT(-6,-2),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7458C7D1Ev,_ZThn12_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7458C7D0Ev,_ZThn12_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C7__7S7458C5[] = {
  ABISELECT(-24,-12),
  ABISELECT(-30,-14),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__7S7458C7__7S7458C5[] = {
  ABISELECT(58,34),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S7458C7D1Ev,_ZThn20_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S7458C7D0Ev,_ZThn20_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C7__7S7458C5[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-46,-22),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn88_N7S7458C7D1Ev,_ZThn48_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn88_N7S7458C7D0Ev,_ZThn48_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C7__7S7458C5[] = {
  ABISELECT(-88,-48),
  ABISELECT(-94,-50),
  ABISELECT(-54,-30),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7458C7D1Ev,_ZTvn4_n20_N7S7458C7D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C7D0Ev,_ZTvn4_n20_N7S7458C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C7__7S7458C5[] = {
  ABISELECT(-102,-54),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C7D1Ev,_ZTvn4_n20_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C7D0Ev,_ZTvn4_n20_N7S7458C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C7__7S7458C5[] = {
  ABISELECT(-118,-62),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C2__7S7458C7__7S7458C5[] = {
  ABISELECT(-16,-8),
  ABISELECT(-22,-10),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C5[] = {
  ABISELECT(-30,-14),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C8__A1__7S7458C5[] = {
  ABISELECT(-30,-14),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__7S7458C5[] = {
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C12__7S7458C5[] = {
  0,
  ABISELECT(-6,-2),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C12[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void _ZN8S7458C13D1Ev();
extern void _ZN8S7458C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C5[] = {
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-46,-22),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C13__A4__7S7458C5[] = {
  ABISELECT(-46,-22),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C13__7S7458C5[] = {
  ABISELECT(58,34),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZThn48_N8S7458C13D1Ev,_ZThn28_N8S7458C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev)();
extern void ABISELECT(_ZThn48_N8S7458C13D0Ev,_ZThn28_N8S7458C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C13__7S7458C5[] = {
  ABISELECT(-48,-28),
  ABISELECT(-94,-50),
  ABISELECT(-54,-30),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C13__7S7458C5[] = {
  ABISELECT(-102,-54),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A1__8S7458C13__7S7458C5[] = {
  ABISELECT(-118,-62),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void _ZN8S7458C14D1Ev();
extern void _ZN8S7458C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C5[] = {
  ABISELECT(-94,-50),
  ABISELECT(-54,-30),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&_ZN8S7458C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7458C108S7458C14__A1__7S7458C5[] = {
  ABISELECT(-54,-30),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C5[] = {
  ABISELECT(-102,-54),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C88S7458C14__A2__7S7458C5[] = {
  ABISELECT(-102,-54),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C5[] = {
  ABISELECT(-118,-62),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C8__8S7458C14__7S7458C5[] = {
  ABISELECT(-102,-54),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__8S7458C14__7S7458C5[] = {
  ABISELECT(-118,-62),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
};
static  VTT_ENTRY vtt_S7458C5[] = {
  {&(_ZTV7S7458C5[14]),  14,66},
  {&(_ZTV7S7458C5[14]),  14,66},
  {&(_ZTV7S7458C5[28]),  28,66},
  {&(_ZTV7S7458C5[28]),  28,66},
  {&(_ZTV7S7458C5[38]),  38,66},
  {&(_ZTV7S7458C5[14]),  14,66},
  {&(_ZTV7S7458C5[28]),  28,66},
  {&(_ZTV7S7458C5[48]),  48,66},
  {&(_ZTV7S7458C5[56]),  56,66},
  {&(_ZTV7S7458C5[61]),  61,66},
  {&(_ZTV7S7458C5[66]),  66,66},
  {&(_ZTV7S7458C5[34]),  34,66},
  {&(_tg__ZTV7S7458C6__7S7458C5[12]),  12,14},
  {&(_tg__ZTV7S7458C7__7S7458C6__7S7458C5[12]),  12,14},
  {&(_tg__ZTV7S7458C7__7S7458C6__7S7458C5[12]),  12,14},
  {&(_tg__ZTV7S7458C8__7S7458C6__7S7458C5[4]),  4,6},
  {&(_tg__ZTV7S7458C6__7S7458C5[12]),  12,14},
  {&(_tg__ZTV7S7458C7__7S7458C6__7S7458C5[12]),  12,14},
  {&(_tg__ZTV8S7458C13__7S7458C6__7S7458C5[8]),  8,11},
  {&(_tg__ZTV8S7458C14__7S7458C6__7S7458C5[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C6__7S7458C5[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C6__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C27S7458C7__7S7458C6__7S7458C5[4]),  4,4},
  {&(_tg__ZTV7S7458C4__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C7__7S7458C5[11]),  11,13},
  {&(_tg__ZTV8S7458C117S7458C7__7S7458C5[9]),  9,11},
  {&(_tg__ZTV8S7458C117S7458C7__7S7458C5[9]),  9,11},
  {&(_tg__ZTV8S7458C117S7458C7__7S7458C5[9]),  9,11},
  {&(_tg__ZTV8S7458C13__8S7458C117S7458C7__7S7458C5[8]),  8,11},
  {&(_tg__ZTV8S7458C10__8S7458C117S7458C7__7S7458C5[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C117S7458C7__7S7458C5[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C117S7458C7__7S7458C5[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A2__8S7458C117S7458C7__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C27S7458C7__7S7458C5[4]),  4,4},
  {&(_tg__ZTV7S7458C4__7S7458C27S7458C7__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C8__7S7458C7__7S7458C5[4]),  4,6},
  {&(_tg__ZTV8S7458C10__7S7458C7__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C7__7S7458C5[11]),  11,13},
  {&(_tg__ZTV7S7458C7__7S7458C5[11]),  11,13},
  {&(_tg__ZTV8S7458C13__7S7458C7__7S7458C5[8]),  8,11},
  {&(_tg__ZTV8S7458C14__7S7458C7__7S7458C5[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C7__7S7458C5[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C7__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C2__7S7458C7__7S7458C5[4]),  4,4},
  {&(_tg__ZTV7S7458C8__7S7458C5[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C8__A1__7S7458C5[3]),  3,3},
  {&(_tg__ZTV8S7458C10__7S7458C5[3]),  3,3},
  {&(_tg__ZTV8S7458C12__7S7458C5[4]),  4,4},
  {&(_tg__ZTV8S7458C12__7S7458C5[4]),  4,4},
  {&(_tg__ZTV8S7458C13__7S7458C5[6]),  6,9},
  {&(_tg__ZTV7S7458C48S7458C13__A4__7S7458C5[3]),  3,3},
  {&(_tg__ZTV8S7458C10__8S7458C13__7S7458C5[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C13__7S7458C5[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C13__7S7458C5[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A1__8S7458C13__7S7458C5[3]),  3,3},
  {&(_tg__ZTV8S7458C14__7S7458C5[4]),  4,6},
  {&(_tg__ZTV8S7458C108S7458C14__A1__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C5[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C88S7458C14__A2__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C5[3]),  3,3},
  {&(_tg__ZTV7S7458C8__8S7458C14__7S7458C5[3]),  3,5},
  {&(_tg__ZTV7S7458C4__A1__8S7458C14__7S7458C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7458C5[];
extern  VTBL_ENTRY _ZTV7S7458C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C5[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7458C13D0Ev,_ZThn28_N8S7458C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7458C13D1Ev,_ZThn28_N8S7458C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7458C7D0Ev,_ZThn48_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7458C7D1Ev,_ZThn48_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C7D0Ev,_ZThn20_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C7D1Ev,_ZThn20_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C7D0Ev,_ZThn12_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C7D1Ev,_ZThn12_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7458C11D0Ev,_ZThn48_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7458C11D1Ev,_ZThn48_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7458C11D0Ev,_ZThn20_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7458C11D1Ev,_ZThn20_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C6D0Ev,_ZThn64_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C6D1Ev,_ZThn64_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C6D0Ev,_ZThn36_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C6D1Ev,_ZThn36_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7458C6D0Ev,_ZThn28_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7458C6D1Ev,_ZThn28_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C6D0Ev,_ZThn16_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C6D1Ev,_ZThn16_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C5D0Ev,_ZTv0_n20_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C5D0Ev,_ZThn64_N7S7458C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C5D1Ev,_ZTv0_n20_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C5D1Ev,_ZThn64_N7S7458C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C5D0Ev,_ZTv0_n32_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C5D0Ev,_ZThn36_N7S7458C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C5D1Ev,_ZTv0_n32_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C5D1Ev,_ZThn36_N7S7458C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C5D0Ev,_ZTv0_n16_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7458C5D0Ev,_ZThn28_N7S7458C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C5D1Ev,_ZTv0_n16_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7458C5D1Ev,_ZThn28_N7S7458C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C5D0Ev,_ZTv0_n48_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C5D0Ev,_ZThn16_N7S7458C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C5D1Ev,_ZTv0_n48_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C5D1Ev,_ZThn16_N7S7458C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7458C5 = {  "S7458C5", // class name
  bases_S7458C5, 25,
  &(vtc_S7458C5[0]), // expected_vtbl_contents
  &(vtt_S7458C5[0]), // expected_vtt_contents
  ABISELECT(240,144), // object size
  NSPAIRA(_ZTI7S7458C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7458C5),66, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7458C5),62, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7458C1  : S7458C2 , virtual S7458C5 {
  ::S629C8_nt s7458c1f0;
  ~S7458C1(); // tgen
  S7458C1(); // tgen
};
//SIG(1 S7458C1) C1{ BC2{ VBC3{ m Fs:13} VBC4{ VBC3}} VBC5{ VBC6{ VBC4 VBC7{ VBC8{ BC4 BC9{ BC3} vd} VBC10{ VBC9} BC11{ VBC3 VBC12{ VBC4} VBC13{ VBC9 VBC10 VBC14{ VBC3 VBC9 BC10 BC8 BC4 vd FD[5]} BC4 v1 FC15{ VBC16{ VBC3} VBC17{ VBC3} BC3 VBC18{ BC3} vd Fi}} vd Fi} BC2 VBC19{ m}} BC19 vd} Fc[10]} FC20{ m}}


S7458C1 ::~S7458C1(){ note_dtor("S7458C1", this);} // tgen
S7458C1 ::S7458C1(){ note_ctor("S7458C1", this);} // tgen

static void Test_S7458C1()
{
  extern Class_Descriptor cd_S7458C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,38)];
    init_test(&cd_S7458C1, buf);
    S7458C1 *dp, &lv = *(dp=new (buf) S7458C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,148), "sizeof(S7458C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7458C1)");
    /*is_ambiguous_... S7458C1::S7458C2 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C2*), ABISELECT(10,6), "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*), ABISELECT(10,6), "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*), ABISELECT(10,6), "S7458C1");
    /*is_ambiguous_... S7458C11::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C11*)(S7458C7*), ABISELECT(10,6), "S7458C1");
    /*is_ambiguous_... S7458C14::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C14*), ABISELECT(10,6), "S7458C1");
    check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(10,6), "S7458C1");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C14*), ABISELECT(10,6), "S7458C1");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C4*)(S7458C13*), ABISELECT(10,6), "S7458C1");
    check_base_class_offset(lv, (S19572C5*)(S7458C2*)(S7458C7*), ABISELECT(10,6), "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C2 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C2*), 0, "S7458C1");
    /*is_ambiguous_... S7458C6::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C6*), 0, "S7458C1");
    check_base_class_offset(lv, (S7458C4*)(S7458C12*), 0, "S7458C1");
    check_base_class_offset(lv, (S7458C4*)(S7458C2*)(S7458C7*), 0, "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C2 */ AMB_check_base_class_offset(lv, (S7458C2*), 0, "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C8*), ABISELECT(64,36), "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*), ABISELECT(72,40), "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C8*), ABISELECT(72,40), "S7458C1");
    /*is_ambiguous_... S7458C7::S7458C8 */ AMB_check_base_class_offset(lv, (S7458C8*)(S7458C7*), ABISELECT(64,36), "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7458C9*), ABISELECT(74,42), "S7458C1");
    /*is_ambiguous_... S7458C1::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C10*), ABISELECT(74,42), "S7458C1");
    /*is_ambiguous_... S7458C13::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C13*), ABISELECT(74,42), "S7458C1");
    /*is_ambiguous_... S7458C14::S7458C9 */ AMB_check_base_class_offset(lv, (S7458C9*)(S7458C14*), ABISELECT(74,42), "S7458C1");
    check_base_class_offset(lv, (S7458C9*)(S7458C10*)(S7458C14*), ABISELECT(74,42), "S7458C1");
    /*is_ambiguous_... S7458C7::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*)(S7458C7*), ABISELECT(16,8), "S7458C1");
    /*is_ambiguous_... S7458C13::S7458C10 */ AMB_check_base_class_offset(lv, (S7458C10*)(S7458C13*), ABISELECT(16,8), "S7458C1");
    check_base_class_offset(lv, (S7458C12*)(S7458C11*)(S7458C7*), ABISELECT(40,24), "S7458C1");
    check_base_class_offset(lv, (S7458C10*)(S7458C14*), ABISELECT(128,72), "S7458C1");
    check_base_class_offset(lv, (S7458C4*)(S7458C8*)(S7458C14*), ABISELECT(136,76), "S7458C1");
    check_base_class_offset(lv, (S19572C5*)(S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(144,80), "S7458C1");
    check_base_class_offset(lv, (S7458C9*)(S7458C8*)(S7458C14*), ABISELECT(144,80), "S7458C1");
    check_base_class_offset(lv, (S7458C8*)(S7458C14*), ABISELECT(136,76), "S7458C1");
    /*is_ambiguous_... S7458C14::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C14*), ABISELECT(152,84), "S7458C1");
    check_base_class_offset(lv, (S7458C14*)(S7458C13*), ABISELECT(128,72), "S7458C1");
    /*is_ambiguous_... S7458C13::S7458C4 */ AMB_check_base_class_offset(lv, (S7458C4*)(S7458C13*), ABISELECT(80,44), "S7458C1");
    check_base_class_offset(lv, (S7458C13*)(S7458C11*)(S7458C7*), ABISELECT(80,44), "S7458C1");
    check_base_class_offset(lv, (S7458C11*)(S7458C7*), ABISELECT(40,24), "S7458C1");
    check_base_class_offset(lv, (S7458C2*)(S7458C7*), ABISELECT(56,32), "S7458C1");
    check_base_class_offset(lv, (S629C14*)(S7458C7*), 0, "S7458C1");
    check_base_class_offset(lv, (S7458C7*)(S7458C6*), ABISELECT(40,24), "S7458C1");
    /*is_ambiguous_... S7458C6::S629C14 */ AMB_check_base_class_offset(lv, (S629C14*)(S7458C6*), ABISELECT(16,8), "S7458C1");
    check_base_class_offset(lv, (S7458C6*)(S7458C5*), ABISELECT(16,8), "S7458C1");
    check_base_class_offset(lv, (S7458C5*), ABISELECT(16,8), "S7458C1");
    check_field_offset(lv, s7458c1f0, ABISELECT(8,4), "S7458C1.s7458c1f0");
    test_class_info(&lv, &cd_S7458C1);
    dp->~S7458C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7458C1(Test_S7458C1, "S7458C1", ABISELECT(240,148));

#else // __cplusplus

extern void _ZN7S7458C1C1Ev();
extern void _ZN7S7458C1D1Ev();
Name_Map name_map_S7458C1[] = {
  NSPAIR(_ZN7S7458C1C1Ev),
  NSPAIR(_ZN7S7458C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C2;
extern VTBL_ENTRY _ZTI7S7458C2[];
extern  VTBL_ENTRY _ZTV7S7458C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C2[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C12;
extern VTBL_ENTRY _ZTI8S7458C12[];
extern  VTBL_ENTRY _ZTV8S7458C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C12[];
extern Class_Descriptor cd_S7458C10;
extern VTBL_ENTRY _ZTI8S7458C10[];
extern  VTBL_ENTRY _ZTV8S7458C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C10[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7458C9;
extern VTBL_ENTRY _ZTI7S7458C9[];
extern Class_Descriptor cd_S7458C8;
extern VTBL_ENTRY _ZTI7S7458C8[];
extern  VTBL_ENTRY _ZTV7S7458C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C8[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C14;
extern VTBL_ENTRY _ZTI8S7458C14[];
extern  VTBL_ENTRY _ZTV8S7458C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C14[];
extern Class_Descriptor cd_S7458C4;
extern VTBL_ENTRY _ZTI7S7458C4[];
extern  VTBL_ENTRY _ZTV7S7458C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C4[];
extern Class_Descriptor cd_S7458C13;
extern VTBL_ENTRY _ZTI8S7458C13[];
extern  VTBL_ENTRY _ZTV8S7458C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C13[];
extern Class_Descriptor cd_S7458C11;
extern VTBL_ENTRY _ZTI8S7458C11[];
extern  VTBL_ENTRY _ZTV8S7458C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7458C11[];
extern Class_Descriptor cd_S7458C2;
extern VTBL_ENTRY _ZTI7S7458C2[];
extern  VTBL_ENTRY _ZTV7S7458C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C2[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S7458C7;
extern VTBL_ENTRY _ZTI7S7458C7[];
extern  VTBL_ENTRY _ZTV7S7458C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C7[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S7458C6;
extern VTBL_ENTRY _ZTI7S7458C6[];
extern  VTBL_ENTRY _ZTV7S7458C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C6[];
extern Class_Descriptor cd_S7458C5;
extern VTBL_ENTRY _ZTI7S7458C5[];
extern  VTBL_ENTRY _ZTV7S7458C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C5[];
static Base_Class bases_S7458C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7458C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7458C2,    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
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7458C4,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    -1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7458C9,    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
    -1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(64,36), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(74,42), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7458C9,    ABISELECT(74,42), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7458C10,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7458C12,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7458C10,    ABISELECT(128,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(136,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(144,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
    -1, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7458C9,    ABISELECT(144,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
    -1, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7458C8,    ABISELECT(136,76), //bcp->offset
    74, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7458C4,    ABISELECT(152,84), //bcp->offset
    79, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7458C14,    ABISELECT(128,72), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7458C4,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S7458C13,    ABISELECT(80,44), //bcp->offset
    56, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S7458C11,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7458C2,    ABISELECT(56,32), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7458C7,    ABISELECT(40,24), //bcp->offset
    32, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S629C14,    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
    25, //immediately_derived
  0, 0},
  {&cd_S7458C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S7458C5,    ABISELECT(16,8), //bcp->offset
    16, //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
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7458C1[];
extern void _ZN7S7458C1D1Ev();
extern void _ZN7S7458C1D0Ev();
extern void ABISELECT(_ZTv0_n104_N7S7458C1D1Ev,_ZTv0_n52_N7S7458C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7458C1D1Ev,_ZThn8_N7S7458C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7458C1D0Ev,_ZTv0_n52_N7S7458C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S7458C1D0Ev,_ZThn8_N7S7458C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7458C1D1Ev,_ZTv0_n48_N7S7458C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S7458C1D1Ev,_ZThn24_N7S7458C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7458C1D0Ev,_ZTv0_n48_N7S7458C1D0Ev)();
extern void ABISELECT(_ZThn40_N7S7458C1D0Ev,_ZThn24_N7S7458C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C1D1Ev,_ZTv0_n16_N7S7458C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7458C1D1Ev,_ZThn36_N7S7458C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C1D0Ev,_ZTv0_n16_N7S7458C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S7458C1D0Ev,_ZThn36_N7S7458C1D0Ev)() __attribute__((weak));
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C1D1Ev,_ZTv0_n32_N7S7458C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S7458C1D1Ev,_ZThn44_N7S7458C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C1D0Ev,_ZTv0_n32_N7S7458C1D0Ev)();
extern void ABISELECT(_ZThn80_N7S7458C1D0Ev,_ZThn44_N7S7458C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C1D1Ev,_ZTv0_n20_N7S7458C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S7458C1D1Ev,_ZThn72_N7S7458C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C1D0Ev,_ZTv0_n20_N7S7458C1D0Ev)();
extern void ABISELECT(_ZThn128_N7S7458C1D0Ev,_ZThn72_N7S7458C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S7458C1D1Ev,_ZTvn4_n20_N7S7458C1D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C1D0Ev,_ZTvn4_n20_N7S7458C1D0Ev)();
static  VTBL_ENTRY vtc_S7458C1[] = {
  0,
  ABISELECT(128,72),
  ABISELECT(80,44),
  ABISELECT(40,24),
  ABISELECT(74,42),
  ABISELECT(16,8),
  ABISELECT(64,36),
  ABISELECT(40,24),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
  (VTBL_ENTRY)&_ZN7S7458C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C1D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(112,64),
  ABISELECT(64,36),
  ABISELECT(24,16),
  0,
  ABISELECT(48,28),
  ABISELECT(24,16),
  ABISELECT(-6,-2),
  ABISELECT(-16,-8),
  ABISELECT(58,34),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7458C1D1Ev,_ZTv0_n52_N7S7458C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7458C1D0Ev,_ZTv0_n52_N7S7458C1D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-30,-18),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C1D1Ev,_ZTv0_n48_N7S7458C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C1D0Ev,_ZTv0_n48_N7S7458C1D0Ev),
  ABISELECT(-56,-32),
  ABISELECT(-46,-26),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
  ABISELECT(-64,-36),
  ABISELECT(-54,-30),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C1D1Ev,_ZTv0_n16_N7S7458C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C1D0Ev,_ZTv0_n16_N7S7458C1D0Ev),
  ABISELECT(-80,-44),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-70,-38),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C1D1Ev,_ZTv0_n32_N7S7458C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C1D0Ev,_ZTv0_n32_N7S7458C1D0Ev),
  ABISELECT(-128,-72),
  ABISELECT(-118,-66),
  ABISELECT(-54,-30),
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C1D1Ev,_ZTv0_n20_N7S7458C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C1D0Ev,_ZTv0_n20_N7S7458C1D0Ev),
  ABISELECT(-126,-70),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C1D1Ev,_ZTvn4_n20_N7S7458C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C1D0Ev,_ZTvn4_n20_N7S7458C1D0Ev),
  ABISELECT(-142,-78),
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI7S7458C1[0]),
};
extern VTBL_ENTRY _ZTV7S7458C1[];
static  VTBL_ENTRY _tg__ZTV7S7458C2__7S7458C1[] = {
  0,
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C1[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void ABISELECT(_ZTv0_n104_N7S7458C5D1Ev,_ZTv0_n52_N7S7458C5D1Ev)();
extern void _ZN7S7458C5D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N7S7458C5D0Ev,_ZTv0_n52_N7S7458C5D0Ev)();
extern void _ZN7S7458C5D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C5__7S7458C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(112,64),
  ABISELECT(64,36),
  ABISELECT(24,16),
  0,
  ABISELECT(48,28),
  ABISELECT(24,16),
  ABISELECT(-6,-2),
  ABISELECT(-16,-8),
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7458C5D1Ev,_ZTv0_n52_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N7S7458C5D0Ev,_ZTv0_n52_N7S7458C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C5__7S7458C1[] = {
  ABISELECT(10,6),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
};
extern void ABISELECT(_ZTv0_n96_N7S7458C5D1Ev,_ZTv0_n48_N7S7458C5D1Ev)();
extern void ABISELECT(_ZThn24_N7S7458C5D1Ev,_ZThn16_N7S7458C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7458C5D0Ev,_ZTv0_n48_N7S7458C5D0Ev)();
extern void ABISELECT(_ZThn24_N7S7458C5D0Ev,_ZThn16_N7S7458C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C7__7S7458C5__7S7458C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-40,-24),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-30,-18),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C5D1Ev,_ZTv0_n48_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C5D0Ev,_ZTv0_n48_N7S7458C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7458C5D1Ev,_ZTv0_n16_N7S7458C5D1Ev)();
extern void ABISELECT(_ZThn48_N7S7458C5D1Ev,_ZThn28_N7S7458C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C5D0Ev,_ZTv0_n16_N7S7458C5D0Ev)();
extern void ABISELECT(_ZThn48_N7S7458C5D0Ev,_ZThn28_N7S7458C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C5__7S7458C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-54,-30),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C5D1Ev,_ZTv0_n16_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C5D0Ev,_ZTv0_n16_N7S7458C5D0Ev),
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C5D1Ev,_ZTv0_n32_N7S7458C5D1Ev)();
extern void ABISELECT(_ZThn64_N7S7458C5D1Ev,_ZThn36_N7S7458C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C5D0Ev,_ZTv0_n32_N7S7458C5D0Ev)();
extern void ABISELECT(_ZThn64_N7S7458C5D0Ev,_ZThn36_N7S7458C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C5__7S7458C1[] = {
  ABISELECT(-64,-36),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-70,-38),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C5D1Ev,_ZTv0_n32_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C5D0Ev,_ZTv0_n32_N7S7458C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7458C5D1Ev,_ZTv0_n20_N7S7458C5D1Ev)();
extern void ABISELECT(_ZThn112_N7S7458C5D1Ev,_ZThn64_N7S7458C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C5D0Ev,_ZTv0_n20_N7S7458C5D0Ev)();
extern void ABISELECT(_ZThn112_N7S7458C5D0Ev,_ZThn64_N7S7458C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C5__7S7458C1[] = {
  ABISELECT(-112,-64),
  ABISELECT(-118,-66),
  ABISELECT(-54,-30),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C5D1Ev,_ZTv0_n20_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C5D0Ev,_ZTv0_n20_N7S7458C5D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7458C5D1Ev,_ZTvn4_n20_N7S7458C5D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C5D0Ev,_ZTvn4_n20_N7S7458C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C5__7S7458C1[] = {
  ABISELECT(-126,-70),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C5D1Ev,_ZTvn4_n20_N7S7458C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C5D0Ev,_ZTvn4_n20_N7S7458C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C5__7S7458C1[] = {
  ABISELECT(-142,-78),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C27S7458C7__7S7458C5__7S7458C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-46,-26),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7458C5[0]),
};
extern void _ZN7S7458C6D1Ev();
extern void _ZN7S7458C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C6__7S7458C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(112,64),
  ABISELECT(64,36),
  ABISELECT(24,16),
  0,
  ABISELECT(48,28),
  ABISELECT(24,16),
  ABISELECT(-6,-2),
  ABISELECT(-16,-8),
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&_ZN7S7458C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C6__7S7458C1[] = {
  ABISELECT(10,6),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
};
extern void ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn24_N7S7458C6D1Ev,_ZThn16_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn24_N7S7458C6D0Ev,_ZThn16_N7S7458C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C7__7S7458C6__7S7458C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-40,-24),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-30,-18),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn48_N7S7458C6D1Ev,_ZThn28_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn48_N7S7458C6D0Ev,_ZThn28_N7S7458C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C6__7S7458C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-54,-30),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev),
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn64_N7S7458C6D1Ev,_ZThn36_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn64_N7S7458C6D0Ev,_ZThn36_N7S7458C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C6__7S7458C1[] = {
  ABISELECT(-64,-36),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-70,-38),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev)();
extern void ABISELECT(_ZThn112_N7S7458C6D1Ev,_ZThn64_N7S7458C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev)();
extern void ABISELECT(_ZThn112_N7S7458C6D0Ev,_ZThn64_N7S7458C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C6__7S7458C1[] = {
  ABISELECT(-112,-64),
  ABISELECT(-118,-66),
  ABISELECT(-54,-30),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7458C6D1Ev,_ZTvn4_n20_N7S7458C6D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C6D0Ev,_ZTvn4_n20_N7S7458C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C6__7S7458C1[] = {
  ABISELECT(-126,-70),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C6D1Ev,_ZTvn4_n20_N7S7458C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C6D0Ev,_ZTvn4_n20_N7S7458C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C6__7S7458C1[] = {
  ABISELECT(-142,-78),
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C27S7458C7__7S7458C6__7S7458C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-46,-26),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7458C6[0]),
};
extern void _ZN7S7458C7D1Ev();
extern void _ZN7S7458C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C7__7S7458C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(24,12),
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-30,-18),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&_ZN7S7458C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C7D0Ev,
};
extern void _ZN8S7458C11D1Ev();
extern void _ZN8S7458C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C117S7458C7__7S7458C1[] = {
  ABISELECT(88,48),
  ABISELECT(-24,-16),
  ABISELECT(34,18),
  ABISELECT(40,20),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-30,-18),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__8S7458C117S7458C7__7S7458C1[] = {
  ABISELECT(10,6),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn40_N8S7458C11D1Ev,_ZThn20_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn40_N8S7458C11D0Ev,_ZThn20_N8S7458C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__8S7458C117S7458C7__7S7458C1[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-70,-38),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C117S7458C7__7S7458C1[] = {
  ABISELECT(58,34),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZThn88_N8S7458C11D1Ev,_ZThn48_N8S7458C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev)();
extern void ABISELECT(_ZThn88_N8S7458C11D0Ev,_ZThn48_N8S7458C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C117S7458C7__7S7458C1[] = {
  ABISELECT(-88,-48),
  ABISELECT(-118,-66),
  ABISELECT(-54,-30),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C117S7458C7__7S7458C1[] = {
  ABISELECT(-126,-70),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D1Ev,_ZTvn4_n20_N8S7458C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C11D0Ev,_ZTvn4_n20_N8S7458C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A2__8S7458C117S7458C7__7S7458C1[] = {
  ABISELECT(-142,-78),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S7458C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C27S7458C7__A1__7S7458C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-46,-26),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__7S7458C27S7458C7__A1__7S7458C1[] = {
  ABISELECT(10,6),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI7S7458C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7458C7D1Ev,_ZThn12_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7458C7D0Ev,_ZThn12_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C7__7S7458C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-54,-30),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__7S7458C7__7S7458C1[] = {
  ABISELECT(58,34),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__7S7458C7__7S7458C1[] = {
  ABISELECT(10,6),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn40_N7S7458C7D1Ev,_ZThn20_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn40_N7S7458C7D0Ev,_ZThn20_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C7__7S7458C1[] = {
  ABISELECT(-40,-20),
  0,
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-70,-38),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev)();
extern void ABISELECT(_ZThn88_N7S7458C7D1Ev,_ZThn48_N7S7458C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev)();
extern void ABISELECT(_ZThn88_N7S7458C7D0Ev,_ZThn48_N7S7458C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C7__7S7458C1[] = {
  ABISELECT(-88,-48),
  ABISELECT(-118,-66),
  ABISELECT(-54,-30),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7458C7D1Ev,_ZTvn4_n20_N7S7458C7D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7458C7D0Ev,_ZTvn4_n20_N7S7458C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C7__7S7458C1[] = {
  ABISELECT(-126,-70),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C7D1Ev,_ZTvn4_n20_N7S7458C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7458C7D0Ev,_ZTvn4_n20_N7S7458C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C7__7S7458C1[] = {
  ABISELECT(-142,-78),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C2__7S7458C7__7S7458C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-46,-26),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7458C7[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C8__7S7458C1[] = {
  ABISELECT(-54,-30),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C8__A1__7S7458C1[] = {
  ABISELECT(-54,-30),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__7S7458C1[] = {
  ABISELECT(58,34),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C12__7S7458C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-30,-18),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__8S7458C12__7S7458C1[] = {
  ABISELECT(10,6),
  ABISELECT(40,24),
  (VTBL_ENTRY)&(_ZTI8S7458C12[0]),
};
extern void _ZN8S7458C132v1Ev();
extern void _ZN8S7458C13D1Ev();
extern void _ZN8S7458C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C13__7S7458C1[] = {
  ABISELECT(48,28),
  ABISELECT(-64,-36),
  ABISELECT(-6,-2),
  ABISELECT(-70,-38),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&_ZN8S7458C132v1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C13__A4__7S7458C1[] = {
  ABISELECT(-70,-38),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7458C10__8S7458C13__7S7458C1[] = {
  ABISELECT(58,34),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZThn48_N8S7458C13D1Ev,_ZThn28_N8S7458C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev)();
extern void ABISELECT(_ZThn48_N8S7458C13D0Ev,_ZThn28_N8S7458C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7458C14__8S7458C13__7S7458C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-118,-66),
  ABISELECT(-54,-30),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__8S7458C13__7S7458C1[] = {
  ABISELECT(-126,-70),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D1Ev,_ZTvn4_n20_N8S7458C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N8S7458C13D0Ev,_ZTvn4_n20_N8S7458C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A1__8S7458C13__7S7458C1[] = {
  ABISELECT(-142,-78),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S7458C13[0]),
};
extern void _ZN8S7458C14D1Ev();
extern void _ZN8S7458C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7458C14__7S7458C1[] = {
  ABISELECT(-118,-66),
  ABISELECT(-54,-30),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&_ZN8S7458C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7458C14D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7458C108S7458C14__A1__7S7458C1[] = {
  ABISELECT(-54,-30),
  0,
  (VTBL_ENTRY)&(_ZTI8S7458C10[0]),
};
extern void _ZN7S7458C8D1Ev();
extern void _ZN7S7458C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7458C88S7458C14__A1__7S7458C1[] = {
  ABISELECT(-126,-70),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C8[0]),
  (VTBL_ENTRY)&_ZN7S7458C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7458C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7458C47S7458C88S7458C14__A2__7S7458C1[] = {
  ABISELECT(-126,-70),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7458C48S7458C14__A3__7S7458C1[] = {
  ABISELECT(-142,-78),
  0,
  (VTBL_ENTRY)&(_ZTI7S7458C4[0]),
};
extern void ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7458C8__8S7458C14__7S7458C1[] = {
  ABISELECT(-126,-70),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D1Ev,_ZThn4_N8S7458C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S7458C14D0Ev,_ZThn4_N8S7458C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7458C4__A1__8S7458C14__7S7458C1[] = {
  ABISELECT(-142,-78),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7458C14[0]),
};
static  VTT_ENTRY vtt_S7458C1[] = {
  {&(_ZTV7S7458C1[14]),  14,82},
  {&(_tg__ZTV7S7458C2__7S7458C1[4]),  4,4},
  {&(_tg__ZTV7S7458C2__7S7458C1[4]),  4,4},
  {&(_ZTV7S7458C1[14]),  14,82},
  {&(_ZTV7S7458C1[30]),  30,82},
  {&(_ZTV7S7458C1[30]),  30,82},
  {&(_ZTV7S7458C1[44]),  44,82},
  {&(_ZTV7S7458C1[54]),  54,82},
  {&(_ZTV7S7458C1[30]),  30,82},
  {&(_ZTV7S7458C1[44]),  44,82},
  {&(_ZTV7S7458C1[64]),  64,82},
  {&(_ZTV7S7458C1[72]),  72,82},
  {&(_ZTV7S7458C1[77]),  77,82},
  {&(_ZTV7S7458C1[82]),  82,82},
  {&(_ZTV7S7458C1[50]),  50,82},
  {&(_tg__ZTV7S7458C4__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C5__7S7458C1[14]),  14,16},
  {&(_tg__ZTV7S7458C5__7S7458C1[14]),  14,16},
  {&(_tg__ZTV7S7458C4__7S7458C5__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C7__7S7458C5__7S7458C1[12]),  12,14},
  {&(_tg__ZTV7S7458C8__7S7458C5__7S7458C1[4]),  4,6},
  {&(_tg__ZTV7S7458C5__7S7458C1[14]),  14,16},
  {&(_tg__ZTV7S7458C7__7S7458C5__7S7458C1[12]),  12,14},
  {&(_tg__ZTV8S7458C13__7S7458C5__7S7458C1[8]),  8,11},
  {&(_tg__ZTV8S7458C14__7S7458C5__7S7458C1[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C5__7S7458C1[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C5__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C27S7458C7__7S7458C5__7S7458C1[4]),  4,4},
  {&(_tg__ZTV7S7458C6__7S7458C1[12]),  12,14},
  {&(_tg__ZTV7S7458C4__7S7458C6__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C7__7S7458C6__7S7458C1[12]),  12,14},
  {&(_tg__ZTV7S7458C8__7S7458C6__7S7458C1[4]),  4,6},
  {&(_tg__ZTV7S7458C6__7S7458C1[12]),  12,14},
  {&(_tg__ZTV7S7458C7__7S7458C6__7S7458C1[12]),  12,14},
  {&(_tg__ZTV8S7458C13__7S7458C6__7S7458C1[8]),  8,11},
  {&(_tg__ZTV8S7458C14__7S7458C6__7S7458C1[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C6__7S7458C1[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C6__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C27S7458C7__7S7458C6__7S7458C1[4]),  4,4},
  {&(_tg__ZTV7S7458C7__7S7458C1[11]),  11,13},
  {&(_tg__ZTV8S7458C117S7458C7__7S7458C1[9]),  9,11},
  {&(_tg__ZTV8S7458C117S7458C7__7S7458C1[9]),  9,11},
  {&(_tg__ZTV7S7458C4__8S7458C117S7458C7__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C13__8S7458C117S7458C7__7S7458C1[8]),  8,11},
  {&(_tg__ZTV8S7458C10__8S7458C117S7458C7__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C117S7458C7__7S7458C1[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C117S7458C7__7S7458C1[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A2__8S7458C117S7458C7__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C27S7458C7__A1__7S7458C1[4]),  4,4},
  {&(_tg__ZTV7S7458C4__7S7458C27S7458C7__A1__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C8__7S7458C7__7S7458C1[4]),  4,6},
  {&(_tg__ZTV8S7458C10__7S7458C7__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C7__7S7458C1[11]),  11,13},
  {&(_tg__ZTV7S7458C4__A1__7S7458C7__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C13__7S7458C7__7S7458C1[8]),  8,11},
  {&(_tg__ZTV8S7458C14__7S7458C7__7S7458C1[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C7__7S7458C1[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C7__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C2__7S7458C7__7S7458C1[4]),  4,4},
  {&(_tg__ZTV7S7458C8__7S7458C1[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C8__A1__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C10__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C12__7S7458C1[4]),  4,4},
  {&(_tg__ZTV7S7458C4__8S7458C12__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C13__7S7458C1[6]),  6,9},
  {&(_tg__ZTV7S7458C48S7458C13__A4__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C10__8S7458C13__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C14__8S7458C13__7S7458C1[5]),  5,7},
  {&(_tg__ZTV7S7458C88S7458C14__8S7458C13__7S7458C1[3]),  3,5},
  {&(_tg__ZTV7S7458C48S7458C14__A1__8S7458C13__7S7458C1[3]),  3,3},
  {&(_tg__ZTV8S7458C14__7S7458C1[4]),  4,6},
  {&(_tg__ZTV8S7458C108S7458C14__A1__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C88S7458C14__A1__7S7458C1[3]),  3,5},
  {&(_tg__ZTV7S7458C47S7458C88S7458C14__A2__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C48S7458C14__A3__7S7458C1[3]),  3,3},
  {&(_tg__ZTV7S7458C8__8S7458C14__7S7458C1[3]),  3,5},
  {&(_tg__ZTV7S7458C4__A1__8S7458C14__7S7458C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7458C1[];
extern  VTBL_ENTRY _ZTV7S7458C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7458C1[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D0Ev,_ZTv0_n20_N8S7458C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7458C13D0Ev,_ZThn28_N8S7458C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C13D1Ev,_ZTv0_n20_N8S7458C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S7458C13D1Ev,_ZThn28_N8S7458C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C7D0Ev,_ZTv0_n20_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7458C7D0Ev,_ZThn48_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C7D1Ev,_ZTv0_n20_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7458C7D1Ev,_ZThn48_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C7D0Ev,_ZTv0_n32_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C7D0Ev,_ZThn20_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C7D1Ev,_ZTv0_n32_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C7D1Ev,_ZThn20_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C7D0Ev,_ZTv0_n16_N7S7458C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C7D0Ev,_ZThn12_N7S7458C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C7D1Ev,_ZTv0_n16_N7S7458C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C7D1Ev,_ZThn12_N7S7458C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D0Ev,_ZTv0_n20_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7458C11D0Ev,_ZThn48_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7458C11D1Ev,_ZTv0_n20_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S7458C11D1Ev,_ZThn48_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D0Ev,_ZTv0_n32_N8S7458C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7458C11D0Ev,_ZThn20_N8S7458C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7458C11D1Ev,_ZTv0_n32_N8S7458C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7458C11D1Ev,_ZThn20_N8S7458C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C6D0Ev,_ZTv0_n20_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C6D0Ev,_ZThn64_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C6D1Ev,_ZTv0_n20_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C6D1Ev,_ZThn64_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C6D0Ev,_ZTv0_n32_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C6D0Ev,_ZThn36_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C6D1Ev,_ZTv0_n32_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C6D1Ev,_ZThn36_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C6D0Ev,_ZTv0_n16_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7458C6D0Ev,_ZThn28_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C6D1Ev,_ZTv0_n16_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7458C6D1Ev,_ZThn28_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C6D0Ev,_ZTv0_n48_N7S7458C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C6D0Ev,_ZThn16_N7S7458C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C6D1Ev,_ZTv0_n48_N7S7458C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C6D1Ev,_ZThn16_N7S7458C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C5D0Ev,_ZTv0_n20_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C5D0Ev,_ZThn64_N7S7458C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C5D1Ev,_ZTv0_n20_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7458C5D1Ev,_ZThn64_N7S7458C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C5D0Ev,_ZTv0_n32_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C5D0Ev,_ZThn36_N7S7458C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C5D1Ev,_ZTv0_n32_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C5D1Ev,_ZThn36_N7S7458C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C5D0Ev,_ZTv0_n16_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7458C5D0Ev,_ZThn28_N7S7458C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C5D1Ev,_ZTv0_n16_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S7458C5D1Ev,_ZThn28_N7S7458C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C5D0Ev,_ZTv0_n48_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C5D0Ev,_ZThn16_N7S7458C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C5D1Ev,_ZTv0_n48_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7458C5D1Ev,_ZThn16_N7S7458C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7458C5D0Ev,_ZTv0_n52_N7S7458C5D0Ev), // 
  (VTBL_ENTRY)_ZN7S7458C5D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7458C5D1Ev,_ZTv0_n52_N7S7458C5D1Ev), // 
  (VTBL_ENTRY)_ZN7S7458C5D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C1D0Ev,_ZTv0_n20_N7S7458C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7458C1D0Ev,_ZThn72_N7S7458C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7458C1D1Ev,_ZTv0_n20_N7S7458C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7458C1D1Ev,_ZThn72_N7S7458C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C1D0Ev,_ZTv0_n32_N7S7458C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7458C1D0Ev,_ZThn44_N7S7458C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7458C1D1Ev,_ZTv0_n32_N7S7458C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7458C1D1Ev,_ZThn44_N7S7458C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C1D0Ev,_ZTv0_n16_N7S7458C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C1D0Ev,_ZThn36_N7S7458C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7458C1D1Ev,_ZTv0_n16_N7S7458C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7458C1D1Ev,_ZThn36_N7S7458C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C1D0Ev,_ZTv0_n48_N7S7458C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C1D0Ev,_ZThn24_N7S7458C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7458C1D1Ev,_ZTv0_n48_N7S7458C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7458C1D1Ev,_ZThn24_N7S7458C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7458C1D0Ev,_ZTv0_n52_N7S7458C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7458C1D0Ev,_ZThn8_N7S7458C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N7S7458C1D1Ev,_ZTv0_n52_N7S7458C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7458C1D1Ev,_ZThn8_N7S7458C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7458C1 = {  "S7458C1", // class name
  bases_S7458C1, 27,
  &(vtc_S7458C1[0]), // expected_vtbl_contents
  &(vtt_S7458C1[0]), // expected_vtt_contents
  ABISELECT(240,148), // object size
  NSPAIRA(_ZTI7S7458C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7458C1),82, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7458C1),77, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3068C3  {
  virtual void  v2(); // _ZN7S3068C32v2Ev
  virtual void  v3(); // _ZN7S3068C32v3Ev
  virtual void  v4(); // _ZN7S3068C32v4Ev
  virtual void  v5(); // _ZN7S3068C32v5Ev
  virtual void  v6(); // _ZN7S3068C32v6Ev
  virtual void  v7(); // _ZN7S3068C32v7Ev
  ~S3068C3(); // tgen
  S3068C3(); // tgen
};
//SIG(-1 S3068C3) C1{ v1 v2 v3 v4 v5 v6}


void  S3068C3 ::v2(){vfunc_called(this, "_ZN7S3068C32v2Ev");}
void  S3068C3 ::v3(){vfunc_called(this, "_ZN7S3068C32v3Ev");}
void  S3068C3 ::v4(){vfunc_called(this, "_ZN7S3068C32v4Ev");}
void  S3068C3 ::v5(){vfunc_called(this, "_ZN7S3068C32v5Ev");}
void  S3068C3 ::v6(){vfunc_called(this, "_ZN7S3068C32v6Ev");}
void  S3068C3 ::v7(){vfunc_called(this, "_ZN7S3068C32v7Ev");}
S3068C3 ::~S3068C3(){ note_dtor("S3068C3", this);} // tgen
S3068C3 ::S3068C3(){ note_ctor("S3068C3", this);} // tgen

static void Test_S3068C3()
{
  extern Class_Descriptor cd_S3068C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3068C3, buf);
    S3068C3 *dp, &lv = *(dp=new (buf) S3068C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3068C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3068C3)");
    test_class_info(&lv, &cd_S3068C3);
    dp->~S3068C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C3(Test_S3068C3, "S3068C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3068C3C1Ev();
extern void _ZN7S3068C3D1Ev();
Name_Map name_map_S3068C3[] = {
  NSPAIR(_ZN7S3068C3C1Ev),
  NSPAIR(_ZN7S3068C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3068C3[];
extern void _ZN7S3068C32v2Ev();
extern void _ZN7S3068C32v3Ev();
extern void _ZN7S3068C32v4Ev();
extern void _ZN7S3068C32v5Ev();
extern void _ZN7S3068C32v6Ev();
extern void _ZN7S3068C32v7Ev();
static  VTBL_ENTRY vtc_S3068C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C3[0]),
  (VTBL_ENTRY)&_ZN7S3068C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S3068C3[];
extern  VTBL_ENTRY _ZTV7S3068C3[];
Class_Descriptor cd_S3068C3 = {  "S3068C3", // class name
  0,0,//no base classes
  &(vtc_S3068C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3068C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3068C3),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  S3068C7  {
  void *s3068c7f0;
  long double s3068c7f1;
  int s3068c7f2;
  virtual void  v8(); // _ZN7S3068C72v8Ev
  virtual void  v9(); // _ZN7S3068C72v9Ev
  ~S3068C7(); // tgen
  S3068C7(); // tgen
};
//SIG(-1 S3068C7) C1{ v1 v2 Fp FD Fi}


void  S3068C7 ::v8(){vfunc_called(this, "_ZN7S3068C72v8Ev");}
void  S3068C7 ::v9(){vfunc_called(this, "_ZN7S3068C72v9Ev");}
S3068C7 ::~S3068C7(){ note_dtor("S3068C7", this);} // tgen
S3068C7 ::S3068C7(){ note_ctor("S3068C7", this);} // tgen

static void Test_S3068C7()
{
  extern Class_Descriptor cd_S3068C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S3068C7, buf);
    S3068C7 *dp, &lv = *(dp=new (buf) S3068C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3068C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3068C7)");
    check_field_offset(lv, s3068c7f0, ABISELECT(8,4), "S3068C7.s3068c7f0");
    check_field_offset(lv, s3068c7f1, ABISELECT(16,8), "S3068C7.s3068c7f1");
    check_field_offset(lv, s3068c7f2, ABISELECT(32,20), "S3068C7.s3068c7f2");
    test_class_info(&lv, &cd_S3068C7);
    dp->~S3068C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C7(Test_S3068C7, "S3068C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3068C7C1Ev();
extern void _ZN7S3068C7D1Ev();
Name_Map name_map_S3068C7[] = {
  NSPAIR(_ZN7S3068C7C1Ev),
  NSPAIR(_ZN7S3068C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3068C7[];
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
static  VTBL_ENTRY vtc_S3068C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C7[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
};
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
Class_Descriptor cd_S3068C7 = {  "S3068C7", // class name
  0,0,//no base classes
  &(vtc_S3068C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3068C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3068C7),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  S3068C6  : S3068C7 {
  virtual void  v10(); // _ZN7S3068C63v10Ev
  virtual void  v11(); // _ZN7S3068C63v11Ev
  ~S3068C6(); // tgen
  S3068C6(); // tgen
};
//SIG(-1 S3068C6) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S3068C6 ::v10(){vfunc_called(this, "_ZN7S3068C63v10Ev");}
void  S3068C6 ::v11(){vfunc_called(this, "_ZN7S3068C63v11Ev");}
S3068C6 ::~S3068C6(){ note_dtor("S3068C6", this);} // tgen
S3068C6 ::S3068C6(){ note_ctor("S3068C6", this);} // tgen

static void Test_S3068C6()
{
  extern Class_Descriptor cd_S3068C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S3068C6, buf);
    S3068C6 *dp, &lv = *(dp=new (buf) S3068C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3068C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3068C6)");
    check_base_class_offset(lv, (S3068C7*), 0, "S3068C6");
    test_class_info(&lv, &cd_S3068C6);
    dp->~S3068C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C6(Test_S3068C6, "S3068C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3068C6C1Ev();
extern void _ZN7S3068C6D1Ev();
Name_Map name_map_S3068C6[] = {
  NSPAIR(_ZN7S3068C6C1Ev),
  NSPAIR(_ZN7S3068C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
static Base_Class bases_S3068C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3068C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S3068C6[];
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
static  VTBL_ENTRY vtc_S3068C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C6[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
};
extern VTBL_ENTRY _ZTI7S3068C6[];
extern  VTBL_ENTRY _ZTV7S3068C6[];
Class_Descriptor cd_S3068C6 = {  "S3068C6", // class name
  bases_S3068C6, 1,
  &(vtc_S3068C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3068C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3068C6),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  S3068C5  : S3068C6 , S3068C7 {
  virtual void  v12(); // _ZN7S3068C53v12Ev
  virtual void  v13(); // _ZN7S3068C53v13Ev
  virtual void  v14(); // _ZN7S3068C53v14Ev
  virtual void  v15(); // _ZN7S3068C53v15Ev
  ~S3068C5(); // tgen
  S3068C5(); // tgen
};
//SIG(-1 S3068C5) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S3068C5 ::v12(){vfunc_called(this, "_ZN7S3068C53v12Ev");}
void  S3068C5 ::v13(){vfunc_called(this, "_ZN7S3068C53v13Ev");}
void  S3068C5 ::v14(){vfunc_called(this, "_ZN7S3068C53v14Ev");}
void  S3068C5 ::v15(){vfunc_called(this, "_ZN7S3068C53v15Ev");}
S3068C5 ::~S3068C5(){ note_dtor("S3068C5", this);} // tgen
S3068C5 ::S3068C5(){ note_ctor("S3068C5", this);} // tgen

static void Test_S3068C5()
{
  extern Class_Descriptor cd_S3068C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S3068C5, buf);
    S3068C5 *dp, &lv = *(dp=new (buf) S3068C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S3068C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3068C5)");
    check_base_class_offset(lv, (S3068C7*)(S3068C6*), 0, "S3068C5");
    check_base_class_offset(lv, (S3068C6*), 0, "S3068C5");
    /*is_ambiguous_... S3068C5::S3068C7 */ AMB_check_base_class_offset(lv, (S3068C7*), ABISELECT(48,24), "S3068C5");
    test_class_info(&lv, &cd_S3068C5);
    dp->~S3068C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C5(Test_S3068C5, "S3068C5", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S3068C5C1Ev();
extern void _ZN7S3068C5D1Ev();
Name_Map name_map_S3068C5[] = {
  NSPAIR(_ZN7S3068C5C1Ev),
  NSPAIR(_ZN7S3068C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C6;
extern VTBL_ENTRY _ZTI7S3068C6[];
extern  VTBL_ENTRY _ZTV7S3068C6[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
static Base_Class bases_S3068C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3068C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3068C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S3068C7,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_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 _ZTI7S3068C5[];
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
static  VTBL_ENTRY vtc_S3068C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C5[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3068C5[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
};
extern VTBL_ENTRY _ZTI7S3068C5[];
extern  VTBL_ENTRY _ZTV7S3068C5[];
Class_Descriptor cd_S3068C5 = {  "S3068C5", // class name
  bases_S3068C5, 3,
  &(vtc_S3068C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S3068C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3068C5),14, //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  S3068C10  {
  ::S1400C17_nt s3068c10f0;
  void *s3068c10f1;
  virtual void  v16(); // _ZN8S3068C103v16Ev
  ~S3068C10(); // tgen
  S3068C10(); // tgen
};
//SIG(-1 S3068C10) C1{ v1 FC2{ v2 v3} Fp}


void  S3068C10 ::v16(){vfunc_called(this, "_ZN8S3068C103v16Ev");}
S3068C10 ::~S3068C10(){ note_dtor("S3068C10", this);} // tgen
S3068C10 ::S3068C10(){ note_ctor("S3068C10", this);} // tgen

static void Test_S3068C10()
{
  extern Class_Descriptor cd_S3068C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3068C10, buf);
    S3068C10 *dp, &lv = *(dp=new (buf) S3068C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3068C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3068C10)");
    check_field_offset(lv, s3068c10f0, ABISELECT(8,4), "S3068C10.s3068c10f0");
    check_field_offset(lv, s3068c10f1, ABISELECT(16,8), "S3068C10.s3068c10f1");
    test_class_info(&lv, &cd_S3068C10);
    dp->~S3068C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C10(Test_S3068C10, "S3068C10", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S3068C10C1Ev();
extern void _ZN8S3068C10D1Ev();
Name_Map name_map_S3068C10[] = {
  NSPAIR(_ZN8S3068C10C1Ev),
  NSPAIR(_ZN8S3068C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3068C10[];
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY vtc_S3068C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3068C10[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern VTBL_ENTRY _ZTI8S3068C10[];
extern  VTBL_ENTRY _ZTV8S3068C10[];
Class_Descriptor cd_S3068C10 = {  "S3068C10", // class name
  0,0,//no base classes
  &(vtc_S3068C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S3068C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3068C10),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3068C9  : virtual S3068C10 {
  virtual void  v17(); // _ZN7S3068C93v17Ev
  ~S3068C9(); // tgen
  S3068C9(); // tgen
};
//SIG(-1 S3068C9) C1{ VBC2{ v2 FC3{ v3 v4} Fp} v1}


void  S3068C9 ::v17(){vfunc_called(this, "_ZN7S3068C93v17Ev");}
S3068C9 ::~S3068C9(){ note_dtor("S3068C9", this);} // tgen
S3068C9 ::S3068C9(){ note_ctor("S3068C9", this);} // tgen

static void Test_S3068C9()
{
  extern Class_Descriptor cd_S3068C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3068C9, buf);
    S3068C9 *dp, &lv = *(dp=new (buf) S3068C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3068C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3068C9)");
    check_base_class_offset(lv, (S3068C10*), ABISELECT(8,4), "S3068C9");
    test_class_info(&lv, &cd_S3068C9);
    dp->~S3068C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C9(Test_S3068C9, "S3068C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3068C9C1Ev();
extern void _ZN7S3068C9D1Ev();
Name_Map name_map_S3068C9[] = {
  NSPAIR(_ZN7S3068C9C1Ev),
  NSPAIR(_ZN7S3068C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3068C10;
extern VTBL_ENTRY _ZTI8S3068C10[];
extern  VTBL_ENTRY _ZTV8S3068C10[];
static Base_Class bases_S3068C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3068C10,    ABISELECT(8,4), //bcp->offset
    4, //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 _ZTI7S3068C9[];
extern void _ZN7S3068C93v17Ev();
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY vtc_S3068C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern VTBL_ENTRY _ZTV7S3068C9[];
static  VTT_ENTRY vtt_S3068C9[] = {
  {&(_ZTV7S3068C9[3]),  3,8},
  {&(_ZTV7S3068C9[7]),  7,8},
};
extern VTBL_ENTRY _ZTI7S3068C9[];
extern  VTBL_ENTRY _ZTV7S3068C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C9[];
Class_Descriptor cd_S3068C9 = {  "S3068C9", // class name
  bases_S3068C9, 1,
  &(vtc_S3068C9[0]), // expected_vtbl_contents
  &(vtt_S3068C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3068C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3068C9),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3068C9),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  S3068C8  : virtual S3068C9 {
  virtual void  v18(); // _ZN7S3068C83v18Ev
  virtual void  v19(); // _ZN7S3068C83v19Ev
  virtual void  v20(); // _ZN7S3068C83v20Ev
  ~S3068C8(); // tgen
  S3068C8(); // tgen
};
//SIG(-1 S3068C8) C1{ VBC2{ VBC3{ v4 FC4{ v6 v7} Fp} v5} v1 v2 v3}


void  S3068C8 ::v18(){vfunc_called(this, "_ZN7S3068C83v18Ev");}
void  S3068C8 ::v19(){vfunc_called(this, "_ZN7S3068C83v19Ev");}
void  S3068C8 ::v20(){vfunc_called(this, "_ZN7S3068C83v20Ev");}
S3068C8 ::~S3068C8(){ note_dtor("S3068C8", this);} // tgen
S3068C8 ::S3068C8(){ note_ctor("S3068C8", this);} // tgen

static void Test_S3068C8()
{
  extern Class_Descriptor cd_S3068C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3068C8, buf);
    S3068C8 *dp, &lv = *(dp=new (buf) S3068C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3068C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3068C8)");
    check_base_class_offset(lv, (S3068C10*)(S3068C9*), ABISELECT(8,4), "S3068C8");
    check_base_class_offset(lv, (S3068C9*), 0, "S3068C8");
    test_class_info(&lv, &cd_S3068C8);
    dp->~S3068C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C8(Test_S3068C8, "S3068C8", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3068C8C1Ev();
extern void _ZN7S3068C8D1Ev();
Name_Map name_map_S3068C8[] = {
  NSPAIR(_ZN7S3068C8C1Ev),
  NSPAIR(_ZN7S3068C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3068C10;
extern VTBL_ENTRY _ZTI8S3068C10[];
extern  VTBL_ENTRY _ZTV8S3068C10[];
extern Class_Descriptor cd_S3068C9;
extern VTBL_ENTRY _ZTI7S3068C9[];
extern  VTBL_ENTRY _ZTV7S3068C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C9[];
static Base_Class bases_S3068C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3068C10,    ABISELECT(8,4), //bcp->offset
    9, //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
    1, //immediately_derived
  0, 1},
  {&cd_S3068C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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 _ZTI7S3068C8[];
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY vtc_S3068C8[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern VTBL_ENTRY _ZTV7S3068C8[];
extern void _ZN7S3068C93v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C9__7S3068C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C9__7S3068C8[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
static  VTT_ENTRY vtt_S3068C8[] = {
  {&(_ZTV7S3068C8[5]),  5,13},
  {&(_ZTV7S3068C8[5]),  5,13},
  {&(_ZTV7S3068C8[12]),  12,13},
  {&(_tg__ZTV7S3068C9__7S3068C8[3]),  3,4},
  {&(_tg__ZTV8S3068C10__7S3068C9__7S3068C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3068C8[];
extern  VTBL_ENTRY _ZTV7S3068C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C8[];
Class_Descriptor cd_S3068C8 = {  "S3068C8", // class name
  bases_S3068C8, 2,
  &(vtc_S3068C8[0]), // expected_vtbl_contents
  &(vtt_S3068C8[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3068C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3068C8),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3068C8),5, //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  S3068C4  : S3068C5 , virtual S3068C8 {
  virtual void  v21(); // _ZN7S3068C43v21Ev
  virtual void  v22(); // _ZN7S3068C43v22Ev
  virtual void  v23(); // _ZN7S3068C43v23Ev
  ~S3068C4(); // tgen
  S3068C4(); // tgen
};
//SIG(-1 S3068C4) C1{ BC2{ BC3{ BC4{ v4 v5 Fp FD Fi} v6 v7} BC4 v8 v9 v10 v11} VBC5{ VBC6{ VBC7{ v12 FC8{ v17 v18} Fp} v13} v14 v15 v16} v1 v2 v3}


void  S3068C4 ::v21(){vfunc_called(this, "_ZN7S3068C43v21Ev");}
void  S3068C4 ::v22(){vfunc_called(this, "_ZN7S3068C43v22Ev");}
void  S3068C4 ::v23(){vfunc_called(this, "_ZN7S3068C43v23Ev");}
S3068C4 ::~S3068C4(){ note_dtor("S3068C4", this);} // tgen
S3068C4 ::S3068C4(){ note_ctor("S3068C4", this);} // tgen

static void Test_S3068C4()
{
  extern Class_Descriptor cd_S3068C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S3068C4, buf);
    S3068C4 *dp, &lv = *(dp=new (buf) S3068C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S3068C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3068C4)");
    check_base_class_offset(lv, (S3068C7*)(S3068C6*)(S3068C5*), 0, "S3068C4");
    check_base_class_offset(lv, (S3068C6*)(S3068C5*), 0, "S3068C4");
    /*is_ambiguous_... S3068C5::S3068C7 */ AMB_check_base_class_offset(lv, (S3068C7*)(S3068C5*), ABISELECT(48,24), "S3068C4");
    check_base_class_offset(lv, (S3068C5*), 0, "S3068C4");
    check_base_class_offset(lv, (S3068C10*)(S3068C9*), ABISELECT(96,52), "S3068C4");
    check_base_class_offset(lv, (S3068C9*)(S3068C8*), ABISELECT(88,48), "S3068C4");
    check_base_class_offset(lv, (S3068C8*), ABISELECT(88,48), "S3068C4");
    test_class_info(&lv, &cd_S3068C4);
    dp->~S3068C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C4(Test_S3068C4, "S3068C4", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN7S3068C4C1Ev();
extern void _ZN7S3068C4D1Ev();
Name_Map name_map_S3068C4[] = {
  NSPAIR(_ZN7S3068C4C1Ev),
  NSPAIR(_ZN7S3068C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C6;
extern VTBL_ENTRY _ZTI7S3068C6[];
extern  VTBL_ENTRY _ZTV7S3068C6[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C5;
extern VTBL_ENTRY _ZTI7S3068C5[];
extern  VTBL_ENTRY _ZTV7S3068C5[];
extern Class_Descriptor cd_S3068C10;
extern VTBL_ENTRY _ZTI8S3068C10[];
extern  VTBL_ENTRY _ZTV8S3068C10[];
extern Class_Descriptor cd_S3068C9;
extern VTBL_ENTRY _ZTI7S3068C9[];
extern  VTBL_ENTRY _ZTV7S3068C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C9[];
extern Class_Descriptor cd_S3068C8;
extern VTBL_ENTRY _ZTI7S3068C8[];
extern  VTBL_ENTRY _ZTV7S3068C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C8[];
static Base_Class bases_S3068C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3068C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S3068C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S3068C7,    ABISELECT(48,24), //bcp->offset
    16, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S3068C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S3068C10,    ABISELECT(96,52), //bcp->offset
    32, //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
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3068C9,    ABISELECT(88,48), //bcp->offset
    -1, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3068C8,    ABISELECT(88,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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 _ZTI7S3068C4[];
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY vtc_S3068C4[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern VTBL_ENTRY _ZTV7S3068C4[];
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__7S3068C4[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C8__7S3068C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C93v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C9__7S3068C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C9__7S3068C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
static  VTT_ENTRY vtt_S3068C4[] = {
  {&(_ZTV7S3068C4[5]),  5,36},
  {&(_ZTV7S3068C4[28]),  28,36},
  {&(_ZTV7S3068C4[28]),  28,36},
  {&(_ZTV7S3068C4[35]),  35,36},
  {&(_tg__ZTV7S3068C8__7S3068C4[5]),  5,9},
  {&(_tg__ZTV7S3068C8__7S3068C4[5]),  5,9},
  {&(_tg__ZTV8S3068C10__7S3068C8__7S3068C4[3]),  3,4},
  {&(_tg__ZTV7S3068C9__7S3068C4[3]),  3,4},
  {&(_tg__ZTV8S3068C10__7S3068C9__7S3068C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3068C4[];
extern  VTBL_ENTRY _ZTV7S3068C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C4[];
Class_Descriptor cd_S3068C4 = {  "S3068C4", // class name
  bases_S3068C4, 7,
  &(vtc_S3068C4[0]), // expected_vtbl_contents
  &(vtt_S3068C4[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI7S3068C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3068C4),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3068C4),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3068C2  : S3068C3 , virtual S3068C4 {
  void *s3068c2f0;
  __tsi64 s3068c2f1:5;
  virtual  ~S3068C2(); // _ZN7S3068C2D2Ev
  virtual void  v24(); // _ZN7S3068C23v24Ev
  S3068C2(); // tgen
};
//SIG(-1 S3068C2) C1{ BC2{ v2 v3 v4 v5 v6 v7} VBC3{ BC4{ BC5{ BC6{ v8 v9 Fp FD Fi} v10 v11} BC6 v12 v13 v14 v15} VBC7{ VBC8{ VBC9{ v16 FC10{ v24 v25} Fp} v17} v18 v19 v20} v21 v22 v23} vd v1 Fp FL:5}


 S3068C2 ::~S3068C2(){ note_dtor("S3068C2", this);}
void  S3068C2 ::v24(){vfunc_called(this, "_ZN7S3068C23v24Ev");}
S3068C2 ::S3068C2(){ note_ctor("S3068C2", this);} // tgen

static void Test_S3068C2()
{
  extern Class_Descriptor cd_S3068C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,20)];
    init_test(&cd_S3068C2, buf);
    S3068C2 *dp, &lv = *(dp=new (buf) S3068C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,76), "sizeof(S3068C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3068C2)");
    check_base_class_offset(lv, (S3068C3*), 0, "S3068C2");
    check_base_class_offset(lv, (S3068C7*)(S3068C6*)(S3068C5*)(S3068C4*), ABISELECT(32,12), "S3068C2");
    check_base_class_offset(lv, (S3068C6*)(S3068C5*)(S3068C4*), ABISELECT(32,12), "S3068C2");
    /*is_ambiguous_... S3068C5::S3068C7 */ AMB_check_base_class_offset(lv, (S3068C7*)(S3068C5*)(S3068C4*), ABISELECT(80,36), "S3068C2");
    check_base_class_offset(lv, (S3068C5*)(S3068C4*), ABISELECT(32,12), "S3068C2");
    check_base_class_offset(lv, (S3068C10*)(S3068C9*), ABISELECT(128,64), "S3068C2");
    check_base_class_offset(lv, (S3068C9*)(S3068C8*), ABISELECT(120,60), "S3068C2");
    check_base_class_offset(lv, (S3068C8*)(S3068C4*), ABISELECT(120,60), "S3068C2");
    check_base_class_offset(lv, (S3068C4*), ABISELECT(32,12), "S3068C2");
    check_field_offset(lv, s3068c2f0, ABISELECT(8,4), "S3068C2.s3068c2f0");
    set_bf_and_test(lv, s3068c2f1, ABISELECT(16,8), 0, 5, 1, "S3068C2");
    set_bf_and_test(lv, s3068c2f1, ABISELECT(16,8), 0, 5, hide_sll(1LL<<4), "S3068C2");
    test_class_info(&lv, &cd_S3068C2);
    dp->~S3068C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C2(Test_S3068C2, "S3068C2", ABISELECT(160,76));

#else // __cplusplus

extern void _ZN7S3068C2C1Ev();
extern void _ZN7S3068C2D2Ev();
Name_Map name_map_S3068C2[] = {
  NSPAIR(_ZN7S3068C2C1Ev),
  NSPAIR(_ZN7S3068C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3068C3;
extern VTBL_ENTRY _ZTI7S3068C3[];
extern  VTBL_ENTRY _ZTV7S3068C3[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C6;
extern VTBL_ENTRY _ZTI7S3068C6[];
extern  VTBL_ENTRY _ZTV7S3068C6[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C5;
extern VTBL_ENTRY _ZTI7S3068C5[];
extern  VTBL_ENTRY _ZTV7S3068C5[];
extern Class_Descriptor cd_S3068C10;
extern VTBL_ENTRY _ZTI8S3068C10[];
extern  VTBL_ENTRY _ZTV8S3068C10[];
extern Class_Descriptor cd_S3068C9;
extern VTBL_ENTRY _ZTI7S3068C9[];
extern  VTBL_ENTRY _ZTV7S3068C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C9[];
extern Class_Descriptor cd_S3068C8;
extern VTBL_ENTRY _ZTI7S3068C8[];
extern  VTBL_ENTRY _ZTV7S3068C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C8[];
extern Class_Descriptor cd_S3068C4;
extern VTBL_ENTRY _ZTI7S3068C4[];
extern  VTBL_ENTRY _ZTV7S3068C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C4[];
static Base_Class bases_S3068C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3068C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3068C7,    ABISELECT(32,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
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3068C6,    ABISELECT(32,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
    4, //immediately_derived
  0, 0},
  {&cd_S3068C7,    ABISELECT(80,36), //bcp->offset
    42, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3068C5,    ABISELECT(32,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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3068C10,    ABISELECT(128,64), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //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
    6, //immediately_derived
  0, 1},
  {&cd_S3068C9,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3068C8,    ABISELECT(120,60), //bcp->offset
    46, //bcp->virtual_function_table_offset
    8, //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
    8, //immediately_derived
  0, 1},
  {&cd_S3068C4,    ABISELECT(32,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3068C2[];
extern void _ZN7S3068C32v2Ev();
extern void _ZN7S3068C32v3Ev();
extern void _ZN7S3068C32v4Ev();
extern void _ZN7S3068C32v5Ev();
extern void _ZN7S3068C32v6Ev();
extern void _ZN7S3068C32v7Ev();
extern void _ZN7S3068C2D1Ev();
extern void _ZN7S3068C2D0Ev();
extern void _ZN7S3068C23v24Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY vtc_S3068C2[] = {
  ABISELECT(128,64),
  ABISELECT(120,60),
  ABISELECT(120,60),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN7S3068C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3068C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3068C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3068C23v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern VTBL_ENTRY _ZTV7S3068C2[];
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C4__7S3068C2[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__7S3068C4__7S3068C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C4__7S3068C2[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__7S3068C2[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C8__7S3068C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C93v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C9__7S3068C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C9__7S3068C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
static  VTT_ENTRY vtt_S3068C2[] = {
  {&(_ZTV7S3068C2[6]),  6,62},
  {&(_ZTV7S3068C2[31]),  31,62},
  {&(_ZTV7S3068C2[44]),  44,62},
  {&(_ZTV7S3068C2[54]),  54,62},
  {&(_ZTV7S3068C2[54]),  54,62},
  {&(_ZTV7S3068C2[61]),  61,62},
  {&(_tg__ZTV7S3068C4__7S3068C2[5]),  5,16},
  {&(_tg__ZTV7S3068C8__7S3068C4__7S3068C2[8]),  8,12},
  {&(_tg__ZTV7S3068C8__7S3068C4__7S3068C2[8]),  8,12},
  {&(_tg__ZTV8S3068C10__7S3068C4__7S3068C2[3]),  3,4},
  {&(_tg__ZTV7S3068C8__7S3068C2[5]),  5,9},
  {&(_tg__ZTV7S3068C8__7S3068C2[5]),  5,9},
  {&(_tg__ZTV8S3068C10__7S3068C8__7S3068C2[3]),  3,4},
  {&(_tg__ZTV7S3068C9__7S3068C2[3]),  3,4},
  {&(_tg__ZTV8S3068C10__7S3068C9__7S3068C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3068C2[];
extern  VTBL_ENTRY _ZTV7S3068C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C2[];
Class_Descriptor cd_S3068C2 = {  "S3068C2", // class name
  bases_S3068C2, 9,
  &(vtc_S3068C2[0]), // expected_vtbl_contents
  &(vtt_S3068C2[0]), // expected_vtt_contents
  ABISELECT(160,76), // object size
  NSPAIRA(_ZTI7S3068C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3068C2),62, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3068C2),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3068C13  {
  ::S3068C6 s3068c13f0[3];
  void *s3068c13f1;
  short s3068c13f2:8;
  virtual void  v25(); // _ZN8S3068C133v25Ev
  virtual void  v26(); // _ZN8S3068C133v26Ev
  virtual void  v27(); // _ZN8S3068C133v27Ev
  ~S3068C13(); // tgen
  S3068C13(); // tgen
};
//SIG(-1 S3068C13) C1{ v1 v2 v3 FC2{ BC3{ v6 v7 Fp FD Fi} v4 v5}[3] Fp Fs:8}


void  S3068C13 ::v25(){vfunc_called(this, "_ZN8S3068C133v25Ev");}
void  S3068C13 ::v26(){vfunc_called(this, "_ZN8S3068C133v26Ev");}
void  S3068C13 ::v27(){vfunc_called(this, "_ZN8S3068C133v27Ev");}
S3068C13 ::~S3068C13(){ note_dtor("S3068C13", this);} // tgen
S3068C13 ::S3068C13(){ note_ctor("S3068C13", this);} // tgen

static void Test_S3068C13()
{
  extern Class_Descriptor cd_S3068C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,22)];
    init_test(&cd_S3068C13, buf);
    S3068C13 *dp, &lv = *(dp=new (buf) S3068C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,84), "sizeof(S3068C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3068C13)");
    check_field_offset(lv, s3068c13f0, ABISELECT(16,4), "S3068C13.s3068c13f0");
    check_field_offset(lv, s3068c13f1, ABISELECT(160,76), "S3068C13.s3068c13f1");
    set_bf_and_test(lv, s3068c13f2, ABISELECT(168,80), 0, 8, 1, "S3068C13");
    set_bf_and_test(lv, s3068c13f2, ABISELECT(168,80), 0, 8, hide_sll(1LL<<7), "S3068C13");
    test_class_info(&lv, &cd_S3068C13);
    dp->~S3068C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C13(Test_S3068C13, "S3068C13", ABISELECT(176,84));

#else // __cplusplus

extern void _ZN8S3068C13C1Ev();
extern void _ZN8S3068C13D1Ev();
Name_Map name_map_S3068C13[] = {
  NSPAIR(_ZN8S3068C13C1Ev),
  NSPAIR(_ZN8S3068C13D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3068C13[];
extern void _ZN8S3068C133v25Ev();
extern void _ZN8S3068C133v26Ev();
extern void _ZN8S3068C133v27Ev();
static  VTBL_ENTRY vtc_S3068C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3068C13[0]),
  (VTBL_ENTRY)&_ZN8S3068C133v25Ev,
  (VTBL_ENTRY)&_ZN8S3068C133v26Ev,
  (VTBL_ENTRY)&_ZN8S3068C133v27Ev,
};
extern VTBL_ENTRY _ZTI8S3068C13[];
extern  VTBL_ENTRY _ZTV8S3068C13[];
Class_Descriptor cd_S3068C13 = {  "S3068C13", // class name
  0,0,//no base classes
  &(vtc_S3068C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,84), // object size
  NSPAIRA(_ZTI8S3068C13),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3068C13),5, //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  S3068C12  : S3068C13 , S3068C4 {
  virtual  ~S3068C12(); // _ZN8S3068C12D2Ev
  virtual void  v28(); // _ZN8S3068C123v28Ev
  virtual void  v29(); // _ZN8S3068C123v29Ev
  virtual void  v30(); // _ZN8S3068C123v30Ev
  virtual void  v31(); // _ZN8S3068C123v31Ev
  virtual void  v32(); // _ZN8S3068C123v32Ev
  virtual void  v33(); // _ZN8S3068C123v33Ev
  S3068C12(); // tgen
};
//SIG(-1 S3068C12) C1{ BC2{ v7 v8 v9 FC3{ BC4{ v10 v11 Fp FD Fi} v12 v13}[3] Fp Fs:8} BC5{ BC6{ BC3 BC4 v14 v15 v16 v17} VBC7{ VBC8{ VBC9{ v18 FC10{ v26 v27} Fp} v19} v20 v21 v22} v23 v24 v25} vd v1 v2 v3 v4 v5 v6}


 S3068C12 ::~S3068C12(){ note_dtor("S3068C12", this);}
void  S3068C12 ::v28(){vfunc_called(this, "_ZN8S3068C123v28Ev");}
void  S3068C12 ::v29(){vfunc_called(this, "_ZN8S3068C123v29Ev");}
void  S3068C12 ::v30(){vfunc_called(this, "_ZN8S3068C123v30Ev");}
void  S3068C12 ::v31(){vfunc_called(this, "_ZN8S3068C123v31Ev");}
void  S3068C12 ::v32(){vfunc_called(this, "_ZN8S3068C123v32Ev");}
void  S3068C12 ::v33(){vfunc_called(this, "_ZN8S3068C123v33Ev");}
S3068C12 ::S3068C12(){ note_ctor("S3068C12", this);} // tgen

static void Test_S3068C12()
{
  extern Class_Descriptor cd_S3068C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,38)];
    init_test(&cd_S3068C12, buf);
    S3068C12 *dp, &lv = *(dp=new (buf) S3068C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,148), "sizeof(S3068C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3068C12)");
    check_base_class_offset(lv, (S3068C13*), 0, "S3068C12");
    check_base_class_offset(lv, (S3068C7*)(S3068C6*)(S3068C5*)(S3068C4*), ABISELECT(176,84), "S3068C12");
    check_base_class_offset(lv, (S3068C6*)(S3068C5*)(S3068C4*), ABISELECT(176,84), "S3068C12");
    /*is_ambiguous_... S3068C5::S3068C7 */ AMB_check_base_class_offset(lv, (S3068C7*)(S3068C5*)(S3068C4*), ABISELECT(224,108), "S3068C12");
    check_base_class_offset(lv, (S3068C5*)(S3068C4*), ABISELECT(176,84), "S3068C12");
    check_base_class_offset(lv, (S3068C10*)(S3068C9*), ABISELECT(272,136), "S3068C12");
    check_base_class_offset(lv, (S3068C9*)(S3068C8*), ABISELECT(264,132), "S3068C12");
    check_base_class_offset(lv, (S3068C8*)(S3068C4*), ABISELECT(264,132), "S3068C12");
    check_base_class_offset(lv, (S3068C4*), ABISELECT(176,84), "S3068C12");
    test_class_info(&lv, &cd_S3068C12);
    dp->~S3068C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C12(Test_S3068C12, "S3068C12", ABISELECT(304,148));

#else // __cplusplus

extern void _ZN8S3068C12C1Ev();
extern void _ZN8S3068C12D2Ev();
Name_Map name_map_S3068C12[] = {
  NSPAIR(_ZN8S3068C12C1Ev),
  NSPAIR(_ZN8S3068C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3068C13;
extern VTBL_ENTRY _ZTI8S3068C13[];
extern  VTBL_ENTRY _ZTV8S3068C13[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C6;
extern VTBL_ENTRY _ZTI7S3068C6[];
extern  VTBL_ENTRY _ZTV7S3068C6[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C5;
extern VTBL_ENTRY _ZTI7S3068C5[];
extern  VTBL_ENTRY _ZTV7S3068C5[];
extern Class_Descriptor cd_S3068C10;
extern VTBL_ENTRY _ZTI8S3068C10[];
extern  VTBL_ENTRY _ZTV8S3068C10[];
extern Class_Descriptor cd_S3068C9;
extern VTBL_ENTRY _ZTI7S3068C9[];
extern  VTBL_ENTRY _ZTV7S3068C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C9[];
extern Class_Descriptor cd_S3068C8;
extern VTBL_ENTRY _ZTI7S3068C8[];
extern  VTBL_ENTRY _ZTV7S3068C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C8[];
extern Class_Descriptor cd_S3068C4;
extern VTBL_ENTRY _ZTI7S3068C4[];
extern  VTBL_ENTRY _ZTV7S3068C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C4[];
static Base_Class bases_S3068C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3068C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3068C7,    ABISELECT(176,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S3068C6,    ABISELECT(176,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S3068C7,    ABISELECT(224,108), //bcp->offset
    32, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S3068C5,    ABISELECT(176,84), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S3068C10,    ABISELECT(272,136), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //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
    6, //immediately_derived
  0, 1},
  {&cd_S3068C9,    ABISELECT(264,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3068C8,    ABISELECT(264,132), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //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
    8, //immediately_derived
  0, 1},
  {&cd_S3068C4,    ABISELECT(176,84), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3068C12[];
extern void _ZN8S3068C133v25Ev();
extern void _ZN8S3068C133v26Ev();
extern void _ZN8S3068C133v27Ev();
extern void _ZN8S3068C12D1Ev();
extern void _ZN8S3068C12D0Ev();
extern void _ZN8S3068C123v28Ev();
extern void _ZN8S3068C123v29Ev();
extern void _ZN8S3068C123v30Ev();
extern void _ZN8S3068C123v31Ev();
extern void _ZN8S3068C123v32Ev();
extern void _ZN8S3068C123v33Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY vtc_S3068C12[] = {
  ABISELECT(272,136),
  ABISELECT(264,132),
  ABISELECT(264,132),
  0,
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN8S3068C133v25Ev,
  (VTBL_ENTRY)&_ZN8S3068C133v26Ev,
  (VTBL_ENTRY)&_ZN8S3068C133v27Ev,
  (VTBL_ENTRY)&_ZN8S3068C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3068C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v28Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v29Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v30Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v31Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v32Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v33Ev,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-176,-84),
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
  ABISELECT(-224,-108),
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
  0,
  ABISELECT(-272,-136),
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern VTBL_ENTRY _ZTV8S3068C12[];
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C4__8S3068C12[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__7S3068C4__8S3068C12[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C4__8S3068C12[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__8S3068C12[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C8__8S3068C12[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C93v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C9__8S3068C12[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C9__8S3068C12[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
static  VTT_ENTRY vtt_S3068C12[] = {
  {&(_ZTV8S3068C12[5]),  5,52},
  {&(_tg__ZTV7S3068C4__8S3068C12[5]),  5,16},
  {&(_tg__ZTV7S3068C8__7S3068C4__8S3068C12[8]),  8,12},
  {&(_tg__ZTV7S3068C8__7S3068C4__8S3068C12[8]),  8,12},
  {&(_tg__ZTV8S3068C10__7S3068C4__8S3068C12[3]),  3,4},
  {&(_ZTV8S3068C12[21]),  21,52},
  {&(_ZTV8S3068C12[44]),  44,52},
  {&(_ZTV8S3068C12[44]),  44,52},
  {&(_ZTV8S3068C12[51]),  51,52},
  {&(_tg__ZTV7S3068C8__8S3068C12[5]),  5,9},
  {&(_tg__ZTV7S3068C8__8S3068C12[5]),  5,9},
  {&(_tg__ZTV8S3068C10__7S3068C8__8S3068C12[3]),  3,4},
  {&(_tg__ZTV7S3068C9__8S3068C12[3]),  3,4},
  {&(_tg__ZTV8S3068C10__7S3068C9__8S3068C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3068C12[];
extern  VTBL_ENTRY _ZTV8S3068C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3068C12[];
Class_Descriptor cd_S3068C12 = {  "S3068C12", // class name
  bases_S3068C12, 9,
  &(vtc_S3068C12[0]), // expected_vtbl_contents
  &(vtt_S3068C12[0]), // expected_vtt_contents
  ABISELECT(304,148), // object size
  NSPAIRA(_ZTI8S3068C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S3068C12),52, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3068C12),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3068C1  : S3068C2 , S3068C12 {
  virtual  ~S3068C1(); // _ZN7S3068C1D2Ev
  virtual void  v1(); // _ZN7S3068C12v1Ev
  S3068C1(); // tgen
};
//SIG(1 S3068C1) C1{ BC2{ BC3{ v2 v3 v4 v5 v6 v7} VBC4{ BC5{ BC6{ BC7{ v8 v9 Fp FD Fi} v10 v11} BC7 v12 v13 v14 v15} VBC8{ VBC9{ VBC10{ v16 FC11{ v34 v35} Fp} v17} v18 v19 v20} v21 v22 v23} vd v24 Fp FL:5} BC12{ BC13{ v25 v26 v27 FC6[3] Fp Fs:8} BC4 vd v28 v29 v30 v31 v32 v33} vd v1}


 S3068C1 ::~S3068C1(){ note_dtor("S3068C1", this);}
void  S3068C1 ::v1(){vfunc_called(this, "_ZN7S3068C12v1Ev");}
S3068C1 ::S3068C1(){ note_ctor("S3068C1", this);} // tgen

static void Test_S3068C1()
{
  extern Class_Descriptor cd_S3068C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(28,53)];
    init_test(&cd_S3068C1, buf);
    S3068C1 *dp, &lv = *(dp=new (buf) S3068C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,208), "sizeof(S3068C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3068C1)");
    check_base_class_offset(lv, (S3068C3*)(S3068C2*), 0, "S3068C1");
    /*is_ambiguous_... S3068C1::S3068C4 */ AMB_check_base_class_offset(lv, (S3068C7*)(S3068C6*)(S3068C5*)(S3068C4*), ABISELECT(304,144), "S3068C1");
    /*is_ambiguous_... S3068C1::S3068C4 */ AMB_check_base_class_offset(lv, (S3068C6*)(S3068C5*)(S3068C4*), ABISELECT(304,144), "S3068C1");
    /*is_ambiguous_... S3068C1::S3068C4 */ AMB_check_base_class_offset(lv, (S3068C7*)(S3068C5*)(S3068C4*), ABISELECT(352,168), "S3068C1");
    /*is_ambiguous_... S3068C1::S3068C4 */ AMB_check_base_class_offset(lv, (S3068C5*)(S3068C4*), ABISELECT(304,144), "S3068C1");
    check_base_class_offset(lv, (S3068C10*)(S3068C9*), ABISELECT(400,196), "S3068C1");
    check_base_class_offset(lv, (S3068C9*)(S3068C8*), ABISELECT(392,192), "S3068C1");
    /*is_ambiguous_... S3068C1::S3068C4 */ AMB_check_base_class_offset(lv, (S3068C8*)(S3068C4*), ABISELECT(392,192), "S3068C1");
    check_base_class_offset(lv, (S3068C8*)(S3068C4*)(S3068C12*), ABISELECT(392,192), "S3068C1");
    check_base_class_offset(lv, (S3068C4*)(S3068C2*), ABISELECT(304,144), "S3068C1");
    check_base_class_offset(lv, (S3068C2*), 0, "S3068C1");
    check_base_class_offset(lv, (S3068C13*)(S3068C12*), ABISELECT(32,12), "S3068C1");
    check_base_class_offset(lv, (S3068C7*)(S3068C6*)(S3068C5*)(S3068C4*)(S3068C12*), ABISELECT(208,96), "S3068C1");
    check_base_class_offset(lv, (S3068C6*)(S3068C5*)(S3068C4*)(S3068C12*), ABISELECT(208,96), "S3068C1");
    /*is_ambiguous_... S3068C5::S3068C7 */ AMB_check_base_class_offset(lv, (S3068C7*)(S3068C5*)(S3068C4*)(S3068C12*), ABISELECT(256,120), "S3068C1");
    check_base_class_offset(lv, (S3068C5*)(S3068C4*)(S3068C12*), ABISELECT(208,96), "S3068C1");
    check_base_class_offset(lv, (S3068C4*)(S3068C12*), ABISELECT(208,96), "S3068C1");
    check_base_class_offset(lv, (S3068C12*), ABISELECT(32,12), "S3068C1");
    test_class_info(&lv, &cd_S3068C1);
    dp->~S3068C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3068C1(Test_S3068C1, "S3068C1", ABISELECT(432,208));

#else // __cplusplus

extern void _ZN7S3068C1C1Ev();
extern void _ZN7S3068C1D2Ev();
Name_Map name_map_S3068C1[] = {
  NSPAIR(_ZN7S3068C1C1Ev),
  NSPAIR(_ZN7S3068C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3068C3;
extern VTBL_ENTRY _ZTI7S3068C3[];
extern  VTBL_ENTRY _ZTV7S3068C3[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C6;
extern VTBL_ENTRY _ZTI7S3068C6[];
extern  VTBL_ENTRY _ZTV7S3068C6[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C5;
extern VTBL_ENTRY _ZTI7S3068C5[];
extern  VTBL_ENTRY _ZTV7S3068C5[];
extern Class_Descriptor cd_S3068C10;
extern VTBL_ENTRY _ZTI8S3068C10[];
extern  VTBL_ENTRY _ZTV8S3068C10[];
extern Class_Descriptor cd_S3068C9;
extern VTBL_ENTRY _ZTI7S3068C9[];
extern  VTBL_ENTRY _ZTV7S3068C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C9[];
extern Class_Descriptor cd_S3068C8;
extern VTBL_ENTRY _ZTI7S3068C8[];
extern  VTBL_ENTRY _ZTV7S3068C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C8[];
extern Class_Descriptor cd_S3068C4;
extern VTBL_ENTRY _ZTI7S3068C4[];
extern  VTBL_ENTRY _ZTV7S3068C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C4[];
extern Class_Descriptor cd_S3068C2;
extern VTBL_ENTRY _ZTI7S3068C2[];
extern  VTBL_ENTRY _ZTV7S3068C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C2[];
extern Class_Descriptor cd_S3068C13;
extern VTBL_ENTRY _ZTI8S3068C13[];
extern  VTBL_ENTRY _ZTV8S3068C13[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C6;
extern VTBL_ENTRY _ZTI7S3068C6[];
extern  VTBL_ENTRY _ZTV7S3068C6[];
extern Class_Descriptor cd_S3068C7;
extern VTBL_ENTRY _ZTI7S3068C7[];
extern  VTBL_ENTRY _ZTV7S3068C7[];
extern Class_Descriptor cd_S3068C5;
extern VTBL_ENTRY _ZTI7S3068C5[];
extern  VTBL_ENTRY _ZTV7S3068C5[];
extern Class_Descriptor cd_S3068C4;
extern VTBL_ENTRY _ZTI7S3068C4[];
extern  VTBL_ENTRY _ZTV7S3068C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C4[];
extern Class_Descriptor cd_S3068C12;
extern VTBL_ENTRY _ZTI8S3068C12[];
extern  VTBL_ENTRY _ZTV8S3068C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3068C12[];
static Base_Class bases_S3068C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3068C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3068C7,    ABISELECT(304,144), //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S3068C6,    ABISELECT(304,144), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S3068C7,    ABISELECT(352,168), //bcp->offset
    79, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3068C5,    ABISELECT(304,144), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S3068C10,    ABISELECT(400,196), //bcp->offset
    95, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3068C9,    ABISELECT(392,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3068C8,    ABISELECT(392,192), //bcp->offset
    83, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3068C4,    ABISELECT(304,144), //bcp->offset
    52, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3068C2,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3068C13,    ABISELECT(32,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
    11, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3068C7,    ABISELECT(208,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
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3068C6,    ABISELECT(208,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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3068C7,    ABISELECT(256,120), //bcp->offset
    48, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S3068C5,    ABISELECT(208,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
    15, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3068C4,    ABISELECT(208,96), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3068C12,    ABISELECT(32,12), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3068C1[];
extern void _ZN7S3068C32v2Ev();
extern void _ZN7S3068C32v3Ev();
extern void _ZN7S3068C32v4Ev();
extern void _ZN7S3068C32v5Ev();
extern void _ZN7S3068C32v6Ev();
extern void _ZN7S3068C32v7Ev();
extern void _ZN7S3068C1D1Ev();
extern void _ZN7S3068C1D0Ev();
extern void _ZN7S3068C23v24Ev();
extern void _ZN7S3068C12v1Ev();
extern void _ZN8S3068C133v25Ev();
extern void _ZN8S3068C133v26Ev();
extern void _ZN8S3068C133v27Ev();
extern void ABISELECT(_ZThn32_N7S3068C1D1Ev,_ZThn12_N7S3068C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S3068C1D0Ev,_ZThn12_N7S3068C1D0Ev)();
extern void _ZN8S3068C123v28Ev();
extern void _ZN8S3068C123v29Ev();
extern void _ZN8S3068C123v30Ev();
extern void _ZN8S3068C123v31Ev();
extern void _ZN8S3068C123v32Ev();
extern void _ZN8S3068C123v33Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY vtc_S3068C1[] = {
  ABISELECT(400,196),
  ABISELECT(392,192),
  ABISELECT(392,192),
  ABISELECT(304,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C1[0]),
  (VTBL_ENTRY)&_ZN7S3068C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3068C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3068C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3068C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3068C12v1Ev,
  ABISELECT(368,184),
  ABISELECT(360,180),
  ABISELECT(360,180),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S3068C1[0]),
  (VTBL_ENTRY)&_ZN8S3068C133v25Ev,
  (VTBL_ENTRY)&_ZN8S3068C133v26Ev,
  (VTBL_ENTRY)&_ZN8S3068C133v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3068C1D1Ev,_ZThn12_N7S3068C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3068C1D0Ev,_ZThn12_N7S3068C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3068C123v28Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v29Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v30Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v31Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v32Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v33Ev,
  ABISELECT(192,100),
  ABISELECT(184,96),
  ABISELECT(184,96),
  ABISELECT(-208,-96),
  (VTBL_ENTRY)&(_ZTI7S3068C1[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
  ABISELECT(-256,-120),
  (VTBL_ENTRY)&(_ZTI7S3068C1[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-304,-144),
  (VTBL_ENTRY)&(_ZTI7S3068C1[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
  ABISELECT(-352,-168),
  (VTBL_ENTRY)&(_ZTI7S3068C1[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-392,-192),
  (VTBL_ENTRY)&(_ZTI7S3068C1[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
  0,
  ABISELECT(-400,-196),
  (VTBL_ENTRY)&(_ZTI7S3068C1[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern VTBL_ENTRY _ZTV7S3068C1[];
extern void _ZN7S3068C32v2Ev();
extern void _ZN7S3068C32v3Ev();
extern void _ZN7S3068C32v4Ev();
extern void _ZN7S3068C32v5Ev();
extern void _ZN7S3068C32v6Ev();
extern void _ZN7S3068C32v7Ev();
extern void _ZN7S3068C2D1Ev();
extern void _ZN7S3068C2D0Ev();
extern void _ZN7S3068C23v24Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C2__7S3068C1[] = {
  ABISELECT(400,196),
  ABISELECT(392,192),
  ABISELECT(392,192),
  ABISELECT(304,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN7S3068C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3068C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3068C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3068C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3068C23v24Ev,
};
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C4__7S3068C2__7S3068C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-304,-144),
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
};
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C77S3068C57S3068C4__A1__7S3068C2__7S3068C1[] = {
  ABISELECT(-352,-168),
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__7S3068C2__7S3068C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-392,-192),
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C2__7S3068C1[] = {
  0,
  ABISELECT(-400,-196),
  (VTBL_ENTRY)&(_ZTI7S3068C2[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN8S3068C133v25Ev();
extern void _ZN8S3068C133v26Ev();
extern void _ZN8S3068C133v27Ev();
extern void _ZN8S3068C12D1Ev();
extern void _ZN8S3068C12D0Ev();
extern void _ZN8S3068C123v28Ev();
extern void _ZN8S3068C123v29Ev();
extern void _ZN8S3068C123v30Ev();
extern void _ZN8S3068C123v31Ev();
extern void _ZN8S3068C123v32Ev();
extern void _ZN8S3068C123v33Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C12__7S3068C1[] = {
  ABISELECT(368,184),
  ABISELECT(360,180),
  ABISELECT(360,180),
  0,
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN8S3068C133v25Ev,
  (VTBL_ENTRY)&_ZN8S3068C133v26Ev,
  (VTBL_ENTRY)&_ZN8S3068C133v27Ev,
  (VTBL_ENTRY)&_ZN8S3068C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3068C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v28Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v29Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v30Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v31Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v32Ev,
  (VTBL_ENTRY)&_ZN8S3068C123v33Ev,
};
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C48S3068C12__A1__7S3068C1[] = {
  ABISELECT(192,100),
  ABISELECT(184,96),
  ABISELECT(184,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__7S3068C48S3068C12__A1__7S3068C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-184,-96),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C48S3068C12__A1__7S3068C1[] = {
  0,
  ABISELECT(-192,-100),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C4__8S3068C12__7S3068C1[] = {
  ABISELECT(192,100),
  ABISELECT(184,96),
  ABISELECT(184,96),
  ABISELECT(-176,-84),
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__8S3068C12__7S3068C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-360,-180),
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__8S3068C12__7S3068C1[] = {
  0,
  ABISELECT(-368,-184),
  (VTBL_ENTRY)&(_ZTI8S3068C12[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C72v8Ev();
extern void _ZN7S3068C72v9Ev();
extern void _ZN7S3068C63v10Ev();
extern void _ZN7S3068C63v11Ev();
extern void _ZN7S3068C53v12Ev();
extern void _ZN7S3068C53v13Ev();
extern void _ZN7S3068C53v14Ev();
extern void _ZN7S3068C53v15Ev();
extern void _ZN7S3068C43v21Ev();
extern void _ZN7S3068C43v22Ev();
extern void _ZN7S3068C43v23Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C4__7S3068C1[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C72v8Ev,
  (VTBL_ENTRY)&_ZN7S3068C72v9Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v10Ev,
  (VTBL_ENTRY)&_ZN7S3068C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3068C53v15Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3068C43v23Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__7S3068C4__7S3068C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C4__7S3068C1[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3068C4[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C93v17Ev();
extern void _ZN7S3068C83v18Ev();
extern void _ZN7S3068C83v19Ev();
extern void _ZN7S3068C83v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C8__7S3068C1[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v18Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3068C83v20Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C8__7S3068C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C8[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
extern void _ZN7S3068C93v17Ev();
static  VTBL_ENTRY _tg__ZTV7S3068C9__7S3068C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN7S3068C93v17Ev,
};
extern void _ZN8S3068C103v16Ev();
static  VTBL_ENTRY _tg__ZTV8S3068C10__7S3068C9__7S3068C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3068C9[0]),
  (VTBL_ENTRY)&_ZN8S3068C103v16Ev,
};
static  VTT_ENTRY vtt_S3068C1[] = {
  {&(_ZTV7S3068C1[6]),  6,99},
  {&(_tg__ZTV7S3068C2__7S3068C1[6]),  6,15},
  {&(_tg__ZTV7S3068C4__7S3068C2__7S3068C1[16]),  16,27},
  {&(_tg__ZTV7S3068C77S3068C57S3068C4__A1__7S3068C2__7S3068C1[2]),  2,4},
  {&(_tg__ZTV7S3068C8__7S3068C2__7S3068C1[8]),  8,12},
  {&(_tg__ZTV7S3068C8__7S3068C2__7S3068C1[8]),  8,12},
  {&(_tg__ZTV8S3068C10__7S3068C2__7S3068C1[3]),  3,4},
  {&(_tg__ZTV8S3068C12__7S3068C1[5]),  5,16},
  {&(_tg__ZTV7S3068C48S3068C12__A1__7S3068C1[5]),  5,16},
  {&(_tg__ZTV7S3068C8__7S3068C48S3068C12__A1__7S3068C1[8]),  8,12},
  {&(_tg__ZTV7S3068C8__7S3068C48S3068C12__A1__7S3068C1[8]),  8,12},
  {&(_tg__ZTV8S3068C10__7S3068C48S3068C12__A1__7S3068C1[3]),  3,4},
  {&(_tg__ZTV7S3068C4__8S3068C12__7S3068C1[5]),  5,16},
  {&(_tg__ZTV7S3068C8__8S3068C12__7S3068C1[8]),  8,12},
  {&(_tg__ZTV7S3068C8__8S3068C12__7S3068C1[8]),  8,12},
  {&(_tg__ZTV8S3068C10__8S3068C12__7S3068C1[3]),  3,4},
  {&(_ZTV7S3068C1[68]),  68,99},
  {&(_ZTV7S3068C1[81]),  81,99},
  {&(_ZTV7S3068C1[91]),  91,99},
  {&(_ZTV7S3068C1[91]),  91,99},
  {&(_ZTV7S3068C1[98]),  98,99},
  {&(_ZTV7S3068C1[21]),  21,99},
  {&(_ZTV7S3068C1[37]),  37,99},
  {&(_tg__ZTV7S3068C4__7S3068C1[5]),  5,16},
  {&(_tg__ZTV7S3068C8__7S3068C4__7S3068C1[8]),  8,12},
  {&(_tg__ZTV7S3068C8__7S3068C4__7S3068C1[8]),  8,12},
  {&(_tg__ZTV8S3068C10__7S3068C4__7S3068C1[3]),  3,4},
  {&(_tg__ZTV7S3068C8__7S3068C1[5]),  5,9},
  {&(_tg__ZTV7S3068C8__7S3068C1[5]),  5,9},
  {&(_tg__ZTV8S3068C10__7S3068C8__7S3068C1[3]),  3,4},
  {&(_tg__ZTV7S3068C9__7S3068C1[3]),  3,4},
  {&(_tg__ZTV8S3068C10__7S3068C9__7S3068C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3068C1[];
extern  VTBL_ENTRY _ZTV7S3068C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3068C1[];
Class_Descriptor cd_S3068C1 = {  "S3068C1", // class name
  bases_S3068C1, 17,
  &(vtc_S3068C1[0]), // expected_vtbl_contents
  &(vtt_S3068C1[0]), // expected_vtt_contents
  ABISELECT(432,208), // object size
  NSPAIRA(_ZTI7S3068C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3068C1),99, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3068C1),32, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2173C4  {
  ::S2366C5_nt s2173c4f0;
  int s2173c4f1[2];
  char s2173c4f2;
  virtual  ~S2173C4(); // _ZN7S2173C4D1Ev
  virtual void  v3(); // _ZN7S2173C42v3Ev
  virtual void  v4(); // _ZN7S2173C42v4Ev
  virtual void  v5(); // _ZN7S2173C42v5Ev
  S2173C4(); // tgen
};
//SIG(-1 S2173C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2173C4 ::~S2173C4(){ note_dtor("S2173C4", this);}
void  S2173C4 ::v3(){vfunc_called(this, "_ZN7S2173C42v3Ev");}
void  S2173C4 ::v4(){vfunc_called(this, "_ZN7S2173C42v4Ev");}
void  S2173C4 ::v5(){vfunc_called(this, "_ZN7S2173C42v5Ev");}
S2173C4 ::S2173C4(){ note_ctor("S2173C4", this);} // tgen

static void Test_S2173C4()
{
  extern Class_Descriptor cd_S2173C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2173C4, buf);
    S2173C4 *dp, &lv = *(dp=new (buf) S2173C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2173C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2173C4)");
    check_field_offset(lv, s2173c4f0, ABISELECT(8,4), "S2173C4.s2173c4f0");
    check_field_offset(lv, s2173c4f1, ABISELECT(24,16), "S2173C4.s2173c4f1");
    check_field_offset(lv, s2173c4f2, ABISELECT(32,24), "S2173C4.s2173c4f2");
    test_class_info(&lv, &cd_S2173C4);
    dp->~S2173C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2173C4(Test_S2173C4, "S2173C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2173C4C1Ev();
extern void _ZN7S2173C4D1Ev();
Name_Map name_map_S2173C4[] = {
  NSPAIR(_ZN7S2173C4C1Ev),
  NSPAIR(_ZN7S2173C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2173C4[];
extern void _ZN7S2173C4D1Ev();
extern void _ZN7S2173C4D0Ev();
extern void _ZN7S2173C42v3Ev();
extern void _ZN7S2173C42v4Ev();
extern void _ZN7S2173C42v5Ev();
static  VTBL_ENTRY vtc_S2173C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2173C4[0]),
  (VTBL_ENTRY)&_ZN7S2173C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2173C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2173C4[];
extern  VTBL_ENTRY _ZTV7S2173C4[];
Class_Descriptor cd_S2173C4 = {  "S2173C4", // class name
  0,0,//no base classes
  &(vtc_S2173C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2173C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2173C4),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  S2173C3  : S2173C4 {
  void *s2173c3f0;
  virtual void  v6(); // _ZN7S2173C32v6Ev
  virtual void  v7(); // _ZN7S2173C32v7Ev
  ~S2173C3(); // tgen
  S2173C3(); // tgen
};
//SIG(-1 S2173C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2173C3 ::v6(){vfunc_called(this, "_ZN7S2173C32v6Ev");}
void  S2173C3 ::v7(){vfunc_called(this, "_ZN7S2173C32v7Ev");}
S2173C3 ::~S2173C3(){ note_dtor("S2173C3", this);} // tgen
S2173C3 ::S2173C3(){ note_ctor("S2173C3", this);} // tgen

static void Test_S2173C3()
{
  extern Class_Descriptor cd_S2173C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2173C3, buf);
    S2173C3 *dp, &lv = *(dp=new (buf) S2173C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2173C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2173C3)");
    check_base_class_offset(lv, (S2173C4*), 0, "S2173C3");
    check_field_offset(lv, s2173c3f0, ABISELECT(40,28), "S2173C3.s2173c3f0");
    test_class_info(&lv, &cd_S2173C3);
    dp->~S2173C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2173C3(Test_S2173C3, "S2173C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2173C3C1Ev();
extern void _ZN7S2173C3D1Ev();
Name_Map name_map_S2173C3[] = {
  NSPAIR(_ZN7S2173C3C1Ev),
  NSPAIR(_ZN7S2173C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2173C4;
extern VTBL_ENTRY _ZTI7S2173C4[];
extern  VTBL_ENTRY _ZTV7S2173C4[];
static Base_Class bases_S2173C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2173C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2173C3[];
extern void _ZN7S2173C3D1Ev();
extern void _ZN7S2173C3D0Ev();
extern void _ZN7S2173C42v3Ev();
extern void _ZN7S2173C42v4Ev();
extern void _ZN7S2173C42v5Ev();
extern void _ZN7S2173C32v6Ev();
extern void _ZN7S2173C32v7Ev();
static  VTBL_ENTRY vtc_S2173C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2173C3[0]),
  (VTBL_ENTRY)&_ZN7S2173C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2173C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2173C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2173C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2173C3[];
extern  VTBL_ENTRY _ZTV7S2173C3[];
Class_Descriptor cd_S2173C3 = {  "S2173C3", // class name
  bases_S2173C3, 1,
  &(vtc_S2173C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2173C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2173C3),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  S2173C7_nt  {
  void *s2173c7f0;
  int s2173c7f1[2];
  ::S629C14 s2173c7f2;
  void  mf2173c7(); // _ZN10S2173C7_nt8mf2173c7Ev
};
//SIG(-1 S2173C7_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2173C7_nt ::mf2173c7(){}

//skip512 S2173C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2173C11_nt  {
  __tsi64 s2173c11f0[4];
};
//SIG(-1 S2173C11_nt) C1{ FL[4]}



//skip512 S2173C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2173C10_nt  {
  ::S2173C11_nt s2173c10f0;
  void  mf2173c10(); // _ZN11S2173C10_nt9mf2173c10Ev
};
//SIG(-1 S2173C10_nt) C1{ m FC2{ FL[4]}}


void  S2173C10_nt ::mf2173c10(){}

//skip512 S2173C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2173C14  {
  void *s2173c14f0;
  int s2173c14f1[2];
  ::S629C8_nt s2173c14f2;
  void  mf2173c14(); // _ZN8S2173C149mf2173c14Ev
};
//SIG(-1 S2173C14) C1{ m Fp Fi[2] FC2{ m}}


void  S2173C14 ::mf2173c14(){}

static void Test_S2173C14()
{
  {
    init_simple_test("S2173C14");
    S2173C14 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2173C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2173C14)");
    check_field_offset(lv, s2173c14f0, 0, "S2173C14.s2173c14f0");
    check_field_offset(lv, s2173c14f1, ABISELECT(8,4), "S2173C14.s2173c14f1");
    check_field_offset(lv, s2173c14f2, ABISELECT(16,12), "S2173C14.s2173c14f2");
  }
}
static Arrange_To_Call_Me vS2173C14(Test_S2173C14, "S2173C14", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2173C17_nt  {
  void *s2173c17f0;
  void  mf2173c17(); // _ZN11S2173C17_nt9mf2173c17Ev
};
//SIG(-1 S2173C17_nt) C1{ m Fp}


void  S2173C17_nt ::mf2173c17(){}

//skip512 S2173C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2173C2  : S2173C3 {
  void *s2173c2f0;
  int s2173c2f1;
  ::S2173C7_nt s2173c2f2;
  ::S2366C5_nt s2173c2f3;
  void *s2173c2f4;
  int s2173c2f5;
  void *s2173c2f6;
  int s2173c2f7;
  ::S2366C19 s2173c2f8;
  ::S2173C10_nt s2173c2f9;
  ::S2173C7_nt s2173c2f10;
  ::S2173C14 s2173c2f11;
  ::S2366C10_nt s2173c2f12;
  ::S2173C17_nt s2173c2f13;
  virtual  ~S2173C2(); // _ZN7S2173C2D1Ev
  virtual void  v8(); // _ZN7S2173C22v8Ev
  virtual void  v9(); // _ZN7S2173C22v9Ev
  virtual void  v10(); // _ZN7S2173C23v10Ev
  virtual void  v11(); // _ZN7S2173C23v11Ev
  virtual void  v12(); // _ZN7S2173C23v12Ev
  virtual void  v13(); // _ZN7S2173C23v13Ev
  S2173C2(); // tgen
};
//SIG(-1 S2173C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} vd v1 v2 v3 v4 v5 v6 Fp Fi FC6{ m Fp Fi[2] FC5} FC4 Fp Fi Fp Fi FC7{ m Fp} FC8{ m FC9{ FL[4]}} FC6 FC10{ m Fp Fi[2] FC11{ m}} FC12{ m Fp} FC13{ m Fp}}


 S2173C2 ::~S2173C2(){ note_dtor("S2173C2", this);}
void  S2173C2 ::v8(){vfunc_called(this, "_ZN7S2173C22v8Ev");}
void  S2173C2 ::v9(){vfunc_called(this, "_ZN7S2173C22v9Ev");}
void  S2173C2 ::v10(){vfunc_called(this, "_ZN7S2173C23v10Ev");}
void  S2173C2 ::v11(){vfunc_called(this, "_ZN7S2173C23v11Ev");}
void  S2173C2 ::v12(){vfunc_called(this, "_ZN7S2173C23v12Ev");}
void  S2173C2 ::v13(){vfunc_called(this, "_ZN7S2173C23v13Ev");}
S2173C2 ::S2173C2(){ note_ctor("S2173C2", this);} // tgen

static void Test_S2173C2()
{
  extern Class_Descriptor cd_S2173C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S2173C2, buf);
    S2173C2 *dp, &lv = *(dp=new (buf) S2173C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S2173C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2173C2)");
    check_base_class_offset(lv, (S2173C4*)(S2173C3*), 0, "S2173C2");
    check_base_class_offset(lv, (S2173C3*), 0, "S2173C2");
    check_field_offset(lv, s2173c2f0, ABISELECT(48,32), "S2173C2.s2173c2f0");
    check_field_offset(lv, s2173c2f1, ABISELECT(56,36), "S2173C2.s2173c2f1");
    check_field_offset(lv, s2173c2f2, ABISELECT(64,40), "S2173C2.s2173c2f2");
    check_field_offset(lv, s2173c2f3, ABISELECT(88,56), "S2173C2.s2173c2f3");
    check_field_offset(lv, s2173c2f4, ABISELECT(104,68), "S2173C2.s2173c2f4");
    check_field_offset(lv, s2173c2f5, ABISELECT(112,72), "S2173C2.s2173c2f5");
    check_field_offset(lv, s2173c2f6, ABISELECT(120,76), "S2173C2.s2173c2f6");
    check_field_offset(lv, s2173c2f7, ABISELECT(128,80), "S2173C2.s2173c2f7");
    check_field_offset(lv, s2173c2f8, ABISELECT(136,84), "S2173C2.s2173c2f8");
    check_field_offset(lv, s2173c2f9, ABISELECT(144,88), "S2173C2.s2173c2f9");
    check_field_offset(lv, s2173c2f10, ABISELECT(176,120), "S2173C2.s2173c2f10");
    check_field_offset(lv, s2173c2f11, ABISELECT(200,136), "S2173C2.s2173c2f11");
    check_field_offset(lv, s2173c2f12, ABISELECT(224,152), "S2173C2.s2173c2f12");
    check_field_offset(lv, s2173c2f13, ABISELECT(232,156), "S2173C2.s2173c2f13");
    test_class_info(&lv, &cd_S2173C2);
    dp->~S2173C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2173C2(Test_S2173C2, "S2173C2", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN7S2173C2C1Ev();
extern void _ZN7S2173C2D1Ev();
Name_Map name_map_S2173C2[] = {
  NSPAIR(_ZN7S2173C2C1Ev),
  NSPAIR(_ZN7S2173C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2173C4;
extern VTBL_ENTRY _ZTI7S2173C4[];
extern  VTBL_ENTRY _ZTV7S2173C4[];
extern Class_Descriptor cd_S2173C3;
extern VTBL_ENTRY _ZTI7S2173C3[];
extern  VTBL_ENTRY _ZTV7S2173C3[];
static Base_Class bases_S2173C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2173C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2173C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2173C2[];
extern void _ZN7S2173C2D1Ev();
extern void _ZN7S2173C2D0Ev();
extern void _ZN7S2173C42v3Ev();
extern void _ZN7S2173C42v4Ev();
extern void _ZN7S2173C42v5Ev();
extern void _ZN7S2173C32v6Ev();
extern void _ZN7S2173C32v7Ev();
extern void _ZN7S2173C22v8Ev();
extern void _ZN7S2173C22v9Ev();
extern void _ZN7S2173C23v10Ev();
extern void _ZN7S2173C23v11Ev();
extern void _ZN7S2173C23v12Ev();
extern void _ZN7S2173C23v13Ev();
static  VTBL_ENTRY vtc_S2173C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2173C2[0]),
  (VTBL_ENTRY)&_ZN7S2173C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2173C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2173C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2173C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2173C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2173C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2173C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2173C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2173C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2173C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S2173C2[];
extern  VTBL_ENTRY _ZTV7S2173C2[];
Class_Descriptor cd_S2173C2 = {  "S2173C2", // class name
  bases_S2173C2, 2,
  &(vtc_S2173C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI7S2173C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2173C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2173C1  : S2173C2 {
  int s2173c1f0;
  virtual  ~S2173C1(); // _ZN7S2173C1D1Ev
  virtual void  v1(); // _ZN7S2173C12v1Ev
  virtual void  v2(); // _ZN7S2173C12v2Ev
  S2173C1(); // tgen
};
//SIG(1 S2173C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 v9 v10 v11 v12 v13 Fp Fi FC7{ m Fp Fi[2] FC6} FC5 Fp Fi Fp Fi FC8{ m Fp} FC9{ m FC10{ FL[4]}} FC7 FC11{ m Fp Fi[2] FC12{ m}} FC13{ m Fp} FC14{ m Fp}} vd v1 v2 Fi}


 S2173C1 ::~S2173C1(){ note_dtor("S2173C1", this);}
void  S2173C1 ::v1(){vfunc_called(this, "_ZN7S2173C12v1Ev");}
void  S2173C1 ::v2(){vfunc_called(this, "_ZN7S2173C12v2Ev");}
S2173C1 ::S2173C1(){ note_ctor("S2173C1", this);} // tgen

static void Test_S2173C1()
{
  extern Class_Descriptor cd_S2173C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,42)];
    init_test(&cd_S2173C1, buf);
    S2173C1 *dp, &lv = *(dp=new (buf) S2173C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,164), "sizeof(S2173C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2173C1)");
    check_base_class_offset(lv, (S2173C4*)(S2173C3*)(S2173C2*), 0, "S2173C1");
    check_base_class_offset(lv, (S2173C3*)(S2173C2*), 0, "S2173C1");
    check_base_class_offset(lv, (S2173C2*), 0, "S2173C1");
    check_field_offset(lv, s2173c1f0, ABISELECT(240,160), "S2173C1.s2173c1f0");
    test_class_info(&lv, &cd_S2173C1);
    dp->~S2173C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2173C1(Test_S2173C1, "S2173C1", ABISELECT(248,164));

#else // __cplusplus

extern void _ZN7S2173C1C1Ev();
extern void _ZN7S2173C1D1Ev();
Name_Map name_map_S2173C1[] = {
  NSPAIR(_ZN7S2173C1C1Ev),
  NSPAIR(_ZN7S2173C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2173C4;
extern VTBL_ENTRY _ZTI7S2173C4[];
extern  VTBL_ENTRY _ZTV7S2173C4[];
extern Class_Descriptor cd_S2173C3;
extern VTBL_ENTRY _ZTI7S2173C3[];
extern  VTBL_ENTRY _ZTV7S2173C3[];
extern Class_Descriptor cd_S2173C2;
extern VTBL_ENTRY _ZTI7S2173C2[];
extern  VTBL_ENTRY _ZTV7S2173C2[];
static Base_Class bases_S2173C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2173C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2173C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2173C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2173C1[];
extern void _ZN7S2173C1D1Ev();
extern void _ZN7S2173C1D0Ev();
extern void _ZN7S2173C42v3Ev();
extern void _ZN7S2173C42v4Ev();
extern void _ZN7S2173C42v5Ev();
extern void _ZN7S2173C32v6Ev();
extern void _ZN7S2173C32v7Ev();
extern void _ZN7S2173C22v8Ev();
extern void _ZN7S2173C22v9Ev();
extern void _ZN7S2173C23v10Ev();
extern void _ZN7S2173C23v11Ev();
extern void _ZN7S2173C23v12Ev();
extern void _ZN7S2173C23v13Ev();
extern void _ZN7S2173C12v1Ev();
extern void _ZN7S2173C12v2Ev();
static  VTBL_ENTRY vtc_S2173C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2173C1[0]),
  (VTBL_ENTRY)&_ZN7S2173C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2173C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2173C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2173C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2173C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2173C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2173C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2173C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2173C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2173C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2173C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2173C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2173C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2173C1[];
extern  VTBL_ENTRY _ZTV7S2173C1[];
Class_Descriptor cd_S2173C1 = {  "S2173C1", // class name
  bases_S2173C1, 3,
  &(vtc_S2173C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,164), // object size
  NSPAIRA(_ZTI7S2173C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2173C1),17, //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  S2171C4  {
  ::S2366C5_nt s2171c4f0;
  int s2171c4f1[2];
  char s2171c4f2;
  virtual  ~S2171C4(); // _ZN7S2171C4D1Ev
  virtual void  v3(); // _ZN7S2171C42v3Ev
  virtual void  v4(); // _ZN7S2171C42v4Ev
  virtual void  v5(); // _ZN7S2171C42v5Ev
  S2171C4(); // tgen
};
//SIG(-1 S2171C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2171C4 ::~S2171C4(){ note_dtor("S2171C4", this);}
void  S2171C4 ::v3(){vfunc_called(this, "_ZN7S2171C42v3Ev");}
void  S2171C4 ::v4(){vfunc_called(this, "_ZN7S2171C42v4Ev");}
void  S2171C4 ::v5(){vfunc_called(this, "_ZN7S2171C42v5Ev");}
S2171C4 ::S2171C4(){ note_ctor("S2171C4", this);} // tgen

static void Test_S2171C4()
{
  extern Class_Descriptor cd_S2171C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2171C4, buf);
    S2171C4 *dp, &lv = *(dp=new (buf) S2171C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2171C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2171C4)");
    check_field_offset(lv, s2171c4f0, ABISELECT(8,4), "S2171C4.s2171c4f0");
    check_field_offset(lv, s2171c4f1, ABISELECT(24,16), "S2171C4.s2171c4f1");
    check_field_offset(lv, s2171c4f2, ABISELECT(32,24), "S2171C4.s2171c4f2");
    test_class_info(&lv, &cd_S2171C4);
    dp->~S2171C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2171C4(Test_S2171C4, "S2171C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2171C4C1Ev();
extern void _ZN7S2171C4D1Ev();
Name_Map name_map_S2171C4[] = {
  NSPAIR(_ZN7S2171C4C1Ev),
  NSPAIR(_ZN7S2171C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2171C4[];
extern void _ZN7S2171C4D1Ev();
extern void _ZN7S2171C4D0Ev();
extern void _ZN7S2171C42v3Ev();
extern void _ZN7S2171C42v4Ev();
extern void _ZN7S2171C42v5Ev();
static  VTBL_ENTRY vtc_S2171C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2171C4[0]),
  (VTBL_ENTRY)&_ZN7S2171C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2171C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2171C4[];
extern  VTBL_ENTRY _ZTV7S2171C4[];
Class_Descriptor cd_S2171C4 = {  "S2171C4", // class name
  0,0,//no base classes
  &(vtc_S2171C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2171C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2171C4),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  S2171C3  : S2171C4 {
  void *s2171c3f0;
  virtual void  v6(); // _ZN7S2171C32v6Ev
  virtual void  v7(); // _ZN7S2171C32v7Ev
  ~S2171C3(); // tgen
  S2171C3(); // tgen
};
//SIG(-1 S2171C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2171C3 ::v6(){vfunc_called(this, "_ZN7S2171C32v6Ev");}
void  S2171C3 ::v7(){vfunc_called(this, "_ZN7S2171C32v7Ev");}
S2171C3 ::~S2171C3(){ note_dtor("S2171C3", this);} // tgen
S2171C3 ::S2171C3(){ note_ctor("S2171C3", this);} // tgen

static void Test_S2171C3()
{
  extern Class_Descriptor cd_S2171C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2171C3, buf);
    S2171C3 *dp, &lv = *(dp=new (buf) S2171C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2171C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2171C3)");
    check_base_class_offset(lv, (S2171C4*), 0, "S2171C3");
    check_field_offset(lv, s2171c3f0, ABISELECT(40,28), "S2171C3.s2171c3f0");
    test_class_info(&lv, &cd_S2171C3);
    dp->~S2171C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2171C3(Test_S2171C3, "S2171C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2171C3C1Ev();
extern void _ZN7S2171C3D1Ev();
Name_Map name_map_S2171C3[] = {
  NSPAIR(_ZN7S2171C3C1Ev),
  NSPAIR(_ZN7S2171C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2171C4;
extern VTBL_ENTRY _ZTI7S2171C4[];
extern  VTBL_ENTRY _ZTV7S2171C4[];
static Base_Class bases_S2171C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2171C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2171C3[];
extern void _ZN7S2171C3D1Ev();
extern void _ZN7S2171C3D0Ev();
extern void _ZN7S2171C42v3Ev();
extern void _ZN7S2171C42v4Ev();
extern void _ZN7S2171C42v5Ev();
extern void _ZN7S2171C32v6Ev();
extern void _ZN7S2171C32v7Ev();
static  VTBL_ENTRY vtc_S2171C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2171C3[0]),
  (VTBL_ENTRY)&_ZN7S2171C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2171C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2171C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2171C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2171C3[];
extern  VTBL_ENTRY _ZTV7S2171C3[];
Class_Descriptor cd_S2171C3 = {  "S2171C3", // class name
  bases_S2171C3, 1,
  &(vtc_S2171C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2171C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2171C3),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  S2171C14_nt  {
  void *s2171c14f0;
  int s2171c14f1[2];
  ::S629C14 s2171c14f2;
  void  mf2171c14(); // _ZN11S2171C14_nt9mf2171c14Ev
};
//SIG(-1 S2171C14_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2171C14_nt ::mf2171c14(){}

//skip512 S2171C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2171C2  : S2171C3 {
  void *s2171c2f0;
  int s2171c2f1;
  ::S2173C14 s2171c2f2;
  ::S2366C5_nt s2171c2f3;
  void *s2171c2f4;
  int s2171c2f5;
  void *s2171c2f6;
  int s2171c2f7;
  ::S2366C19 s2171c2f8;
  ::S2173C10_nt s2171c2f9;
  ::S2173C7_nt s2171c2f10;
  ::S2171C14_nt s2171c2f11;
  ::S2366C10_nt s2171c2f12;
  ::S2173C17_nt s2171c2f13;
  virtual  ~S2171C2(); // _ZN7S2171C2D1Ev
  virtual void  v8(); // _ZN7S2171C22v8Ev
  virtual void  v9(); // _ZN7S2171C22v9Ev
  virtual void  v10(); // _ZN7S2171C23v10Ev
  virtual void  v11(); // _ZN7S2171C23v11Ev
  virtual void  v12(); // _ZN7S2171C23v12Ev
  virtual void  v13(); // _ZN7S2171C23v13Ev
  S2171C2(); // tgen
};
//SIG(-1 S2171C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} vd v1 v2 v3 v4 v5 v6 Fp Fi FC6{ m Fp Fi[2] FC7{ m}} FC4 Fp Fi Fp Fi FC8{ m Fp} FC9{ m FC10{ FL[4]}} FC11{ m Fp Fi[2] FC5} FC12{ m Fp Fi[2] FC5} FC13{ m Fp} FC14{ m Fp}}


 S2171C2 ::~S2171C2(){ note_dtor("S2171C2", this);}
void  S2171C2 ::v8(){vfunc_called(this, "_ZN7S2171C22v8Ev");}
void  S2171C2 ::v9(){vfunc_called(this, "_ZN7S2171C22v9Ev");}
void  S2171C2 ::v10(){vfunc_called(this, "_ZN7S2171C23v10Ev");}
void  S2171C2 ::v11(){vfunc_called(this, "_ZN7S2171C23v11Ev");}
void  S2171C2 ::v12(){vfunc_called(this, "_ZN7S2171C23v12Ev");}
void  S2171C2 ::v13(){vfunc_called(this, "_ZN7S2171C23v13Ev");}
S2171C2 ::S2171C2(){ note_ctor("S2171C2", this);} // tgen

static void Test_S2171C2()
{
  extern Class_Descriptor cd_S2171C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S2171C2, buf);
    S2171C2 *dp, &lv = *(dp=new (buf) S2171C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S2171C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2171C2)");
    check_base_class_offset(lv, (S2171C4*)(S2171C3*), 0, "S2171C2");
    check_base_class_offset(lv, (S2171C3*), 0, "S2171C2");
    check_field_offset(lv, s2171c2f0, ABISELECT(48,32), "S2171C2.s2171c2f0");
    check_field_offset(lv, s2171c2f1, ABISELECT(56,36), "S2171C2.s2171c2f1");
    check_field_offset(lv, s2171c2f2, ABISELECT(64,40), "S2171C2.s2171c2f2");
    check_field_offset(lv, s2171c2f3, ABISELECT(88,56), "S2171C2.s2171c2f3");
    check_field_offset(lv, s2171c2f4, ABISELECT(104,68), "S2171C2.s2171c2f4");
    check_field_offset(lv, s2171c2f5, ABISELECT(112,72), "S2171C2.s2171c2f5");
    check_field_offset(lv, s2171c2f6, ABISELECT(120,76), "S2171C2.s2171c2f6");
    check_field_offset(lv, s2171c2f7, ABISELECT(128,80), "S2171C2.s2171c2f7");
    check_field_offset(lv, s2171c2f8, ABISELECT(136,84), "S2171C2.s2171c2f8");
    check_field_offset(lv, s2171c2f9, ABISELECT(144,88), "S2171C2.s2171c2f9");
    check_field_offset(lv, s2171c2f10, ABISELECT(176,120), "S2171C2.s2171c2f10");
    check_field_offset(lv, s2171c2f11, ABISELECT(200,136), "S2171C2.s2171c2f11");
    check_field_offset(lv, s2171c2f12, ABISELECT(224,152), "S2171C2.s2171c2f12");
    check_field_offset(lv, s2171c2f13, ABISELECT(232,156), "S2171C2.s2171c2f13");
    test_class_info(&lv, &cd_S2171C2);
    dp->~S2171C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2171C2(Test_S2171C2, "S2171C2", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN7S2171C2C1Ev();
extern void _ZN7S2171C2D1Ev();
Name_Map name_map_S2171C2[] = {
  NSPAIR(_ZN7S2171C2C1Ev),
  NSPAIR(_ZN7S2171C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2171C4;
extern VTBL_ENTRY _ZTI7S2171C4[];
extern  VTBL_ENTRY _ZTV7S2171C4[];
extern Class_Descriptor cd_S2171C3;
extern VTBL_ENTRY _ZTI7S2171C3[];
extern  VTBL_ENTRY _ZTV7S2171C3[];
static Base_Class bases_S2171C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2171C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2171C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2171C2[];
extern void _ZN7S2171C2D1Ev();
extern void _ZN7S2171C2D0Ev();
extern void _ZN7S2171C42v3Ev();
extern void _ZN7S2171C42v4Ev();
extern void _ZN7S2171C42v5Ev();
extern void _ZN7S2171C32v6Ev();
extern void _ZN7S2171C32v7Ev();
extern void _ZN7S2171C22v8Ev();
extern void _ZN7S2171C22v9Ev();
extern void _ZN7S2171C23v10Ev();
extern void _ZN7S2171C23v11Ev();
extern void _ZN7S2171C23v12Ev();
extern void _ZN7S2171C23v13Ev();
static  VTBL_ENTRY vtc_S2171C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2171C2[0]),
  (VTBL_ENTRY)&_ZN7S2171C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2171C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2171C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2171C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2171C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2171C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2171C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2171C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2171C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2171C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S2171C2[];
extern  VTBL_ENTRY _ZTV7S2171C2[];
Class_Descriptor cd_S2171C2 = {  "S2171C2", // class name
  bases_S2171C2, 2,
  &(vtc_S2171C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI7S2171C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2171C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2171C1  : S2171C2 {
  char s2171c1f0;
  virtual  ~S2171C1(); // _ZN7S2171C1D1Ev
  virtual void  v1(); // _ZN7S2171C12v1Ev
  virtual void  v2(); // _ZN7S2171C12v2Ev
  S2171C1(); // tgen
};
//SIG(1 S2171C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 v9 v10 v11 v12 v13 Fp Fi FC7{ m Fp Fi[2] FC8{ m}} FC5 Fp Fi Fp Fi FC9{ m Fp} FC10{ m FC11{ FL[4]}} FC12{ m Fp Fi[2] FC6} FC13{ m Fp Fi[2] FC6} FC14{ m Fp} FC15{ m Fp}} vd v1 v2 Fc}


 S2171C1 ::~S2171C1(){ note_dtor("S2171C1", this);}
void  S2171C1 ::v1(){vfunc_called(this, "_ZN7S2171C12v1Ev");}
void  S2171C1 ::v2(){vfunc_called(this, "_ZN7S2171C12v2Ev");}
S2171C1 ::S2171C1(){ note_ctor("S2171C1", this);} // tgen

static void Test_S2171C1()
{
  extern Class_Descriptor cd_S2171C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,42)];
    init_test(&cd_S2171C1, buf);
    S2171C1 *dp, &lv = *(dp=new (buf) S2171C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,164), "sizeof(S2171C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2171C1)");
    check_base_class_offset(lv, (S2171C4*)(S2171C3*)(S2171C2*), 0, "S2171C1");
    check_base_class_offset(lv, (S2171C3*)(S2171C2*), 0, "S2171C1");
    check_base_class_offset(lv, (S2171C2*), 0, "S2171C1");
    check_field_offset(lv, s2171c1f0, ABISELECT(240,160), "S2171C1.s2171c1f0");
    test_class_info(&lv, &cd_S2171C1);
    dp->~S2171C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2171C1(Test_S2171C1, "S2171C1", ABISELECT(248,164));

#else // __cplusplus

extern void _ZN7S2171C1C1Ev();
extern void _ZN7S2171C1D1Ev();
Name_Map name_map_S2171C1[] = {
  NSPAIR(_ZN7S2171C1C1Ev),
  NSPAIR(_ZN7S2171C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2171C4;
extern VTBL_ENTRY _ZTI7S2171C4[];
extern  VTBL_ENTRY _ZTV7S2171C4[];
extern Class_Descriptor cd_S2171C3;
extern VTBL_ENTRY _ZTI7S2171C3[];
extern  VTBL_ENTRY _ZTV7S2171C3[];
extern Class_Descriptor cd_S2171C2;
extern VTBL_ENTRY _ZTI7S2171C2[];
extern  VTBL_ENTRY _ZTV7S2171C2[];
static Base_Class bases_S2171C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2171C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2171C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2171C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2171C1[];
extern void _ZN7S2171C1D1Ev();
extern void _ZN7S2171C1D0Ev();
extern void _ZN7S2171C42v3Ev();
extern void _ZN7S2171C42v4Ev();
extern void _ZN7S2171C42v5Ev();
extern void _ZN7S2171C32v6Ev();
extern void _ZN7S2171C32v7Ev();
extern void _ZN7S2171C22v8Ev();
extern void _ZN7S2171C22v9Ev();
extern void _ZN7S2171C23v10Ev();
extern void _ZN7S2171C23v11Ev();
extern void _ZN7S2171C23v12Ev();
extern void _ZN7S2171C23v13Ev();
extern void _ZN7S2171C12v1Ev();
extern void _ZN7S2171C12v2Ev();
static  VTBL_ENTRY vtc_S2171C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2171C1[0]),
  (VTBL_ENTRY)&_ZN7S2171C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2171C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2171C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2171C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2171C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2171C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2171C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2171C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2171C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2171C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2171C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2171C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2171C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2171C1[];
extern  VTBL_ENTRY _ZTV7S2171C1[];
Class_Descriptor cd_S2171C1 = {  "S2171C1", // class name
  bases_S2171C1, 3,
  &(vtc_S2171C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,164), // object size
  NSPAIRA(_ZTI7S2171C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2171C1),17, //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  S4473C3  {
  int s4473c3f0[4];
  ::S4474C4_nt s4473c3f1;
  int s4473c3f2;
  char s4473c3f3;
  ::S4474C5_nt s4473c3f4;
  int s4473c3f5;
  virtual  ~S4473C3(); // _ZN7S4473C3D1Ev
  virtual void  v2(); // _ZN7S4473C32v2Ev
  virtual void  v3(); // _ZN7S4473C32v3Ev
  virtual void  v4(); // _ZN7S4473C32v4Ev
  S4473C3(); // tgen
};
//SIG(-1 S4473C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4473C3 ::~S4473C3(){ note_dtor("S4473C3", this);}
void  S4473C3 ::v2(){vfunc_called(this, "_ZN7S4473C32v2Ev");}
void  S4473C3 ::v3(){vfunc_called(this, "_ZN7S4473C32v3Ev");}
void  S4473C3 ::v4(){vfunc_called(this, "_ZN7S4473C32v4Ev");}
S4473C3 ::S4473C3(){ note_ctor("S4473C3", this);} // tgen

static void Test_S4473C3()
{
  extern Class_Descriptor cd_S4473C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4473C3, buf);
    S4473C3 *dp, &lv = *(dp=new (buf) S4473C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4473C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4473C3)");
    check_field_offset(lv, s4473c3f0, ABISELECT(8,4), "S4473C3.s4473c3f0");
    check_field_offset(lv, s4473c3f1, ABISELECT(24,20), "S4473C3.s4473c3f1");
    check_field_offset(lv, s4473c3f2, ABISELECT(40,28), "S4473C3.s4473c3f2");
    check_field_offset(lv, s4473c3f3, ABISELECT(44,32), "S4473C3.s4473c3f3");
    check_field_offset(lv, s4473c3f4, ABISELECT(48,36), "S4473C3.s4473c3f4");
    check_field_offset(lv, s4473c3f5, ABISELECT(64,48), "S4473C3.s4473c3f5");
    test_class_info(&lv, &cd_S4473C3);
    dp->~S4473C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4473C3(Test_S4473C3, "S4473C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4473C3C1Ev();
extern void _ZN7S4473C3D1Ev();
Name_Map name_map_S4473C3[] = {
  NSPAIR(_ZN7S4473C3C1Ev),
  NSPAIR(_ZN7S4473C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4473C3[];
extern void _ZN7S4473C3D1Ev();
extern void _ZN7S4473C3D0Ev();
extern void _ZN7S4473C32v2Ev();
extern void _ZN7S4473C32v3Ev();
extern void _ZN7S4473C32v4Ev();
static  VTBL_ENTRY vtc_S4473C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4473C3[0]),
  (VTBL_ENTRY)&_ZN7S4473C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4473C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4473C3[];
extern  VTBL_ENTRY _ZTV7S4473C3[];
Class_Descriptor cd_S4473C3 = {  "S4473C3", // class name
  0,0,//no base classes
  &(vtc_S4473C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4473C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4473C3),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  S4473C6  {
  virtual  ~S4473C6(); // _ZN7S4473C6D1Ev
  virtual void  v5(); // _ZN7S4473C62v5Ev
  S4473C6(); // tgen
};
//SIG(-1 S4473C6) C1{ vd v1}


 S4473C6 ::~S4473C6(){ note_dtor("S4473C6", this);}
void  S4473C6 ::v5(){vfunc_called(this, "_ZN7S4473C62v5Ev");}
S4473C6 ::S4473C6(){ note_ctor("S4473C6", this);} // tgen

static void Test_S4473C6()
{
  extern Class_Descriptor cd_S4473C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4473C6, buf);
    S4473C6 *dp, &lv = *(dp=new (buf) S4473C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4473C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4473C6)");
    test_class_info(&lv, &cd_S4473C6);
    dp->~S4473C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4473C6(Test_S4473C6, "S4473C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4473C6C1Ev();
extern void _ZN7S4473C6D1Ev();
Name_Map name_map_S4473C6[] = {
  NSPAIR(_ZN7S4473C6C1Ev),
  NSPAIR(_ZN7S4473C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4473C6[];
extern void _ZN7S4473C6D1Ev();
extern void _ZN7S4473C6D0Ev();
extern void _ZN7S4473C62v5Ev();
static  VTBL_ENTRY vtc_S4473C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4473C6[0]),
  (VTBL_ENTRY)&_ZN7S4473C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4473C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4473C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4473C6[];
extern  VTBL_ENTRY _ZTV7S4473C6[];
Class_Descriptor cd_S4473C6 = {  "S4473C6", // class name
  0,0,//no base classes
  &(vtc_S4473C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4473C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4473C6),5, //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  S4473C2  : S4473C3 , S4473C6 {
  void *s4473c2f0;
  int s4473c2f1;
  void *s4473c2f2;
  virtual  ~S4473C2(); // _ZN7S4473C2D1Ev
  virtual void  v6(); // _ZN7S4473C22v6Ev
  virtual void  v7(); // _ZN7S4473C22v7Ev
  S4473C2(); // tgen
};
//SIG(-1 S4473C2) C1{ BC2{ vd v3 v4 v5 Fi[4] FC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} BC5{ vd v6} vd v1 v2 Fp Fi Fp}


 S4473C2 ::~S4473C2(){ note_dtor("S4473C2", this);}
void  S4473C2 ::v6(){vfunc_called(this, "_ZN7S4473C22v6Ev");}
void  S4473C2 ::v7(){vfunc_called(this, "_ZN7S4473C22v7Ev");}
S4473C2 ::S4473C2(){ note_ctor("S4473C2", this);} // tgen

static void Test_S4473C2()
{
  extern Class_Descriptor cd_S4473C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4473C2, buf);
    S4473C2 *dp, &lv = *(dp=new (buf) S4473C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4473C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4473C2)");
    check_base_class_offset(lv, (S4473C3*), 0, "S4473C2");
    check_base_class_offset(lv, (S4473C6*), ABISELECT(72,52), "S4473C2");
    check_field_offset(lv, s4473c2f0, ABISELECT(80,56), "S4473C2.s4473c2f0");
    check_field_offset(lv, s4473c2f1, ABISELECT(88,60), "S4473C2.s4473c2f1");
    check_field_offset(lv, s4473c2f2, ABISELECT(96,64), "S4473C2.s4473c2f2");
    test_class_info(&lv, &cd_S4473C2);
    dp->~S4473C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4473C2(Test_S4473C2, "S4473C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4473C2C1Ev();
extern void _ZN7S4473C2D1Ev();
Name_Map name_map_S4473C2[] = {
  NSPAIR(_ZN7S4473C2C1Ev),
  NSPAIR(_ZN7S4473C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4473C3;
extern VTBL_ENTRY _ZTI7S4473C3[];
extern  VTBL_ENTRY _ZTV7S4473C3[];
extern Class_Descriptor cd_S4473C6;
extern VTBL_ENTRY _ZTI7S4473C6[];
extern  VTBL_ENTRY _ZTV7S4473C6[];
static Base_Class bases_S4473C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4473C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4473C6,    ABISELECT(72,52), //bcp->offset
    9, //bcp->virtual_function_table_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 _ZTI7S4473C2[];
extern void _ZN7S4473C2D1Ev();
extern void _ZN7S4473C2D0Ev();
extern void _ZN7S4473C32v2Ev();
extern void _ZN7S4473C32v3Ev();
extern void _ZN7S4473C32v4Ev();
extern void _ZN7S4473C22v6Ev();
extern void _ZN7S4473C22v7Ev();
extern void ABISELECT(_ZThn72_N7S4473C2D1Ev,_ZThn52_N7S4473C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S4473C2D0Ev,_ZThn52_N7S4473C2D0Ev)();
extern void _ZN7S4473C62v5Ev();
static  VTBL_ENTRY vtc_S4473C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4473C2[0]),
  (VTBL_ENTRY)&_ZN7S4473C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4473C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4473C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4473C22v7Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4473C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4473C2D1Ev,_ZThn52_N7S4473C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4473C2D0Ev,_ZThn52_N7S4473C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4473C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4473C2[];
extern  VTBL_ENTRY _ZTV7S4473C2[];
Class_Descriptor cd_S4473C2 = {  "S4473C2", // class name
  bases_S4473C2, 2,
  &(vtc_S4473C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4473C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4473C2),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  S4473C8_nt  {
  int s4473c8f0;
  void *s4473c8f1[7];
  short s4473c8f2;
  char s4473c8f3[10];
};
//SIG(-1 S4473C8_nt) C1{ Fi Fp[7] Fs Fc[10]}



//skip512 S4473C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4473C12_nt  {
  void *s4473c12f0;
  int s4473c12f1;
  ::S629C14 s4473c12f2;
  void  mf4473c12(); // _ZN11S4473C12_nt9mf4473c12Ev
};
//SIG(-1 S4473C12_nt) C1{ m Fp Fi FC2{ m}}


void  S4473C12_nt ::mf4473c12(){}

//skip512 S4473C12_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4473C9_nt  {
  ::S2366C5_nt s4473c9f0;
  ::S4473C12_nt s4473c9f1;
  void  mf4473c9(); // _ZN10S4473C9_nt8mf4473c9Ev
};
//SIG(-1 S4473C9_nt) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m Fp Fi FC3}}


void  S4473C9_nt ::mf4473c9(){}

//skip512 S4473C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4473C7_nt  {
  ::S4473C8_nt s4473c7f0;
  void *s4473c7f1;
  char s4473c7f2[2];
  ::S4473C9_nt s4473c7f3;
  void  mf4473c7(); // _ZN10S4473C7_nt8mf4473c7Ev
  virtual  ~S4473C7_nt(); // _ZN10S4473C7_ntD1Ev
  S4473C7_nt(); // tgen
};
//SIG(-1 S4473C7_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 FC5}}}


void  S4473C7_nt ::mf4473c7(){}
 S4473C7_nt ::~S4473C7_nt(){ note_dtor("S4473C7_nt", this);}
S4473C7_nt ::S4473C7_nt(){ note_ctor("S4473C7_nt", this);} // tgen

//skip512 S4473C7_nt

#else // __cplusplus

extern void _ZN10S4473C7_ntC1Ev();
extern void _ZN10S4473C7_ntD1Ev();
Name_Map name_map_S4473C7_nt[] = {
  NSPAIR(_ZN10S4473C7_ntC1Ev),
  NSPAIR(_ZN10S4473C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4473C7_nt[];
extern void _ZN10S4473C7_ntD1Ev();
extern void _ZN10S4473C7_ntD0Ev();
static  VTBL_ENTRY vtc_S4473C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4473C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S4473C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4473C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4473C7_nt[];
VTBL_ENTRY *P__ZTI10S4473C7_nt = _ZTI10S4473C7_nt; 
extern  VTBL_ENTRY _ZTV10S4473C7_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4473C14  {
  char s4473c14f0;
  void *s4473c14f1;
  void  mf4473c14(); // _ZN8S4473C149mf4473c14Ev
};
//SIG(-1 S4473C14) C1{ m Fc Fp}


void  S4473C14 ::mf4473c14(){}

static void Test_S4473C14()
{
  {
    init_simple_test("S4473C14");
    S4473C14 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S4473C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4473C14)");
    check_field_offset(lv, s4473c14f0, 0, "S4473C14.s4473c14f0");
    check_field_offset(lv, s4473c14f1, ABISELECT(8,4), "S4473C14.s4473c14f1");
  }
}
static Arrange_To_Call_Me vS4473C14(Test_S4473C14, "S4473C14", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4473C1  : S4473C2 {
  ::S4473C7_nt s4473c1f0;
  void *s4473c1f1;
  ::S4473C14 s4473c1f2;
  virtual  ~S4473C1(); // _ZN7S4473C1D1Ev
  virtual void  v1(); // _ZN7S4473C12v1Ev
  S4473C1(); // tgen
};
//SIG(1 S4473C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} BC6{ vd v5} vd v6 v7 Fp Fi Fp} vd v1 FC7{ vd m FC8{ Fi Fp[7] Fs Fc[10]} Fp Fc[2] FC9{ m FC10{ m Fp Fi FC11{ m}} FC12{ m Fp Fi FC11}}} Fp FC13{ m Fc Fp}}


 S4473C1 ::~S4473C1(){ note_dtor("S4473C1", this);}
void  S4473C1 ::v1(){vfunc_called(this, "_ZN7S4473C12v1Ev");}
S4473C1 ::S4473C1(){ note_ctor("S4473C1", this);} // tgen

static void Test_S4473C1()
{
  extern Class_Descriptor cd_S4473C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,41)];
    init_test(&cd_S4473C1, buf);
    S4473C1 *dp, &lv = *(dp=new (buf) S4473C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,160), "sizeof(S4473C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4473C1)");
    check_base_class_offset(lv, (S4473C3*)(S4473C2*), 0, "S4473C1");
    check_base_class_offset(lv, (S4473C6*)(S4473C2*), ABISELECT(72,52), "S4473C1");
    check_base_class_offset(lv, (S4473C2*), 0, "S4473C1");
    check_field_offset(lv, s4473c1f0, ABISELECT(104,68), "S4473C1.s4473c1f0");
    check_field_offset(lv, s4473c1f1, ABISELECT(240,148), "S4473C1.s4473c1f1");
    check_field_offset(lv, s4473c1f2, ABISELECT(248,152), "S4473C1.s4473c1f2");
    test_class_info(&lv, &cd_S4473C1);
    dp->~S4473C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4473C1(Test_S4473C1, "S4473C1", ABISELECT(264,160));

#else // __cplusplus

extern void _ZN7S4473C1C1Ev();
extern void _ZN7S4473C1D1Ev();
Name_Map name_map_S4473C1[] = {
  NSPAIR(_ZN7S4473C1C1Ev),
  NSPAIR(_ZN7S4473C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4473C3;
extern VTBL_ENTRY _ZTI7S4473C3[];
extern  VTBL_ENTRY _ZTV7S4473C3[];
extern Class_Descriptor cd_S4473C6;
extern VTBL_ENTRY _ZTI7S4473C6[];
extern  VTBL_ENTRY _ZTV7S4473C6[];
extern Class_Descriptor cd_S4473C2;
extern VTBL_ENTRY _ZTI7S4473C2[];
extern  VTBL_ENTRY _ZTV7S4473C2[];
static Base_Class bases_S4473C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4473C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4473C6,    ABISELECT(72,52), //bcp->offset
    10, //bcp->virtual_function_table_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_S4473C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4473C1[];
extern void _ZN7S4473C1D1Ev();
extern void _ZN7S4473C1D0Ev();
extern void _ZN7S4473C32v2Ev();
extern void _ZN7S4473C32v3Ev();
extern void _ZN7S4473C32v4Ev();
extern void _ZN7S4473C22v6Ev();
extern void _ZN7S4473C22v7Ev();
extern void _ZN7S4473C12v1Ev();
extern void ABISELECT(_ZThn72_N7S4473C1D1Ev,_ZThn52_N7S4473C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4473C1D0Ev,_ZThn52_N7S4473C1D0Ev)();
extern void _ZN7S4473C62v5Ev();
static  VTBL_ENTRY vtc_S4473C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4473C1[0]),
  (VTBL_ENTRY)&_ZN7S4473C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4473C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4473C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4473C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4473C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4473C12v1Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4473C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4473C1D1Ev,_ZThn52_N7S4473C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4473C1D0Ev,_ZThn52_N7S4473C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4473C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4473C1[];
extern  VTBL_ENTRY _ZTV7S4473C1[];
Class_Descriptor cd_S4473C1 = {  "S4473C1", // class name
  bases_S4473C1, 3,
  &(vtc_S4473C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,160), // object size
  NSPAIRA(_ZTI7S4473C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4473C1),15, //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  S2175C4  {
  ::S4473C12_nt s2175c4f0;
  int s2175c4f1[2];
  char s2175c4f2;
  virtual  ~S2175C4(); // _ZN7S2175C4D1Ev
  virtual void  v3(); // _ZN7S2175C42v3Ev
  virtual void  v4(); // _ZN7S2175C42v4Ev
  virtual void  v5(); // _ZN7S2175C42v5Ev
  S2175C4(); // tgen
};
//SIG(-1 S2175C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2175C4 ::~S2175C4(){ note_dtor("S2175C4", this);}
void  S2175C4 ::v3(){vfunc_called(this, "_ZN7S2175C42v3Ev");}
void  S2175C4 ::v4(){vfunc_called(this, "_ZN7S2175C42v4Ev");}
void  S2175C4 ::v5(){vfunc_called(this, "_ZN7S2175C42v5Ev");}
S2175C4 ::S2175C4(){ note_ctor("S2175C4", this);} // tgen

static void Test_S2175C4()
{
  extern Class_Descriptor cd_S2175C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2175C4, buf);
    S2175C4 *dp, &lv = *(dp=new (buf) S2175C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2175C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2175C4)");
    check_field_offset(lv, s2175c4f0, ABISELECT(8,4), "S2175C4.s2175c4f0");
    check_field_offset(lv, s2175c4f1, ABISELECT(24,16), "S2175C4.s2175c4f1");
    check_field_offset(lv, s2175c4f2, ABISELECT(32,24), "S2175C4.s2175c4f2");
    test_class_info(&lv, &cd_S2175C4);
    dp->~S2175C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2175C4(Test_S2175C4, "S2175C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2175C4C1Ev();
extern void _ZN7S2175C4D1Ev();
Name_Map name_map_S2175C4[] = {
  NSPAIR(_ZN7S2175C4C1Ev),
  NSPAIR(_ZN7S2175C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2175C4[];
extern void _ZN7S2175C4D1Ev();
extern void _ZN7S2175C4D0Ev();
extern void _ZN7S2175C42v3Ev();
extern void _ZN7S2175C42v4Ev();
extern void _ZN7S2175C42v5Ev();
static  VTBL_ENTRY vtc_S2175C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2175C4[0]),
  (VTBL_ENTRY)&_ZN7S2175C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2175C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2175C4[];
extern  VTBL_ENTRY _ZTV7S2175C4[];
Class_Descriptor cd_S2175C4 = {  "S2175C4", // class name
  0,0,//no base classes
  &(vtc_S2175C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2175C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2175C4),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  S2175C3  : S2175C4 {
  void *s2175c3f0;
  virtual void  v6(); // _ZN7S2175C32v6Ev
  virtual void  v7(); // _ZN7S2175C32v7Ev
  ~S2175C3(); // tgen
  S2175C3(); // tgen
};
//SIG(-1 S2175C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2175C3 ::v6(){vfunc_called(this, "_ZN7S2175C32v6Ev");}
void  S2175C3 ::v7(){vfunc_called(this, "_ZN7S2175C32v7Ev");}
S2175C3 ::~S2175C3(){ note_dtor("S2175C3", this);} // tgen
S2175C3 ::S2175C3(){ note_ctor("S2175C3", this);} // tgen

static void Test_S2175C3()
{
  extern Class_Descriptor cd_S2175C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2175C3, buf);
    S2175C3 *dp, &lv = *(dp=new (buf) S2175C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2175C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2175C3)");
    check_base_class_offset(lv, (S2175C4*), 0, "S2175C3");
    check_field_offset(lv, s2175c3f0, ABISELECT(40,28), "S2175C3.s2175c3f0");
    test_class_info(&lv, &cd_S2175C3);
    dp->~S2175C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2175C3(Test_S2175C3, "S2175C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2175C3C1Ev();
extern void _ZN7S2175C3D1Ev();
Name_Map name_map_S2175C3[] = {
  NSPAIR(_ZN7S2175C3C1Ev),
  NSPAIR(_ZN7S2175C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2175C4;
extern VTBL_ENTRY _ZTI7S2175C4[];
extern  VTBL_ENTRY _ZTV7S2175C4[];
static Base_Class bases_S2175C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2175C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2175C3[];
extern void _ZN7S2175C3D1Ev();
extern void _ZN7S2175C3D0Ev();
extern void _ZN7S2175C42v3Ev();
extern void _ZN7S2175C42v4Ev();
extern void _ZN7S2175C42v5Ev();
extern void _ZN7S2175C32v6Ev();
extern void _ZN7S2175C32v7Ev();
static  VTBL_ENTRY vtc_S2175C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2175C3[0]),
  (VTBL_ENTRY)&_ZN7S2175C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2175C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2175C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2175C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2175C3[];
extern  VTBL_ENTRY _ZTV7S2175C3[];
Class_Descriptor cd_S2175C3 = {  "S2175C3", // class name
  bases_S2175C3, 1,
  &(vtc_S2175C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2175C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2175C3),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  S2175C2  : S2175C3 {
  void *s2175c2f0;
  int s2175c2f1;
  ::S2173C14 s2175c2f2;
  ::S4473C12_nt s2175c2f3;
  void *s2175c2f4;
  int s2175c2f5;
  void *s2175c2f6;
  int s2175c2f7;
  ::S2366C19 s2175c2f8;
  ::S2173C10_nt s2175c2f9;
  ::S2173C7_nt s2175c2f10;
  ::S2171C14_nt s2175c2f11;
  ::S2366C10_nt s2175c2f12;
  ::S2173C17_nt s2175c2f13;
  virtual  ~S2175C2(); // _ZN7S2175C2D1Ev
  virtual void  v8(); // _ZN7S2175C22v8Ev
  virtual void  v9(); // _ZN7S2175C22v9Ev
  virtual void  v10(); // _ZN7S2175C23v10Ev
  virtual void  v11(); // _ZN7S2175C23v11Ev
  virtual void  v12(); // _ZN7S2175C23v12Ev
  virtual void  v13(); // _ZN7S2175C23v13Ev
  S2175C2(); // tgen
};
//SIG(-1 S2175C2) C1{ BC2{ BC3{ vd v7 v8 v9 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v10 v11 Fp} vd v1 v2 v3 v4 v5 v6 Fp Fi FC6{ m Fp Fi[2] FC7{ m}} FC4 Fp Fi Fp Fi FC8{ m Fp} FC9{ m FC10{ FL[4]}} FC11{ m Fp Fi[2] FC5} FC12{ m Fp Fi[2] FC5} FC13{ m Fp} FC14{ m Fp}}


 S2175C2 ::~S2175C2(){ note_dtor("S2175C2", this);}
void  S2175C2 ::v8(){vfunc_called(this, "_ZN7S2175C22v8Ev");}
void  S2175C2 ::v9(){vfunc_called(this, "_ZN7S2175C22v9Ev");}
void  S2175C2 ::v10(){vfunc_called(this, "_ZN7S2175C23v10Ev");}
void  S2175C2 ::v11(){vfunc_called(this, "_ZN7S2175C23v11Ev");}
void  S2175C2 ::v12(){vfunc_called(this, "_ZN7S2175C23v12Ev");}
void  S2175C2 ::v13(){vfunc_called(this, "_ZN7S2175C23v13Ev");}
S2175C2 ::S2175C2(){ note_ctor("S2175C2", this);} // tgen

static void Test_S2175C2()
{
  extern Class_Descriptor cd_S2175C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S2175C2, buf);
    S2175C2 *dp, &lv = *(dp=new (buf) S2175C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S2175C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2175C2)");
    check_base_class_offset(lv, (S2175C4*)(S2175C3*), 0, "S2175C2");
    check_base_class_offset(lv, (S2175C3*), 0, "S2175C2");
    check_field_offset(lv, s2175c2f0, ABISELECT(48,32), "S2175C2.s2175c2f0");
    check_field_offset(lv, s2175c2f1, ABISELECT(56,36), "S2175C2.s2175c2f1");
    check_field_offset(lv, s2175c2f2, ABISELECT(64,40), "S2175C2.s2175c2f2");
    check_field_offset(lv, s2175c2f3, ABISELECT(88,56), "S2175C2.s2175c2f3");
    check_field_offset(lv, s2175c2f4, ABISELECT(104,68), "S2175C2.s2175c2f4");
    check_field_offset(lv, s2175c2f5, ABISELECT(112,72), "S2175C2.s2175c2f5");
    check_field_offset(lv, s2175c2f6, ABISELECT(120,76), "S2175C2.s2175c2f6");
    check_field_offset(lv, s2175c2f7, ABISELECT(128,80), "S2175C2.s2175c2f7");
    check_field_offset(lv, s2175c2f8, ABISELECT(136,84), "S2175C2.s2175c2f8");
    check_field_offset(lv, s2175c2f9, ABISELECT(144,88), "S2175C2.s2175c2f9");
    check_field_offset(lv, s2175c2f10, ABISELECT(176,120), "S2175C2.s2175c2f10");
    check_field_offset(lv, s2175c2f11, ABISELECT(200,136), "S2175C2.s2175c2f11");
    check_field_offset(lv, s2175c2f12, ABISELECT(224,152), "S2175C2.s2175c2f12");
    check_field_offset(lv, s2175c2f13, ABISELECT(232,156), "S2175C2.s2175c2f13");
    test_class_info(&lv, &cd_S2175C2);
    dp->~S2175C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2175C2(Test_S2175C2, "S2175C2", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN7S2175C2C1Ev();
extern void _ZN7S2175C2D1Ev();
Name_Map name_map_S2175C2[] = {
  NSPAIR(_ZN7S2175C2C1Ev),
  NSPAIR(_ZN7S2175C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2175C4;
extern VTBL_ENTRY _ZTI7S2175C4[];
extern  VTBL_ENTRY _ZTV7S2175C4[];
extern Class_Descriptor cd_S2175C3;
extern VTBL_ENTRY _ZTI7S2175C3[];
extern  VTBL_ENTRY _ZTV7S2175C3[];
static Base_Class bases_S2175C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2175C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2175C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2175C2[];
extern void _ZN7S2175C2D1Ev();
extern void _ZN7S2175C2D0Ev();
extern void _ZN7S2175C42v3Ev();
extern void _ZN7S2175C42v4Ev();
extern void _ZN7S2175C42v5Ev();
extern void _ZN7S2175C32v6Ev();
extern void _ZN7S2175C32v7Ev();
extern void _ZN7S2175C22v8Ev();
extern void _ZN7S2175C22v9Ev();
extern void _ZN7S2175C23v10Ev();
extern void _ZN7S2175C23v11Ev();
extern void _ZN7S2175C23v12Ev();
extern void _ZN7S2175C23v13Ev();
static  VTBL_ENTRY vtc_S2175C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2175C2[0]),
  (VTBL_ENTRY)&_ZN7S2175C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2175C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2175C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2175C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2175C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2175C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2175C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2175C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2175C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2175C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S2175C2[];
extern  VTBL_ENTRY _ZTV7S2175C2[];
Class_Descriptor cd_S2175C2 = {  "S2175C2", // class name
  bases_S2175C2, 2,
  &(vtc_S2175C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI7S2175C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2175C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2175C1  : S2175C2 {
  virtual  ~S2175C1(); // _ZN7S2175C1D1Ev
  virtual void  v1(); // _ZN7S2175C12v1Ev
  virtual void  v2(); // _ZN7S2175C12v2Ev
  S2175C1(); // tgen
};
//SIG(1 S2175C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 v9 v10 v11 v12 v13 Fp Fi FC7{ m Fp Fi[2] FC8{ m}} FC5 Fp Fi Fp Fi FC9{ m Fp} FC10{ m FC11{ FL[4]}} FC12{ m Fp Fi[2] FC6} FC13{ m Fp Fi[2] FC6} FC14{ m Fp} FC15{ m Fp}} vd v1 v2}


 S2175C1 ::~S2175C1(){ note_dtor("S2175C1", this);}
void  S2175C1 ::v1(){vfunc_called(this, "_ZN7S2175C12v1Ev");}
void  S2175C1 ::v2(){vfunc_called(this, "_ZN7S2175C12v2Ev");}
S2175C1 ::S2175C1(){ note_ctor("S2175C1", this);} // tgen

static void Test_S2175C1()
{
  extern Class_Descriptor cd_S2175C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,41)];
    init_test(&cd_S2175C1, buf);
    S2175C1 *dp, &lv = *(dp=new (buf) S2175C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S2175C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2175C1)");
    check_base_class_offset(lv, (S2175C4*)(S2175C3*)(S2175C2*), 0, "S2175C1");
    check_base_class_offset(lv, (S2175C3*)(S2175C2*), 0, "S2175C1");
    check_base_class_offset(lv, (S2175C2*), 0, "S2175C1");
    test_class_info(&lv, &cd_S2175C1);
    dp->~S2175C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2175C1(Test_S2175C1, "S2175C1", ABISELECT(240,160));

#else // __cplusplus

extern void _ZN7S2175C1C1Ev();
extern void _ZN7S2175C1D1Ev();
Name_Map name_map_S2175C1[] = {
  NSPAIR(_ZN7S2175C1C1Ev),
  NSPAIR(_ZN7S2175C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2175C4;
extern VTBL_ENTRY _ZTI7S2175C4[];
extern  VTBL_ENTRY _ZTV7S2175C4[];
extern Class_Descriptor cd_S2175C3;
extern VTBL_ENTRY _ZTI7S2175C3[];
extern  VTBL_ENTRY _ZTV7S2175C3[];
extern Class_Descriptor cd_S2175C2;
extern VTBL_ENTRY _ZTI7S2175C2[];
extern  VTBL_ENTRY _ZTV7S2175C2[];
static Base_Class bases_S2175C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2175C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2175C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2175C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2175C1[];
extern void _ZN7S2175C1D1Ev();
extern void _ZN7S2175C1D0Ev();
extern void _ZN7S2175C42v3Ev();
extern void _ZN7S2175C42v4Ev();
extern void _ZN7S2175C42v5Ev();
extern void _ZN7S2175C32v6Ev();
extern void _ZN7S2175C32v7Ev();
extern void _ZN7S2175C22v8Ev();
extern void _ZN7S2175C22v9Ev();
extern void _ZN7S2175C23v10Ev();
extern void _ZN7S2175C23v11Ev();
extern void _ZN7S2175C23v12Ev();
extern void _ZN7S2175C23v13Ev();
extern void _ZN7S2175C12v1Ev();
extern void _ZN7S2175C12v2Ev();
static  VTBL_ENTRY vtc_S2175C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2175C1[0]),
  (VTBL_ENTRY)&_ZN7S2175C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2175C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2175C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2175C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2175C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2175C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2175C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2175C23v10Ev,
  (VTBL_ENTRY)&_ZN7S2175C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2175C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2175C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2175C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2175C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2175C1[];
extern  VTBL_ENTRY _ZTV7S2175C1[];
Class_Descriptor cd_S2175C1 = {  "S2175C1", // class name
  bases_S2175C1, 3,
  &(vtc_S2175C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,160), // object size
  NSPAIRA(_ZTI7S2175C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2175C1),17, //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  S4478C3  {
  int s4478c3f0[4];
  ::S4474C4_nt s4478c3f1;
  int s4478c3f2;
  char s4478c3f3;
  ::S4474C5_nt s4478c3f4;
  int s4478c3f5;
  virtual  ~S4478C3(); // _ZN7S4478C3D1Ev
  virtual void  v2(); // _ZN7S4478C32v2Ev
  virtual void  v3(); // _ZN7S4478C32v3Ev
  virtual void  v4(); // _ZN7S4478C32v4Ev
  S4478C3(); // tgen
};
//SIG(-1 S4478C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4478C3 ::~S4478C3(){ note_dtor("S4478C3", this);}
void  S4478C3 ::v2(){vfunc_called(this, "_ZN7S4478C32v2Ev");}
void  S4478C3 ::v3(){vfunc_called(this, "_ZN7S4478C32v3Ev");}
void  S4478C3 ::v4(){vfunc_called(this, "_ZN7S4478C32v4Ev");}
S4478C3 ::S4478C3(){ note_ctor("S4478C3", this);} // tgen

static void Test_S4478C3()
{
  extern Class_Descriptor cd_S4478C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4478C3, buf);
    S4478C3 *dp, &lv = *(dp=new (buf) S4478C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4478C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4478C3)");
    check_field_offset(lv, s4478c3f0, ABISELECT(8,4), "S4478C3.s4478c3f0");
    check_field_offset(lv, s4478c3f1, ABISELECT(24,20), "S4478C3.s4478c3f1");
    check_field_offset(lv, s4478c3f2, ABISELECT(40,28), "S4478C3.s4478c3f2");
    check_field_offset(lv, s4478c3f3, ABISELECT(44,32), "S4478C3.s4478c3f3");
    check_field_offset(lv, s4478c3f4, ABISELECT(48,36), "S4478C3.s4478c3f4");
    check_field_offset(lv, s4478c3f5, ABISELECT(64,48), "S4478C3.s4478c3f5");
    test_class_info(&lv, &cd_S4478C3);
    dp->~S4478C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4478C3(Test_S4478C3, "S4478C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4478C3C1Ev();
extern void _ZN7S4478C3D1Ev();
Name_Map name_map_S4478C3[] = {
  NSPAIR(_ZN7S4478C3C1Ev),
  NSPAIR(_ZN7S4478C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4478C3[];
extern void _ZN7S4478C3D1Ev();
extern void _ZN7S4478C3D0Ev();
extern void _ZN7S4478C32v2Ev();
extern void _ZN7S4478C32v3Ev();
extern void _ZN7S4478C32v4Ev();
static  VTBL_ENTRY vtc_S4478C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4478C3[0]),
  (VTBL_ENTRY)&_ZN7S4478C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4478C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4478C3[];
extern  VTBL_ENTRY _ZTV7S4478C3[];
Class_Descriptor cd_S4478C3 = {  "S4478C3", // class name
  0,0,//no base classes
  &(vtc_S4478C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4478C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4478C3),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  S4478C6  {
  virtual  ~S4478C6(); // _ZN7S4478C6D1Ev
  virtual void  v5(); // _ZN7S4478C62v5Ev
  S4478C6(); // tgen
};
//SIG(-1 S4478C6) C1{ vd v1}


 S4478C6 ::~S4478C6(){ note_dtor("S4478C6", this);}
void  S4478C6 ::v5(){vfunc_called(this, "_ZN7S4478C62v5Ev");}
S4478C6 ::S4478C6(){ note_ctor("S4478C6", this);} // tgen

static void Test_S4478C6()
{
  extern Class_Descriptor cd_S4478C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4478C6, buf);
    S4478C6 *dp, &lv = *(dp=new (buf) S4478C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4478C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4478C6)");
    test_class_info(&lv, &cd_S4478C6);
    dp->~S4478C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4478C6(Test_S4478C6, "S4478C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4478C6C1Ev();
extern void _ZN7S4478C6D1Ev();
Name_Map name_map_S4478C6[] = {
  NSPAIR(_ZN7S4478C6C1Ev),
  NSPAIR(_ZN7S4478C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4478C6[];
extern void _ZN7S4478C6D1Ev();
extern void _ZN7S4478C6D0Ev();
extern void _ZN7S4478C62v5Ev();
static  VTBL_ENTRY vtc_S4478C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4478C6[0]),
  (VTBL_ENTRY)&_ZN7S4478C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4478C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4478C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4478C6[];
extern  VTBL_ENTRY _ZTV7S4478C6[];
Class_Descriptor cd_S4478C6 = {  "S4478C6", // class name
  0,0,//no base classes
  &(vtc_S4478C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4478C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4478C6),5, //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  S4478C2  : S4478C3 , S4478C6 {
  void *s4478c2f0;
  int s4478c2f1;
  void *s4478c2f2;
  virtual  ~S4478C2(); // _ZN7S4478C2D1Ev
  virtual void  v6(); // _ZN7S4478C22v6Ev
  virtual void  v7(); // _ZN7S4478C22v7Ev
  S4478C2(); // tgen
};
//SIG(-1 S4478C2) C1{ BC2{ vd v3 v4 v5 Fi[4] FC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} BC5{ vd v6} vd v1 v2 Fp Fi Fp}


 S4478C2 ::~S4478C2(){ note_dtor("S4478C2", this);}
void  S4478C2 ::v6(){vfunc_called(this, "_ZN7S4478C22v6Ev");}
void  S4478C2 ::v7(){vfunc_called(this, "_ZN7S4478C22v7Ev");}
S4478C2 ::S4478C2(){ note_ctor("S4478C2", this);} // tgen

static void Test_S4478C2()
{
  extern Class_Descriptor cd_S4478C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4478C2, buf);
    S4478C2 *dp, &lv = *(dp=new (buf) S4478C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4478C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4478C2)");
    check_base_class_offset(lv, (S4478C3*), 0, "S4478C2");
    check_base_class_offset(lv, (S4478C6*), ABISELECT(72,52), "S4478C2");
    check_field_offset(lv, s4478c2f0, ABISELECT(80,56), "S4478C2.s4478c2f0");
    check_field_offset(lv, s4478c2f1, ABISELECT(88,60), "S4478C2.s4478c2f1");
    check_field_offset(lv, s4478c2f2, ABISELECT(96,64), "S4478C2.s4478c2f2");
    test_class_info(&lv, &cd_S4478C2);
    dp->~S4478C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4478C2(Test_S4478C2, "S4478C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4478C2C1Ev();
extern void _ZN7S4478C2D1Ev();
Name_Map name_map_S4478C2[] = {
  NSPAIR(_ZN7S4478C2C1Ev),
  NSPAIR(_ZN7S4478C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4478C3;
extern VTBL_ENTRY _ZTI7S4478C3[];
extern  VTBL_ENTRY _ZTV7S4478C3[];
extern Class_Descriptor cd_S4478C6;
extern VTBL_ENTRY _ZTI7S4478C6[];
extern  VTBL_ENTRY _ZTV7S4478C6[];
static Base_Class bases_S4478C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4478C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4478C6,    ABISELECT(72,52), //bcp->offset
    9, //bcp->virtual_function_table_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 _ZTI7S4478C2[];
extern void _ZN7S4478C2D1Ev();
extern void _ZN7S4478C2D0Ev();
extern void _ZN7S4478C32v2Ev();
extern void _ZN7S4478C32v3Ev();
extern void _ZN7S4478C32v4Ev();
extern void _ZN7S4478C22v6Ev();
extern void _ZN7S4478C22v7Ev();
extern void ABISELECT(_ZThn72_N7S4478C2D1Ev,_ZThn52_N7S4478C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S4478C2D0Ev,_ZThn52_N7S4478C2D0Ev)();
extern void _ZN7S4478C62v5Ev();
static  VTBL_ENTRY vtc_S4478C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4478C2[0]),
  (VTBL_ENTRY)&_ZN7S4478C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4478C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4478C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4478C22v7Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4478C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4478C2D1Ev,_ZThn52_N7S4478C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4478C2D0Ev,_ZThn52_N7S4478C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4478C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4478C2[];
extern  VTBL_ENTRY _ZTV7S4478C2[];
Class_Descriptor cd_S4478C2 = {  "S4478C2", // class name
  bases_S4478C2, 2,
  &(vtc_S4478C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4478C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4478C2),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  S4478C7_nt  {
  ::S4473C12_nt s4478c7f0;
  void  mf4478c7(); // _ZN10S4478C7_nt8mf4478c7Ev
  virtual  ~S4478C7_nt(); // _ZN10S4478C7_ntD1Ev
  S4478C7_nt(); // tgen
};
//SIG(-1 S4478C7_nt) C1{ vd m FC2{ m Fp Fi FC3{ m}}}


void  S4478C7_nt ::mf4478c7(){}
 S4478C7_nt ::~S4478C7_nt(){ note_dtor("S4478C7_nt", this);}
S4478C7_nt ::S4478C7_nt(){ note_ctor("S4478C7_nt", this);} // tgen

//skip512 S4478C7_nt

#else // __cplusplus

extern void _ZN10S4478C7_ntC1Ev();
extern void _ZN10S4478C7_ntD1Ev();
Name_Map name_map_S4478C7_nt[] = {
  NSPAIR(_ZN10S4478C7_ntC1Ev),
  NSPAIR(_ZN10S4478C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4478C7_nt[];
extern void _ZN10S4478C7_ntD1Ev();
extern void _ZN10S4478C7_ntD0Ev();
static  VTBL_ENTRY vtc_S4478C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4478C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S4478C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4478C7_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4478C7_nt[];
VTBL_ENTRY *P__ZTI10S4478C7_nt = _ZTI10S4478C7_nt; 
extern  VTBL_ENTRY _ZTV10S4478C7_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4478C11  {
  void *s4478c11f0[2];
  char s4478c11f1;
  void  mf4478c11(); // _ZN8S4478C119mf4478c11Ev
};
//SIG(-1 S4478C11) C1{ m Fp[2] Fc}


void  S4478C11 ::mf4478c11(){}

static void Test_S4478C11()
{
  {
    init_simple_test("S4478C11");
    S4478C11 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S4478C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4478C11)");
    check_field_offset(lv, s4478c11f0, 0, "S4478C11.s4478c11f0");
    check_field_offset(lv, s4478c11f1, ABISELECT(16,8), "S4478C11.s4478c11f1");
  }
}
static Arrange_To_Call_Me vS4478C11(Test_S4478C11, "S4478C11", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4478C1  : S4478C2 {
  ::S4478C7_nt s4478c1f0;
  void *s4478c1f1;
  ::S629C14 s4478c1f2;
  ::S4478C11 s4478c1f3;
  ::S4474C16 s4478c1f4;
  virtual  ~S4478C1(); // _ZN7S4478C1D1Ev
  virtual void  v1(); // _ZN7S4478C12v1Ev
  S4478C1(); // tgen
};
//SIG(1 S4478C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} BC6{ vd v5} vd v6 v7 Fp Fi Fp} vd v1 FC7{ vd m FC8{ m Fp Fi FC9{ m}}} Fp FC9 FC10{ m Fp[2] Fc} FC11{ BC12{ vd m} vd Fp FC13{ BC12 vd Fp Fi[2]}}}


 S4478C1 ::~S4478C1(){ note_dtor("S4478C1", this);}
void  S4478C1 ::v1(){vfunc_called(this, "_ZN7S4478C12v1Ev");}
S4478C1 ::S4478C1(){ note_ctor("S4478C1", this);} // tgen

static void Test_S4478C1()
{
  extern Class_Descriptor cd_S4478C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,33)];
    init_test(&cd_S4478C1, buf);
    S4478C1 *dp, &lv = *(dp=new (buf) S4478C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,128), "sizeof(S4478C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4478C1)");
    check_base_class_offset(lv, (S4478C3*)(S4478C2*), 0, "S4478C1");
    check_base_class_offset(lv, (S4478C6*)(S4478C2*), ABISELECT(72,52), "S4478C1");
    check_base_class_offset(lv, (S4478C2*), 0, "S4478C1");
    check_field_offset(lv, s4478c1f0, ABISELECT(104,68), "S4478C1.s4478c1f0");
    check_field_offset(lv, s4478c1f1, ABISELECT(128,84), "S4478C1.s4478c1f1");
    check_field_offset(lv, s4478c1f2, ABISELECT(136,88), "S4478C1.s4478c1f2");
    check_field_offset(lv, s4478c1f3, ABISELECT(144,92), "S4478C1.s4478c1f3");
    check_field_offset(lv, s4478c1f4, ABISELECT(168,104), "S4478C1.s4478c1f4");
    test_class_info(&lv, &cd_S4478C1);
    dp->~S4478C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4478C1(Test_S4478C1, "S4478C1", ABISELECT(208,128));

#else // __cplusplus

extern void _ZN7S4478C1C1Ev();
extern void _ZN7S4478C1D1Ev();
Name_Map name_map_S4478C1[] = {
  NSPAIR(_ZN7S4478C1C1Ev),
  NSPAIR(_ZN7S4478C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4478C3;
extern VTBL_ENTRY _ZTI7S4478C3[];
extern  VTBL_ENTRY _ZTV7S4478C3[];
extern Class_Descriptor cd_S4478C6;
extern VTBL_ENTRY _ZTI7S4478C6[];
extern  VTBL_ENTRY _ZTV7S4478C6[];
extern Class_Descriptor cd_S4478C2;
extern VTBL_ENTRY _ZTI7S4478C2[];
extern  VTBL_ENTRY _ZTV7S4478C2[];
static Base_Class bases_S4478C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4478C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4478C6,    ABISELECT(72,52), //bcp->offset
    10, //bcp->virtual_function_table_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_S4478C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4478C1[];
extern void _ZN7S4478C1D1Ev();
extern void _ZN7S4478C1D0Ev();
extern void _ZN7S4478C32v2Ev();
extern void _ZN7S4478C32v3Ev();
extern void _ZN7S4478C32v4Ev();
extern void _ZN7S4478C22v6Ev();
extern void _ZN7S4478C22v7Ev();
extern void _ZN7S4478C12v1Ev();
extern void ABISELECT(_ZThn72_N7S4478C1D1Ev,_ZThn52_N7S4478C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4478C1D0Ev,_ZThn52_N7S4478C1D0Ev)();
extern void _ZN7S4478C62v5Ev();
static  VTBL_ENTRY vtc_S4478C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4478C1[0]),
  (VTBL_ENTRY)&_ZN7S4478C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4478C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4478C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4478C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4478C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4478C12v1Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4478C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4478C1D1Ev,_ZThn52_N7S4478C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4478C1D0Ev,_ZThn52_N7S4478C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4478C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4478C1[];
extern  VTBL_ENTRY _ZTV7S4478C1[];
Class_Descriptor cd_S4478C1 = {  "S4478C1", // class name
  bases_S4478C1, 3,
  &(vtc_S4478C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,128), // object size
  NSPAIRA(_ZTI7S4478C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4478C1),15, //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  S3512C4  {
  void *s3512c4f0;
  long double s3512c4f1;
  int s3512c4f2;
  virtual void  v1(); // _ZN7S3512C42v1Ev
  virtual void  v2(); // _ZN7S3512C42v2Ev
  ~S3512C4(); // tgen
  S3512C4(); // tgen
};
//SIG(-1 S3512C4) C1{ v1 v2 Fp FD Fi}


void  S3512C4 ::v1(){vfunc_called(this, "_ZN7S3512C42v1Ev");}
void  S3512C4 ::v2(){vfunc_called(this, "_ZN7S3512C42v2Ev");}
S3512C4 ::~S3512C4(){ note_dtor("S3512C4", this);} // tgen
S3512C4 ::S3512C4(){ note_ctor("S3512C4", this);} // tgen

static void Test_S3512C4()
{
  extern Class_Descriptor cd_S3512C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S3512C4, buf);
    S3512C4 *dp, &lv = *(dp=new (buf) S3512C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3512C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3512C4)");
    check_field_offset(lv, s3512c4f0, ABISELECT(8,4), "S3512C4.s3512c4f0");
    check_field_offset(lv, s3512c4f1, ABISELECT(16,8), "S3512C4.s3512c4f1");
    check_field_offset(lv, s3512c4f2, ABISELECT(32,20), "S3512C4.s3512c4f2");
    test_class_info(&lv, &cd_S3512C4);
    dp->~S3512C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C4(Test_S3512C4, "S3512C4", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3512C4C1Ev();
extern void _ZN7S3512C4D1Ev();
Name_Map name_map_S3512C4[] = {
  NSPAIR(_ZN7S3512C4C1Ev),
  NSPAIR(_ZN7S3512C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3512C4[];
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
static  VTBL_ENTRY vtc_S3512C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C4[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
};
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
Class_Descriptor cd_S3512C4 = {  "S3512C4", // class name
  0,0,//no base classes
  &(vtc_S3512C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3512C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3512C4),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  S3512C3  : virtual S3512C4 {
  void *s3512c3f0;
  virtual  ~S3512C3(); // _ZN7S3512C3D2Ev
  virtual void  v3(); // _ZN7S3512C32v3Ev
  virtual void  v4(); // _ZN7S3512C32v4Ev
  virtual void  v5(); // _ZN7S3512C32v5Ev
  virtual void  v6(); // _ZN7S3512C32v6Ev
  virtual void  v7(); // _ZN7S3512C32v7Ev
  virtual void  v8(); // _ZN7S3512C32v8Ev
  S3512C3(); // tgen
};
//SIG(-1 S3512C3) C1{ VBC2{ v7 v8 Fp FD Fi} vd v1 v2 v3 v4 v5 v6 Fp}


 S3512C3 ::~S3512C3(){ note_dtor("S3512C3", this);}
void  S3512C3 ::v3(){vfunc_called(this, "_ZN7S3512C32v3Ev");}
void  S3512C3 ::v4(){vfunc_called(this, "_ZN7S3512C32v4Ev");}
void  S3512C3 ::v5(){vfunc_called(this, "_ZN7S3512C32v5Ev");}
void  S3512C3 ::v6(){vfunc_called(this, "_ZN7S3512C32v6Ev");}
void  S3512C3 ::v7(){vfunc_called(this, "_ZN7S3512C32v7Ev");}
void  S3512C3 ::v8(){vfunc_called(this, "_ZN7S3512C32v8Ev");}
S3512C3 ::S3512C3(){ note_ctor("S3512C3", this);} // tgen

static void Test_S3512C3()
{
  extern Class_Descriptor cd_S3512C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,9)];
    init_test(&cd_S3512C3, buf);
    S3512C3 *dp, &lv = *(dp=new (buf) S3512C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S3512C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3512C3)");
    check_base_class_offset(lv, (S3512C4*), ABISELECT(16,8), "S3512C3");
    check_field_offset(lv, s3512c3f0, ABISELECT(8,4), "S3512C3.s3512c3f0");
    test_class_info(&lv, &cd_S3512C3);
    dp->~S3512C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C3(Test_S3512C3, "S3512C3", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S3512C3C1Ev();
extern void _ZN7S3512C3D2Ev();
Name_Map name_map_S3512C3[] = {
  NSPAIR(_ZN7S3512C3C1Ev),
  NSPAIR(_ZN7S3512C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
static Base_Class bases_S3512C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C4,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //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 _ZTI7S3512C3[];
extern void _ZN7S3512C3D1Ev();
extern void _ZN7S3512C3D0Ev();
extern void _ZN7S3512C32v3Ev();
extern void _ZN7S3512C32v4Ev();
extern void _ZN7S3512C32v5Ev();
extern void _ZN7S3512C32v6Ev();
extern void _ZN7S3512C32v7Ev();
extern void _ZN7S3512C32v8Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
static  VTBL_ENTRY vtc_S3512C3[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C3[0]),
  (VTBL_ENTRY)&_ZN7S3512C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3512C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v8Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3512C3[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
};
extern VTBL_ENTRY _ZTV7S3512C3[];
static  VTT_ENTRY vtt_S3512C3[] = {
  {&(_ZTV7S3512C3[3]),  3,17},
  {&(_ZTV7S3512C3[15]),  15,17},
};
extern VTBL_ENTRY _ZTI7S3512C3[];
extern  VTBL_ENTRY _ZTV7S3512C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C3[];
Class_Descriptor cd_S3512C3 = {  "S3512C3", // class name
  bases_S3512C3, 1,
  &(vtc_S3512C3[0]), // expected_vtbl_contents
  &(vtt_S3512C3[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S3512C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3512C3),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3512C3),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  S3512C2  : S3512C3 {
  ::S3512C4 s3512c2f0;
  virtual  ~S3512C2(); // _ZN7S3512C2D2Ev
  virtual void  v9(); // _ZN7S3512C22v9Ev
  virtual void  v10(); // _ZN7S3512C23v10Ev
  S3512C2(); // tgen
};
//SIG(-1 S3512C2) C1{ BC2{ VBC3{ v3 v4 Fp FD Fi} vd v5 v6 v7 v8 v9 v10 Fp} vd v1 v2 FC3}


 S3512C2 ::~S3512C2(){ note_dtor("S3512C2", this);}
void  S3512C2 ::v9(){vfunc_called(this, "_ZN7S3512C22v9Ev");}
void  S3512C2 ::v10(){vfunc_called(this, "_ZN7S3512C23v10Ev");}
S3512C2 ::S3512C2(){ note_ctor("S3512C2", this);} // tgen

static void Test_S3512C2()
{
  extern Class_Descriptor cd_S3512C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S3512C2, buf);
    S3512C2 *dp, &lv = *(dp=new (buf) S3512C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S3512C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3512C2)");
    check_base_class_offset(lv, (S3512C4*)(S3512C3*), ABISELECT(64,32), "S3512C2");
    check_base_class_offset(lv, (S3512C3*), 0, "S3512C2");
    check_field_offset(lv, s3512c2f0, ABISELECT(16,8), "S3512C2.s3512c2f0");
    test_class_info(&lv, &cd_S3512C2);
    dp->~S3512C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C2(Test_S3512C2, "S3512C2", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN7S3512C2C1Ev();
extern void _ZN7S3512C2D2Ev();
Name_Map name_map_S3512C2[] = {
  NSPAIR(_ZN7S3512C2C1Ev),
  NSPAIR(_ZN7S3512C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C3;
extern VTBL_ENTRY _ZTI7S3512C3[];
extern  VTBL_ENTRY _ZTV7S3512C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C3[];
static Base_Class bases_S3512C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C4,    ABISELECT(64,32), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //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_S3512C3,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3512C2[];
extern void _ZN7S3512C2D1Ev();
extern void _ZN7S3512C2D0Ev();
extern void _ZN7S3512C32v3Ev();
extern void _ZN7S3512C32v4Ev();
extern void _ZN7S3512C32v5Ev();
extern void _ZN7S3512C32v6Ev();
extern void _ZN7S3512C32v7Ev();
extern void _ZN7S3512C32v8Ev();
extern void _ZN7S3512C22v9Ev();
extern void _ZN7S3512C23v10Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
static  VTBL_ENTRY vtc_S3512C2[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C2[0]),
  (VTBL_ENTRY)&_ZN7S3512C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3512C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3512C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3512C23v10Ev,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S3512C2[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
};
extern VTBL_ENTRY _ZTV7S3512C2[];
extern void _ZN7S3512C3D1Ev();
extern void _ZN7S3512C3D0Ev();
extern void _ZN7S3512C32v3Ev();
extern void _ZN7S3512C32v4Ev();
extern void _ZN7S3512C32v5Ev();
extern void _ZN7S3512C32v6Ev();
extern void _ZN7S3512C32v7Ev();
extern void _ZN7S3512C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C3__7S3512C2[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C3[0]),
  (VTBL_ENTRY)&_ZN7S3512C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3512C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v8Ev,
};
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C4__7S3512C3__7S3512C2[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S3512C3[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
};
static  VTT_ENTRY vtt_S3512C2[] = {
  {&(_ZTV7S3512C2[3]),  3,19},
  {&(_tg__ZTV7S3512C3__7S3512C2[3]),  3,11},
  {&(_tg__ZTV7S3512C4__7S3512C3__7S3512C2[4]),  4,6},
  {&(_ZTV7S3512C2[17]),  17,19},
};
extern VTBL_ENTRY _ZTI7S3512C2[];
extern  VTBL_ENTRY _ZTV7S3512C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C2[];
Class_Descriptor cd_S3512C2 = {  "S3512C2", // class name
  bases_S3512C2, 2,
  &(vtc_S3512C2[0]), // expected_vtbl_contents
  &(vtt_S3512C2[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI7S3512C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3512C2),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3512C2),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  S3512C6  {
  virtual void  v11(); // _ZN7S3512C63v11Ev
  virtual void  v12(); // _ZN7S3512C63v12Ev
  virtual void  v13(); // _ZN7S3512C63v13Ev
  virtual void  v14(); // _ZN7S3512C63v14Ev
  virtual void  v15(); // _ZN7S3512C63v15Ev
  virtual void  v16(); // _ZN7S3512C63v16Ev
  ~S3512C6(); // tgen
  S3512C6(); // tgen
};
//SIG(-1 S3512C6) C1{ v1 v2 v3 v4 v5 v6}


void  S3512C6 ::v11(){vfunc_called(this, "_ZN7S3512C63v11Ev");}
void  S3512C6 ::v12(){vfunc_called(this, "_ZN7S3512C63v12Ev");}
void  S3512C6 ::v13(){vfunc_called(this, "_ZN7S3512C63v13Ev");}
void  S3512C6 ::v14(){vfunc_called(this, "_ZN7S3512C63v14Ev");}
void  S3512C6 ::v15(){vfunc_called(this, "_ZN7S3512C63v15Ev");}
void  S3512C6 ::v16(){vfunc_called(this, "_ZN7S3512C63v16Ev");}
S3512C6 ::~S3512C6(){ note_dtor("S3512C6", this);} // tgen
S3512C6 ::S3512C6(){ note_ctor("S3512C6", this);} // tgen

static void Test_S3512C6()
{
  extern Class_Descriptor cd_S3512C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3512C6, buf);
    S3512C6 *dp, &lv = *(dp=new (buf) S3512C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3512C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3512C6)");
    test_class_info(&lv, &cd_S3512C6);
    dp->~S3512C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C6(Test_S3512C6, "S3512C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3512C6C1Ev();
extern void _ZN7S3512C6D1Ev();
Name_Map name_map_S3512C6[] = {
  NSPAIR(_ZN7S3512C6C1Ev),
  NSPAIR(_ZN7S3512C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3512C6[];
extern void _ZN7S3512C63v11Ev();
extern void _ZN7S3512C63v12Ev();
extern void _ZN7S3512C63v13Ev();
extern void _ZN7S3512C63v14Ev();
extern void _ZN7S3512C63v15Ev();
extern void _ZN7S3512C63v16Ev();
static  VTBL_ENTRY vtc_S3512C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C6[0]),
  (VTBL_ENTRY)&_ZN7S3512C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v12Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v13Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v14Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v16Ev,
};
extern VTBL_ENTRY _ZTI7S3512C6[];
extern  VTBL_ENTRY _ZTV7S3512C6[];
Class_Descriptor cd_S3512C6 = {  "S3512C6", // class name
  0,0,//no base classes
  &(vtc_S3512C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3512C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3512C6),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  S3512C9  : S3512C4 {
  virtual void  v17(); // _ZN7S3512C93v17Ev
  virtual void  v18(); // _ZN7S3512C93v18Ev
  ~S3512C9(); // tgen
  S3512C9(); // tgen
};
//SIG(-1 S3512C9) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S3512C9 ::v17(){vfunc_called(this, "_ZN7S3512C93v17Ev");}
void  S3512C9 ::v18(){vfunc_called(this, "_ZN7S3512C93v18Ev");}
S3512C9 ::~S3512C9(){ note_dtor("S3512C9", this);} // tgen
S3512C9 ::S3512C9(){ note_ctor("S3512C9", this);} // tgen

static void Test_S3512C9()
{
  extern Class_Descriptor cd_S3512C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S3512C9, buf);
    S3512C9 *dp, &lv = *(dp=new (buf) S3512C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3512C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3512C9)");
    check_base_class_offset(lv, (S3512C4*), 0, "S3512C9");
    test_class_info(&lv, &cd_S3512C9);
    dp->~S3512C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C9(Test_S3512C9, "S3512C9", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3512C9C1Ev();
extern void _ZN7S3512C9D1Ev();
Name_Map name_map_S3512C9[] = {
  NSPAIR(_ZN7S3512C9C1Ev),
  NSPAIR(_ZN7S3512C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
static Base_Class bases_S3512C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S3512C9[];
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C93v17Ev();
extern void _ZN7S3512C93v18Ev();
static  VTBL_ENTRY vtc_S3512C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C9[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v18Ev,
};
extern VTBL_ENTRY _ZTI7S3512C9[];
extern  VTBL_ENTRY _ZTV7S3512C9[];
Class_Descriptor cd_S3512C9 = {  "S3512C9", // class name
  bases_S3512C9, 1,
  &(vtc_S3512C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3512C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3512C9),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  S3512C8  : S3512C9 , S3512C4 {
  virtual void  v19(); // _ZN7S3512C83v19Ev
  virtual void  v20(); // _ZN7S3512C83v20Ev
  virtual void  v21(); // _ZN7S3512C83v21Ev
  virtual void  v22(); // _ZN7S3512C83v22Ev
  ~S3512C8(); // tgen
  S3512C8(); // tgen
};
//SIG(-1 S3512C8) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S3512C8 ::v19(){vfunc_called(this, "_ZN7S3512C83v19Ev");}
void  S3512C8 ::v20(){vfunc_called(this, "_ZN7S3512C83v20Ev");}
void  S3512C8 ::v21(){vfunc_called(this, "_ZN7S3512C83v21Ev");}
void  S3512C8 ::v22(){vfunc_called(this, "_ZN7S3512C83v22Ev");}
S3512C8 ::~S3512C8(){ note_dtor("S3512C8", this);} // tgen
S3512C8 ::S3512C8(){ note_ctor("S3512C8", this);} // tgen

static void Test_S3512C8()
{
  extern Class_Descriptor cd_S3512C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S3512C8, buf);
    S3512C8 *dp, &lv = *(dp=new (buf) S3512C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S3512C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3512C8)");
    check_base_class_offset(lv, (S3512C4*)(S3512C9*), 0, "S3512C8");
    check_base_class_offset(lv, (S3512C9*), 0, "S3512C8");
    /*is_ambiguous_... S3512C8::S3512C4 */ AMB_check_base_class_offset(lv, (S3512C4*), ABISELECT(48,24), "S3512C8");
    test_class_info(&lv, &cd_S3512C8);
    dp->~S3512C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C8(Test_S3512C8, "S3512C8", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S3512C8C1Ev();
extern void _ZN7S3512C8D1Ev();
Name_Map name_map_S3512C8[] = {
  NSPAIR(_ZN7S3512C8C1Ev),
  NSPAIR(_ZN7S3512C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C9;
extern VTBL_ENTRY _ZTI7S3512C9[];
extern  VTBL_ENTRY _ZTV7S3512C9[];
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
static Base_Class bases_S3512C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3512C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S3512C4,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_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 _ZTI7S3512C8[];
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C93v17Ev();
extern void _ZN7S3512C93v18Ev();
extern void _ZN7S3512C83v19Ev();
extern void _ZN7S3512C83v20Ev();
extern void _ZN7S3512C83v21Ev();
extern void _ZN7S3512C83v22Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
static  VTBL_ENTRY vtc_S3512C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C8[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v18Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v22Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3512C8[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
};
extern VTBL_ENTRY _ZTI7S3512C8[];
extern  VTBL_ENTRY _ZTV7S3512C8[];
Class_Descriptor cd_S3512C8 = {  "S3512C8", // class name
  bases_S3512C8, 3,
  &(vtc_S3512C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S3512C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3512C8),14, //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  S3512C12  {
  ::S1400C17_nt s3512c12f0;
  void *s3512c12f1;
  virtual void  v23(); // _ZN8S3512C123v23Ev
  ~S3512C12(); // tgen
  S3512C12(); // tgen
};
//SIG(-1 S3512C12) C1{ v1 FC2{ v2 v3} Fp}


void  S3512C12 ::v23(){vfunc_called(this, "_ZN8S3512C123v23Ev");}
S3512C12 ::~S3512C12(){ note_dtor("S3512C12", this);} // tgen
S3512C12 ::S3512C12(){ note_ctor("S3512C12", this);} // tgen

static void Test_S3512C12()
{
  extern Class_Descriptor cd_S3512C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3512C12, buf);
    S3512C12 *dp, &lv = *(dp=new (buf) S3512C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3512C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3512C12)");
    check_field_offset(lv, s3512c12f0, ABISELECT(8,4), "S3512C12.s3512c12f0");
    check_field_offset(lv, s3512c12f1, ABISELECT(16,8), "S3512C12.s3512c12f1");
    test_class_info(&lv, &cd_S3512C12);
    dp->~S3512C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C12(Test_S3512C12, "S3512C12", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S3512C12C1Ev();
extern void _ZN8S3512C12D1Ev();
Name_Map name_map_S3512C12[] = {
  NSPAIR(_ZN8S3512C12C1Ev),
  NSPAIR(_ZN8S3512C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3512C12[];
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY vtc_S3512C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C12[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern VTBL_ENTRY _ZTI8S3512C12[];
extern  VTBL_ENTRY _ZTV8S3512C12[];
Class_Descriptor cd_S3512C12 = {  "S3512C12", // class name
  0,0,//no base classes
  &(vtc_S3512C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S3512C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3512C12),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3512C11  : virtual S3512C12 {
  virtual void  v24(); // _ZN8S3512C113v24Ev
  ~S3512C11(); // tgen
  S3512C11(); // tgen
};
//SIG(-1 S3512C11) C1{ VBC2{ v2 FC3{ v3 v4} Fp} v1}


void  S3512C11 ::v24(){vfunc_called(this, "_ZN8S3512C113v24Ev");}
S3512C11 ::~S3512C11(){ note_dtor("S3512C11", this);} // tgen
S3512C11 ::S3512C11(){ note_ctor("S3512C11", this);} // tgen

static void Test_S3512C11()
{
  extern Class_Descriptor cd_S3512C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3512C11, buf);
    S3512C11 *dp, &lv = *(dp=new (buf) S3512C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3512C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3512C11)");
    check_base_class_offset(lv, (S3512C12*), ABISELECT(8,4), "S3512C11");
    test_class_info(&lv, &cd_S3512C11);
    dp->~S3512C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C11(Test_S3512C11, "S3512C11", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S3512C11C1Ev();
extern void _ZN8S3512C11D1Ev();
Name_Map name_map_S3512C11[] = {
  NSPAIR(_ZN8S3512C11C1Ev),
  NSPAIR(_ZN8S3512C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C12;
extern VTBL_ENTRY _ZTI8S3512C12[];
extern  VTBL_ENTRY _ZTV8S3512C12[];
static Base_Class bases_S3512C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C12,    ABISELECT(8,4), //bcp->offset
    4, //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 _ZTI8S3512C11[];
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY vtc_S3512C11[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern VTBL_ENTRY _ZTV8S3512C11[];
static  VTT_ENTRY vtt_S3512C11[] = {
  {&(_ZTV8S3512C11[3]),  3,8},
  {&(_ZTV8S3512C11[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S3512C11[];
extern  VTBL_ENTRY _ZTV8S3512C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C11[];
Class_Descriptor cd_S3512C11 = {  "S3512C11", // class name
  bases_S3512C11, 1,
  &(vtc_S3512C11[0]), // expected_vtbl_contents
  &(vtt_S3512C11[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S3512C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3512C11),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3512C11),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  S3512C10  : virtual S3512C11 {
  virtual void  v25(); // _ZN8S3512C103v25Ev
  virtual void  v26(); // _ZN8S3512C103v26Ev
  virtual void  v27(); // _ZN8S3512C103v27Ev
  ~S3512C10(); // tgen
  S3512C10(); // tgen
};
//SIG(-1 S3512C10) C1{ VBC2{ VBC3{ v4 FC4{ v6 v7} Fp} v5} v1 v2 v3}


void  S3512C10 ::v25(){vfunc_called(this, "_ZN8S3512C103v25Ev");}
void  S3512C10 ::v26(){vfunc_called(this, "_ZN8S3512C103v26Ev");}
void  S3512C10 ::v27(){vfunc_called(this, "_ZN8S3512C103v27Ev");}
S3512C10 ::~S3512C10(){ note_dtor("S3512C10", this);} // tgen
S3512C10 ::S3512C10(){ note_ctor("S3512C10", this);} // tgen

static void Test_S3512C10()
{
  extern Class_Descriptor cd_S3512C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3512C10, buf);
    S3512C10 *dp, &lv = *(dp=new (buf) S3512C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3512C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3512C10)");
    check_base_class_offset(lv, (S3512C12*)(S3512C11*), ABISELECT(8,4), "S3512C10");
    check_base_class_offset(lv, (S3512C11*), 0, "S3512C10");
    test_class_info(&lv, &cd_S3512C10);
    dp->~S3512C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C10(Test_S3512C10, "S3512C10", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S3512C10C1Ev();
extern void _ZN8S3512C10D1Ev();
Name_Map name_map_S3512C10[] = {
  NSPAIR(_ZN8S3512C10C1Ev),
  NSPAIR(_ZN8S3512C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C12;
extern VTBL_ENTRY _ZTI8S3512C12[];
extern  VTBL_ENTRY _ZTV8S3512C12[];
extern Class_Descriptor cd_S3512C11;
extern VTBL_ENTRY _ZTI8S3512C11[];
extern  VTBL_ENTRY _ZTV8S3512C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C11[];
static Base_Class bases_S3512C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C12,    ABISELECT(8,4), //bcp->offset
    9, //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
    1, //immediately_derived
  0, 1},
  {&cd_S3512C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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 _ZTI8S3512C10[];
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY vtc_S3512C10[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C10[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C10[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern VTBL_ENTRY _ZTV8S3512C10[];
extern void _ZN8S3512C113v24Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C11__8S3512C10[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__8S3512C11__8S3512C10[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
static  VTT_ENTRY vtt_S3512C10[] = {
  {&(_ZTV8S3512C10[5]),  5,13},
  {&(_ZTV8S3512C10[5]),  5,13},
  {&(_ZTV8S3512C10[12]),  12,13},
  {&(_tg__ZTV8S3512C11__8S3512C10[3]),  3,4},
  {&(_tg__ZTV8S3512C12__8S3512C11__8S3512C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3512C10[];
extern  VTBL_ENTRY _ZTV8S3512C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C10[];
Class_Descriptor cd_S3512C10 = {  "S3512C10", // class name
  bases_S3512C10, 2,
  &(vtc_S3512C10[0]), // expected_vtbl_contents
  &(vtt_S3512C10[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S3512C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3512C10),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3512C10),5, //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  S3512C7  : S3512C8 , virtual S3512C10 {
  virtual void  v28(); // _ZN7S3512C73v28Ev
  virtual void  v29(); // _ZN7S3512C73v29Ev
  virtual void  v30(); // _ZN7S3512C73v30Ev
  ~S3512C7(); // tgen
  S3512C7(); // tgen
};
//SIG(-1 S3512C7) C1{ BC2{ BC3{ BC4{ v4 v5 Fp FD Fi} v6 v7} BC4 v8 v9 v10 v11} VBC5{ VBC6{ VBC7{ v12 FC8{ v17 v18} Fp} v13} v14 v15 v16} v1 v2 v3}


void  S3512C7 ::v28(){vfunc_called(this, "_ZN7S3512C73v28Ev");}
void  S3512C7 ::v29(){vfunc_called(this, "_ZN7S3512C73v29Ev");}
void  S3512C7 ::v30(){vfunc_called(this, "_ZN7S3512C73v30Ev");}
S3512C7 ::~S3512C7(){ note_dtor("S3512C7", this);} // tgen
S3512C7 ::S3512C7(){ note_ctor("S3512C7", this);} // tgen

static void Test_S3512C7()
{
  extern Class_Descriptor cd_S3512C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S3512C7, buf);
    S3512C7 *dp, &lv = *(dp=new (buf) S3512C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S3512C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3512C7)");
    check_base_class_offset(lv, (S3512C4*)(S3512C9*)(S3512C8*), 0, "S3512C7");
    check_base_class_offset(lv, (S3512C9*)(S3512C8*), 0, "S3512C7");
    /*is_ambiguous_... S3512C8::S3512C4 */ AMB_check_base_class_offset(lv, (S3512C4*)(S3512C8*), ABISELECT(48,24), "S3512C7");
    check_base_class_offset(lv, (S3512C8*), 0, "S3512C7");
    check_base_class_offset(lv, (S3512C12*)(S3512C11*), ABISELECT(96,52), "S3512C7");
    check_base_class_offset(lv, (S3512C11*)(S3512C10*), ABISELECT(88,48), "S3512C7");
    check_base_class_offset(lv, (S3512C10*), ABISELECT(88,48), "S3512C7");
    test_class_info(&lv, &cd_S3512C7);
    dp->~S3512C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C7(Test_S3512C7, "S3512C7", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN7S3512C7C1Ev();
extern void _ZN7S3512C7D1Ev();
Name_Map name_map_S3512C7[] = {
  NSPAIR(_ZN7S3512C7C1Ev),
  NSPAIR(_ZN7S3512C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C9;
extern VTBL_ENTRY _ZTI7S3512C9[];
extern  VTBL_ENTRY _ZTV7S3512C9[];
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C8;
extern VTBL_ENTRY _ZTI7S3512C8[];
extern  VTBL_ENTRY _ZTV7S3512C8[];
extern Class_Descriptor cd_S3512C12;
extern VTBL_ENTRY _ZTI8S3512C12[];
extern  VTBL_ENTRY _ZTV8S3512C12[];
extern Class_Descriptor cd_S3512C11;
extern VTBL_ENTRY _ZTI8S3512C11[];
extern  VTBL_ENTRY _ZTV8S3512C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C11[];
extern Class_Descriptor cd_S3512C10;
extern VTBL_ENTRY _ZTI8S3512C10[];
extern  VTBL_ENTRY _ZTV8S3512C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C10[];
static Base_Class bases_S3512C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S3512C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S3512C4,    ABISELECT(48,24), //bcp->offset
    16, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S3512C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S3512C12,    ABISELECT(96,52), //bcp->offset
    32, //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
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3512C11,    ABISELECT(88,48), //bcp->offset
    -1, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3512C10,    ABISELECT(88,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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 _ZTI7S3512C7[];
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C93v17Ev();
extern void _ZN7S3512C93v18Ev();
extern void _ZN7S3512C83v19Ev();
extern void _ZN7S3512C83v20Ev();
extern void _ZN7S3512C83v21Ev();
extern void _ZN7S3512C83v22Ev();
extern void _ZN7S3512C73v28Ev();
extern void _ZN7S3512C73v29Ev();
extern void _ZN7S3512C73v30Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY vtc_S3512C7[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v18Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v22Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v30Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern VTBL_ENTRY _ZTV7S3512C7[];
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C10__7S3512C7[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C10[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__8S3512C10__7S3512C7[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C10[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern void _ZN8S3512C113v24Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C11__7S3512C7[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__8S3512C11__7S3512C7[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
static  VTT_ENTRY vtt_S3512C7[] = {
  {&(_ZTV7S3512C7[5]),  5,36},
  {&(_ZTV7S3512C7[28]),  28,36},
  {&(_ZTV7S3512C7[28]),  28,36},
  {&(_ZTV7S3512C7[35]),  35,36},
  {&(_tg__ZTV8S3512C10__7S3512C7[5]),  5,9},
  {&(_tg__ZTV8S3512C10__7S3512C7[5]),  5,9},
  {&(_tg__ZTV8S3512C12__8S3512C10__7S3512C7[3]),  3,4},
  {&(_tg__ZTV8S3512C11__7S3512C7[3]),  3,4},
  {&(_tg__ZTV8S3512C12__8S3512C11__7S3512C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3512C7[];
extern  VTBL_ENTRY _ZTV7S3512C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C7[];
Class_Descriptor cd_S3512C7 = {  "S3512C7", // class name
  bases_S3512C7, 7,
  &(vtc_S3512C7[0]), // expected_vtbl_contents
  &(vtt_S3512C7[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI7S3512C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3512C7),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3512C7),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3512C5  : S3512C6 , virtual S3512C7 {
  void *s3512c5f0;
  __tsi64 s3512c5f1:5;
  virtual  ~S3512C5(); // _ZN7S3512C5D2Ev
  virtual void  v31(); // _ZN7S3512C53v31Ev
  S3512C5(); // tgen
};
//SIG(-1 S3512C5) C1{ BC2{ v2 v3 v4 v5 v6 v7} VBC3{ BC4{ BC5{ BC6{ v8 v9 Fp FD Fi} v10 v11} BC6 v12 v13 v14 v15} VBC7{ VBC8{ VBC9{ v16 FC10{ v24 v25} Fp} v17} v18 v19 v20} v21 v22 v23} vd v1 Fp FL:5}


 S3512C5 ::~S3512C5(){ note_dtor("S3512C5", this);}
void  S3512C5 ::v31(){vfunc_called(this, "_ZN7S3512C53v31Ev");}
S3512C5 ::S3512C5(){ note_ctor("S3512C5", this);} // tgen

static void Test_S3512C5()
{
  extern Class_Descriptor cd_S3512C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,20)];
    init_test(&cd_S3512C5, buf);
    S3512C5 *dp, &lv = *(dp=new (buf) S3512C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,76), "sizeof(S3512C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3512C5)");
    check_base_class_offset(lv, (S3512C6*), 0, "S3512C5");
    check_base_class_offset(lv, (S3512C4*)(S3512C9*)(S3512C8*)(S3512C7*), ABISELECT(32,12), "S3512C5");
    check_base_class_offset(lv, (S3512C9*)(S3512C8*)(S3512C7*), ABISELECT(32,12), "S3512C5");
    /*is_ambiguous_... S3512C8::S3512C4 */ AMB_check_base_class_offset(lv, (S3512C4*)(S3512C8*)(S3512C7*), ABISELECT(80,36), "S3512C5");
    check_base_class_offset(lv, (S3512C8*)(S3512C7*), ABISELECT(32,12), "S3512C5");
    check_base_class_offset(lv, (S3512C12*)(S3512C11*), ABISELECT(128,64), "S3512C5");
    check_base_class_offset(lv, (S3512C11*)(S3512C10*), ABISELECT(120,60), "S3512C5");
    check_base_class_offset(lv, (S3512C10*)(S3512C7*), ABISELECT(120,60), "S3512C5");
    check_base_class_offset(lv, (S3512C7*), ABISELECT(32,12), "S3512C5");
    check_field_offset(lv, s3512c5f0, ABISELECT(8,4), "S3512C5.s3512c5f0");
    set_bf_and_test(lv, s3512c5f1, ABISELECT(16,8), 0, 5, 1, "S3512C5");
    set_bf_and_test(lv, s3512c5f1, ABISELECT(16,8), 0, 5, hide_sll(1LL<<4), "S3512C5");
    test_class_info(&lv, &cd_S3512C5);
    dp->~S3512C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C5(Test_S3512C5, "S3512C5", ABISELECT(160,76));

#else // __cplusplus

extern void _ZN7S3512C5C1Ev();
extern void _ZN7S3512C5D2Ev();
Name_Map name_map_S3512C5[] = {
  NSPAIR(_ZN7S3512C5C1Ev),
  NSPAIR(_ZN7S3512C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C6;
extern VTBL_ENTRY _ZTI7S3512C6[];
extern  VTBL_ENTRY _ZTV7S3512C6[];
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C9;
extern VTBL_ENTRY _ZTI7S3512C9[];
extern  VTBL_ENTRY _ZTV7S3512C9[];
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C8;
extern VTBL_ENTRY _ZTI7S3512C8[];
extern  VTBL_ENTRY _ZTV7S3512C8[];
extern Class_Descriptor cd_S3512C12;
extern VTBL_ENTRY _ZTI8S3512C12[];
extern  VTBL_ENTRY _ZTV8S3512C12[];
extern Class_Descriptor cd_S3512C11;
extern VTBL_ENTRY _ZTI8S3512C11[];
extern  VTBL_ENTRY _ZTV8S3512C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C11[];
extern Class_Descriptor cd_S3512C10;
extern VTBL_ENTRY _ZTI8S3512C10[];
extern  VTBL_ENTRY _ZTV8S3512C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C10[];
extern Class_Descriptor cd_S3512C7;
extern VTBL_ENTRY _ZTI7S3512C7[];
extern  VTBL_ENTRY _ZTV7S3512C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C7[];
static Base_Class bases_S3512C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3512C4,    ABISELECT(32,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
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3512C9,    ABISELECT(32,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
    4, //immediately_derived
  0, 0},
  {&cd_S3512C4,    ABISELECT(80,36), //bcp->offset
    42, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3512C8,    ABISELECT(32,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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3512C12,    ABISELECT(128,64), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //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
    6, //immediately_derived
  0, 1},
  {&cd_S3512C11,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3512C10,    ABISELECT(120,60), //bcp->offset
    46, //bcp->virtual_function_table_offset
    8, //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
    8, //immediately_derived
  0, 1},
  {&cd_S3512C7,    ABISELECT(32,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3512C5[];
extern void _ZN7S3512C63v11Ev();
extern void _ZN7S3512C63v12Ev();
extern void _ZN7S3512C63v13Ev();
extern void _ZN7S3512C63v14Ev();
extern void _ZN7S3512C63v15Ev();
extern void _ZN7S3512C63v16Ev();
extern void _ZN7S3512C5D1Ev();
extern void _ZN7S3512C5D0Ev();
extern void _ZN7S3512C53v31Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C93v17Ev();
extern void _ZN7S3512C93v18Ev();
extern void _ZN7S3512C83v19Ev();
extern void _ZN7S3512C83v20Ev();
extern void _ZN7S3512C83v21Ev();
extern void _ZN7S3512C83v22Ev();
extern void _ZN7S3512C73v28Ev();
extern void _ZN7S3512C73v29Ev();
extern void _ZN7S3512C73v30Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY vtc_S3512C5[] = {
  ABISELECT(128,64),
  ABISELECT(120,60),
  ABISELECT(120,60),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN7S3512C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v12Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v13Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v14Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3512C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3512C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3512C53v31Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v18Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v22Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v30Ev,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern VTBL_ENTRY _ZTV7S3512C5[];
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C93v17Ev();
extern void _ZN7S3512C93v18Ev();
extern void _ZN7S3512C83v19Ev();
extern void _ZN7S3512C83v20Ev();
extern void _ZN7S3512C83v21Ev();
extern void _ZN7S3512C83v22Ev();
extern void _ZN7S3512C73v28Ev();
extern void _ZN7S3512C73v29Ev();
extern void _ZN7S3512C73v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C7__7S3512C5[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v18Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v22Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v30Ev,
};
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C10__7S3512C7__7S3512C5[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__7S3512C7__7S3512C5[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C10__7S3512C5[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C10[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__8S3512C10__7S3512C5[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C10[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern void _ZN8S3512C113v24Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C11__7S3512C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__8S3512C11__7S3512C5[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
static  VTT_ENTRY vtt_S3512C5[] = {
  {&(_ZTV7S3512C5[6]),  6,62},
  {&(_ZTV7S3512C5[31]),  31,62},
  {&(_ZTV7S3512C5[44]),  44,62},
  {&(_ZTV7S3512C5[54]),  54,62},
  {&(_ZTV7S3512C5[54]),  54,62},
  {&(_ZTV7S3512C5[61]),  61,62},
  {&(_tg__ZTV7S3512C7__7S3512C5[5]),  5,16},
  {&(_tg__ZTV8S3512C10__7S3512C7__7S3512C5[8]),  8,12},
  {&(_tg__ZTV8S3512C10__7S3512C7__7S3512C5[8]),  8,12},
  {&(_tg__ZTV8S3512C12__7S3512C7__7S3512C5[3]),  3,4},
  {&(_tg__ZTV8S3512C10__7S3512C5[5]),  5,9},
  {&(_tg__ZTV8S3512C10__7S3512C5[5]),  5,9},
  {&(_tg__ZTV8S3512C12__8S3512C10__7S3512C5[3]),  3,4},
  {&(_tg__ZTV8S3512C11__7S3512C5[3]),  3,4},
  {&(_tg__ZTV8S3512C12__8S3512C11__7S3512C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3512C5[];
extern  VTBL_ENTRY _ZTV7S3512C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C5[];
Class_Descriptor cd_S3512C5 = {  "S3512C5", // class name
  bases_S3512C5, 9,
  &(vtc_S3512C5[0]), // expected_vtbl_contents
  &(vtt_S3512C5[0]), // expected_vtt_contents
  ABISELECT(160,76), // object size
  NSPAIRA(_ZTI7S3512C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3512C5),62, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3512C5),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3512C1  : S3512C2 , S3512C5 {
  char s3512c1f0;
  ~S3512C1(); // tgen
  S3512C1(); // tgen
};
//SIG(1 S3512C1) C1{ BC2{ BC3{ VBC4{ v1 v2 Fp FD Fi} vd v3 v4 v5 v6 v7 v8 Fp} vd v9 v10 FC4} BC5{ BC6{ v11 v12 v13 v14 v15 v16} VBC7{ BC8{ BC9{ BC4 v17 v18} BC4 v19 v20 v21 v22} VBC10{ VBC11{ VBC12{ v23 FC13{ v32 v33} Fp} v24} v25 v26 v27} v28 v29 v30} vd v31 Fp FL:5} Fc}


S3512C1 ::~S3512C1(){ note_dtor("S3512C1", this);} // tgen
S3512C1 ::S3512C1(){ note_ctor("S3512C1", this);} // tgen

static void Test_S3512C1()
{
  extern Class_Descriptor cd_S3512C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,34)];
    init_test(&cd_S3512C1, buf);
    S3512C1 *dp, &lv = *(dp=new (buf) S3512C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,132), "sizeof(S3512C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3512C1)");
    check_base_class_offset(lv, (S3512C4*)(S3512C3*)(S3512C2*), ABISELECT(96,44), "S3512C1");
    check_base_class_offset(lv, (S3512C3*)(S3512C2*), 0, "S3512C1");
    check_base_class_offset(lv, (S3512C2*), 0, "S3512C1");
    check_base_class_offset(lv, (S3512C6*)(S3512C5*), ABISELECT(64,32), "S3512C1");
    check_base_class_offset(lv, (S3512C4*)(S3512C9*)(S3512C8*)(S3512C7*), ABISELECT(144,68), "S3512C1");
    check_base_class_offset(lv, (S3512C9*)(S3512C8*)(S3512C7*), ABISELECT(144,68), "S3512C1");
    /*is_ambiguous_... S3512C8::S3512C4 */ AMB_check_base_class_offset(lv, (S3512C4*)(S3512C8*)(S3512C7*), ABISELECT(192,92), "S3512C1");
    check_base_class_offset(lv, (S3512C8*)(S3512C7*), ABISELECT(144,68), "S3512C1");
    check_base_class_offset(lv, (S3512C12*)(S3512C11*), ABISELECT(240,120), "S3512C1");
    check_base_class_offset(lv, (S3512C11*)(S3512C10*), ABISELECT(232,116), "S3512C1");
    check_base_class_offset(lv, (S3512C10*)(S3512C7*), ABISELECT(232,116), "S3512C1");
    check_base_class_offset(lv, (S3512C7*)(S3512C5*), ABISELECT(144,68), "S3512C1");
    check_base_class_offset(lv, (S3512C5*), ABISELECT(64,32), "S3512C1");
    check_field_offset(lv, s3512c1f0, ABISELECT(81,41), "S3512C1.s3512c1f0");
    test_class_info(&lv, &cd_S3512C1);
    dp->~S3512C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3512C1(Test_S3512C1, "S3512C1", ABISELECT(272,132));

#else // __cplusplus

extern void _ZN7S3512C1C1Ev();
extern void _ZN7S3512C1D1Ev();
Name_Map name_map_S3512C1[] = {
  NSPAIR(_ZN7S3512C1C1Ev),
  NSPAIR(_ZN7S3512C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C3;
extern VTBL_ENTRY _ZTI7S3512C3[];
extern  VTBL_ENTRY _ZTV7S3512C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C3[];
extern Class_Descriptor cd_S3512C2;
extern VTBL_ENTRY _ZTI7S3512C2[];
extern  VTBL_ENTRY _ZTV7S3512C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C2[];
extern Class_Descriptor cd_S3512C6;
extern VTBL_ENTRY _ZTI7S3512C6[];
extern  VTBL_ENTRY _ZTV7S3512C6[];
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C9;
extern VTBL_ENTRY _ZTI7S3512C9[];
extern  VTBL_ENTRY _ZTV7S3512C9[];
extern Class_Descriptor cd_S3512C4;
extern VTBL_ENTRY _ZTI7S3512C4[];
extern  VTBL_ENTRY _ZTV7S3512C4[];
extern Class_Descriptor cd_S3512C8;
extern VTBL_ENTRY _ZTI7S3512C8[];
extern  VTBL_ENTRY _ZTV7S3512C8[];
extern Class_Descriptor cd_S3512C12;
extern VTBL_ENTRY _ZTI8S3512C12[];
extern  VTBL_ENTRY _ZTV8S3512C12[];
extern Class_Descriptor cd_S3512C11;
extern VTBL_ENTRY _ZTI8S3512C11[];
extern  VTBL_ENTRY _ZTV8S3512C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C11[];
extern Class_Descriptor cd_S3512C10;
extern VTBL_ENTRY _ZTI8S3512C10[];
extern  VTBL_ENTRY _ZTV8S3512C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3512C10[];
extern Class_Descriptor cd_S3512C7;
extern VTBL_ENTRY _ZTI7S3512C7[];
extern  VTBL_ENTRY _ZTV7S3512C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C7[];
extern Class_Descriptor cd_S3512C5;
extern VTBL_ENTRY _ZTI7S3512C5[];
extern  VTBL_ENTRY _ZTV7S3512C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C5[];
static Base_Class bases_S3512C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3512C4,    ABISELECT(96,44), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S3512C3,    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
    10, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3512C2,    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_S3512C6,    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
    12, //immediately_derived
  0, 0},
  {&cd_S3512C4,    ABISELECT(144,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
    5, //immediately_derived
  0, 0},
  {&cd_S3512C9,    ABISELECT(144,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
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3512C4,    ABISELECT(192,92), //bcp->offset
    65, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3512C8,    ABISELECT(144,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
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3512C12,    ABISELECT(240,120), //bcp->offset
    81, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3512C11,    ABISELECT(232,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3512C10,    ABISELECT(232,116), //bcp->offset
    69, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3512C7,    ABISELECT(144,68), //bcp->offset
    38, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3512C5,    ABISELECT(64,32), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3512C1[];
extern void _ZN7S3512C1D1Ev();
extern void _ZN7S3512C1D0Ev();
extern void _ZN7S3512C32v3Ev();
extern void _ZN7S3512C32v4Ev();
extern void _ZN7S3512C32v5Ev();
extern void _ZN7S3512C32v6Ev();
extern void _ZN7S3512C32v7Ev();
extern void _ZN7S3512C32v8Ev();
extern void _ZN7S3512C22v9Ev();
extern void _ZN7S3512C23v10Ev();
extern void _ZN7S3512C63v11Ev();
extern void _ZN7S3512C63v12Ev();
extern void _ZN7S3512C63v13Ev();
extern void _ZN7S3512C63v14Ev();
extern void _ZN7S3512C63v15Ev();
extern void _ZN7S3512C63v16Ev();
extern void ABISELECT(_ZThn64_N7S3512C1D1Ev,_ZThn32_N7S3512C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S3512C1D0Ev,_ZThn32_N7S3512C1D0Ev)();
extern void _ZN7S3512C53v31Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C93v17Ev();
extern void _ZN7S3512C93v18Ev();
extern void _ZN7S3512C83v19Ev();
extern void _ZN7S3512C83v20Ev();
extern void _ZN7S3512C83v21Ev();
extern void _ZN7S3512C83v22Ev();
extern void _ZN7S3512C73v28Ev();
extern void _ZN7S3512C73v29Ev();
extern void _ZN7S3512C73v30Ev();
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY vtc_S3512C1[] = {
  ABISELECT(240,120),
  ABISELECT(232,116),
  ABISELECT(232,116),
  ABISELECT(144,68),
  ABISELECT(96,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C1[0]),
  (VTBL_ENTRY)&_ZN7S3512C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3512C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3512C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3512C23v10Ev,
  ABISELECT(176,88),
  ABISELECT(168,84),
  ABISELECT(168,84),
  ABISELECT(80,36),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S3512C1[0]),
  (VTBL_ENTRY)&_ZN7S3512C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v12Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v13Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v14Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3512C1D1Ev,_ZThn32_N7S3512C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S3512C1D0Ev,_ZThn32_N7S3512C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3512C53v31Ev,
  0,
  0,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S3512C1[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-144,-68),
  (VTBL_ENTRY)&(_ZTI7S3512C1[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v18Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v22Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v30Ev,
  ABISELECT(-192,-92),
  (VTBL_ENTRY)&(_ZTI7S3512C1[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI7S3512C1[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
  0,
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI7S3512C1[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern VTBL_ENTRY _ZTV7S3512C1[];
extern void _ZN7S3512C2D1Ev();
extern void _ZN7S3512C2D0Ev();
extern void _ZN7S3512C32v3Ev();
extern void _ZN7S3512C32v4Ev();
extern void _ZN7S3512C32v5Ev();
extern void _ZN7S3512C32v6Ev();
extern void _ZN7S3512C32v7Ev();
extern void _ZN7S3512C32v8Ev();
extern void _ZN7S3512C22v9Ev();
extern void _ZN7S3512C23v10Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C2__7S3512C1[] = {
  ABISELECT(96,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C2[0]),
  (VTBL_ENTRY)&_ZN7S3512C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3512C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3512C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3512C23v10Ev,
};
extern void _ZN7S3512C3D1Ev();
extern void _ZN7S3512C3D0Ev();
extern void _ZN7S3512C32v3Ev();
extern void _ZN7S3512C32v4Ev();
extern void _ZN7S3512C32v5Ev();
extern void _ZN7S3512C32v6Ev();
extern void _ZN7S3512C32v7Ev();
extern void _ZN7S3512C32v8Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C37S3512C2__7S3512C1[] = {
  ABISELECT(96,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C3[0]),
  (VTBL_ENTRY)&_ZN7S3512C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3512C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3512C32v8Ev,
};
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C4__7S3512C37S3512C2__7S3512C1[] = {
  0,
  0,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S3512C3[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
};
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C4__7S3512C2__7S3512C1[] = {
  0,
  0,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S3512C2[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
};
extern void _ZN7S3512C63v11Ev();
extern void _ZN7S3512C63v12Ev();
extern void _ZN7S3512C63v13Ev();
extern void _ZN7S3512C63v14Ev();
extern void _ZN7S3512C63v15Ev();
extern void _ZN7S3512C63v16Ev();
extern void _ZN7S3512C5D1Ev();
extern void _ZN7S3512C5D0Ev();
extern void _ZN7S3512C53v31Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C5__7S3512C1[] = {
  ABISELECT(176,88),
  ABISELECT(168,84),
  ABISELECT(168,84),
  ABISELECT(80,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN7S3512C63v11Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v12Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v13Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v14Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3512C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3512C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3512C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3512C53v31Ev,
};
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C93v17Ev();
extern void _ZN7S3512C93v18Ev();
extern void _ZN7S3512C83v19Ev();
extern void _ZN7S3512C83v20Ev();
extern void _ZN7S3512C83v21Ev();
extern void _ZN7S3512C83v22Ev();
extern void _ZN7S3512C73v28Ev();
extern void _ZN7S3512C73v29Ev();
extern void _ZN7S3512C73v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C7__7S3512C5__7S3512C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v18Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v22Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v30Ev,
};
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C47S3512C87S3512C7__A1__7S3512C5__7S3512C1[] = {
  ABISELECT(-128,-60),
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
};
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C10__7S3512C5__7S3512C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-168,-84),
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__7S3512C5__7S3512C1[] = {
  0,
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI7S3512C5[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern void _ZN7S3512C42v1Ev();
extern void _ZN7S3512C42v2Ev();
extern void _ZN7S3512C93v17Ev();
extern void _ZN7S3512C93v18Ev();
extern void _ZN7S3512C83v19Ev();
extern void _ZN7S3512C83v20Ev();
extern void _ZN7S3512C83v21Ev();
extern void _ZN7S3512C83v22Ev();
extern void _ZN7S3512C73v28Ev();
extern void _ZN7S3512C73v29Ev();
extern void _ZN7S3512C73v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3512C7__7S3512C1[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN7S3512C42v1Ev,
  (VTBL_ENTRY)&_ZN7S3512C42v2Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v17Ev,
  (VTBL_ENTRY)&_ZN7S3512C93v18Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v19Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v20Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v21Ev,
  (VTBL_ENTRY)&_ZN7S3512C83v22Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3512C73v30Ev,
};
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C10__7S3512C7__7S3512C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__7S3512C7__7S3512C1[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3512C7[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern void _ZN8S3512C113v24Ev();
extern void _ZN8S3512C103v25Ev();
extern void _ZN8S3512C103v26Ev();
extern void _ZN8S3512C103v27Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C10__7S3512C1[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C10[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v25Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v26Ev,
  (VTBL_ENTRY)&_ZN8S3512C103v27Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__8S3512C10__7S3512C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C10[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
extern void _ZN8S3512C113v24Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C11__7S3512C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C113v24Ev,
};
extern void _ZN8S3512C123v23Ev();
static  VTBL_ENTRY _tg__ZTV8S3512C12__8S3512C11__7S3512C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S3512C11[0]),
  (VTBL_ENTRY)&_ZN8S3512C123v23Ev,
};
static  VTT_ENTRY vtt_S3512C1[] = {
  {&(_ZTV7S3512C1[7]),  7,85},
  {&(_tg__ZTV7S3512C2__7S3512C1[3]),  3,13},
  {&(_tg__ZTV7S3512C37S3512C2__7S3512C1[3]),  3,11},
  {&(_tg__ZTV7S3512C4__7S3512C37S3512C2__7S3512C1[4]),  4,6},
  {&(_tg__ZTV7S3512C4__7S3512C2__7S3512C1[4]),  4,6},
  {&(_tg__ZTV7S3512C5__7S3512C1[6]),  6,15},
  {&(_tg__ZTV7S3512C7__7S3512C5__7S3512C1[16]),  16,27},
  {&(_tg__ZTV7S3512C47S3512C87S3512C7__A1__7S3512C5__7S3512C1[2]),  2,4},
  {&(_tg__ZTV8S3512C10__7S3512C5__7S3512C1[8]),  8,12},
  {&(_tg__ZTV8S3512C10__7S3512C5__7S3512C1[8]),  8,12},
  {&(_tg__ZTV8S3512C12__7S3512C5__7S3512C1[3]),  3,4},
  {&(_ZTV7S3512C1[36]),  36,85},
  {&(_ZTV7S3512C1[23]),  23,85},
  {&(_ZTV7S3512C1[54]),  54,85},
  {&(_ZTV7S3512C1[67]),  67,85},
  {&(_ZTV7S3512C1[77]),  77,85},
  {&(_ZTV7S3512C1[77]),  77,85},
  {&(_ZTV7S3512C1[84]),  84,85},
  {&(_tg__ZTV7S3512C7__7S3512C1[5]),  5,16},
  {&(_tg__ZTV8S3512C10__7S3512C7__7S3512C1[8]),  8,12},
  {&(_tg__ZTV8S3512C10__7S3512C7__7S3512C1[8]),  8,12},
  {&(_tg__ZTV8S3512C12__7S3512C7__7S3512C1[3]),  3,4},
  {&(_tg__ZTV8S3512C10__7S3512C1[5]),  5,9},
  {&(_tg__ZTV8S3512C10__7S3512C1[5]),  5,9},
  {&(_tg__ZTV8S3512C12__8S3512C10__7S3512C1[3]),  3,4},
  {&(_tg__ZTV8S3512C11__7S3512C1[3]),  3,4},
  {&(_tg__ZTV8S3512C12__8S3512C11__7S3512C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3512C1[];
extern  VTBL_ENTRY _ZTV7S3512C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3512C1[];
Class_Descriptor cd_S3512C1 = {  "S3512C1", // class name
  bases_S3512C1, 13,
  &(vtc_S3512C1[0]), // expected_vtbl_contents
  &(vtt_S3512C1[0]), // expected_vtt_contents
  ABISELECT(272,132), // object size
  NSPAIRA(_ZTI7S3512C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3512C1),85, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3512C1),27, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7457C5  : S19572C5 {
};
//SIG(-1 S7457C5) C1{ BC2{ m Fs:13}}



static void Test_S7457C5()
{
  extern Class_Descriptor cd_S7457C5;
  void *lvp;
  {
    short buf[2];
    init_test(&cd_S7457C5, buf);
    S7457C5 &lv = *(new (buf) S7457C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), 2, "sizeof(S7457C5)");
    check2(__alignof__(lv), 2, "__alignof__(S7457C5)");
    check_base_class_offset(lv, (S19572C5*), 0, "S7457C5");
    test_class_info(&lv, &cd_S7457C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C5(Test_S7457C5, "S7457C5", 2);

#else // __cplusplus

extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S7457C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7457C5[];
Class_Descriptor cd_S7457C5 = {  "S7457C5", // class name
  bases_S7457C5, 1,
  0, // no vftv
  0, //no vtt
  2, // object size
  NSPAIRA(_ZTI7S7457C5),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  S7457C6  : virtual S7457C5 {
  ~S7457C6(); // tgen
  S7457C6(); // tgen
};
//SIG(-1 S7457C6) C1{ VBC2{ BC3{ m Fs:13}}}


S7457C6 ::~S7457C6(){ note_dtor("S7457C6", this);} // tgen
S7457C6 ::S7457C6(){ note_ctor("S7457C6", this);} // tgen

static void Test_S7457C6()
{
  extern Class_Descriptor cd_S7457C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7457C6, buf);
    S7457C6 *dp, &lv = *(dp=new (buf) S7457C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7457C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C6)");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(8,4), "S7457C6");
    check_base_class_offset(lv, (S7457C5*), ABISELECT(8,4), "S7457C6");
    test_class_info(&lv, &cd_S7457C6);
    dp->~S7457C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C6(Test_S7457C6, "S7457C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7457C6C1Ev();
extern void _ZN7S7457C6D1Ev();
Name_Map name_map_S7457C6[] = {
  NSPAIR(_ZN7S7457C6C1Ev),
  NSPAIR(_ZN7S7457C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
static Base_Class bases_S7457C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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_S7457C5,    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 _ZTI7S7457C6[];
static  VTBL_ENTRY vtc_S7457C6[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern VTBL_ENTRY _ZTV7S7457C6[];
static  VTT_ENTRY vtt_S7457C6[] = {
  {&(_ZTV7S7457C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
Class_Descriptor cd_S7457C6 = {  "S7457C6", // class name
  bases_S7457C6, 2,
  &(vtc_S7457C6[0]), // expected_vtbl_contents
  &(vtt_S7457C6[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7457C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7457C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7457C6),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  S7457C9  : virtual S19572C5 {
  ~S7457C9(); // tgen
  S7457C9(); // tgen
};
//SIG(-1 S7457C9) C1{ VBC2{ m Fs:13}}


S7457C9 ::~S7457C9(){ note_dtor("S7457C9", this);} // tgen
S7457C9 ::S7457C9(){ note_ctor("S7457C9", this);} // tgen

static void Test_S7457C9()
{
  extern Class_Descriptor cd_S7457C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7457C9, buf);
    S7457C9 *dp, &lv = *(dp=new (buf) S7457C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7457C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C9)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S7457C9");
    test_class_info(&lv, &cd_S7457C9);
    dp->~S7457C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C9(Test_S7457C9, "S7457C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7457C9C1Ev();
extern void _ZN7S7457C9D1Ev();
Name_Map name_map_S7457C9[] = {
  NSPAIR(_ZN7S7457C9C1Ev),
  NSPAIR(_ZN7S7457C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S7457C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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 _ZTI7S7457C9[];
static  VTBL_ENTRY vtc_S7457C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern VTBL_ENTRY _ZTV7S7457C9[];
static  VTT_ENTRY vtt_S7457C9[] = {
  {&(_ZTV7S7457C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
Class_Descriptor cd_S7457C9 = {  "S7457C9", // class name
  bases_S7457C9, 1,
  &(vtc_S7457C9[0]), // expected_vtbl_contents
  &(vtt_S7457C9[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7457C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7457C9),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7457C9),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  S7457C8  : S7457C9 , S7457C5 {
  virtual  ~S7457C8(); // _ZN7S7457C8D2Ev
  S7457C8(); // tgen
};
//SIG(-1 S7457C8) C1{ BC2{ VBC3{ m Fs:13}} BC4{ BC3} vd}


 S7457C8 ::~S7457C8(){ note_dtor("S7457C8", this);}
S7457C8 ::S7457C8(){ note_ctor("S7457C8", this);} // tgen

static void Test_S7457C8()
{
  extern Class_Descriptor cd_S7457C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7457C8, buf);
    S7457C8 *dp, &lv = *(dp=new (buf) S7457C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7457C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C8)");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(10,6), "S7457C8");
    check_base_class_offset(lv, (S7457C9*), 0, "S7457C8");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(8,4), "S7457C8");
    check_base_class_offset(lv, (S7457C5*), ABISELECT(8,4), "S7457C8");
    test_class_info(&lv, &cd_S7457C8);
    dp->~S7457C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C8(Test_S7457C8, "S7457C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7457C8C1Ev();
extern void _ZN7S7457C8D2Ev();
Name_Map name_map_S7457C8[] = {
  NSPAIR(_ZN7S7457C8C1Ev),
  NSPAIR(_ZN7S7457C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
static Base_Class bases_S7457C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7457C9,    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},
  {&cd_S19572C5,    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_S7457C5,    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 _ZTI7S7457C8[];
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY vtc_S7457C8[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
extern VTBL_ENTRY _ZTV7S7457C8[];
static  VTBL_ENTRY _tg__ZTV7S7457C9__7S7457C8[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTT_ENTRY vtt_S7457C8[] = {
  {&(_ZTV7S7457C8[3]),  3,5},
  {&(_tg__ZTV7S7457C9__7S7457C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
Class_Descriptor cd_S7457C8 = {  "S7457C8", // class name
  bases_S7457C8, 4,
  &(vtc_S7457C8[0]), // expected_vtbl_contents
  &(vtt_S7457C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7457C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7457C8),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7457C8),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  S7457C7  : virtual S19572C5 , virtual S7457C5 , S7457C6 , S7457C8 , S7457C9 {
  long double s7457c7f0[5];
  virtual  ~S7457C7(); // _ZN7S7457C7D2Ev
  S7457C7(); // tgen
};
//SIG(-1 S7457C7) C1{ VBC2{ m Fs:13} VBC3{ BC2} BC4{ VBC3} BC5{ BC6{ VBC2} BC3 vd} BC6 vd FD[5]}


 S7457C7 ::~S7457C7(){ note_dtor("S7457C7", this);}
S7457C7 ::S7457C7(){ note_ctor("S7457C7", this);} // tgen

static void Test_S7457C7()
{
  extern Class_Descriptor cd_S7457C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,21)];
    init_test(&cd_S7457C7, buf);
    S7457C7 *dp, &lv = *(dp=new (buf) S7457C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S7457C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7457C7)");
    /*is_ambiguous_... S7457C7::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(112,76), "S7457C7");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*), ABISELECT(112,76), "S7457C7");
    /*is_ambiguous_... S7457C7::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(112,76), "S7457C7");
    /*is_ambiguous_... S7457C7::S7457C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(114,78), "S7457C7");
    /*is_ambiguous_... S7457C7::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*), ABISELECT(114,78), "S7457C7");
    check_base_class_offset(lv, (S7457C5*)(S7457C6*), ABISELECT(114,78), "S7457C7");
    check_base_class_offset(lv, (S7457C6*), 0, "S7457C7");
    check_base_class_offset(lv, (S7457C9*)(S7457C8*), ABISELECT(8,4), "S7457C7");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*), ABISELECT(16,8), "S7457C7");
    check_base_class_offset(lv, (S7457C5*)(S7457C8*), ABISELECT(16,8), "S7457C7");
    check_base_class_offset(lv, (S7457C8*), ABISELECT(8,4), "S7457C7");
    /*is_ambiguous_... S7457C7::S7457C9 */ AMB_check_base_class_offset(lv, (S7457C9*), ABISELECT(24,12), "S7457C7");
    check_field_offset(lv, s7457c7f0, ABISELECT(32,16), "S7457C7.s7457c7f0");
    test_class_info(&lv, &cd_S7457C7);
    dp->~S7457C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C7(Test_S7457C7, "S7457C7", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN7S7457C7C1Ev();
extern void _ZN7S7457C7D2Ev();
Name_Map name_map_S7457C7[] = {
  NSPAIR(_ZN7S7457C7C1Ev),
  NSPAIR(_ZN7S7457C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C6;
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
static Base_Class bases_S7457C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(112,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19572C5,    ABISELECT(114,78), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C5,    ABISELECT(114,78), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7457C6,    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},
  {&cd_S7457C9,    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
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    6, //immediately_derived
  0, 0},
  {&cd_S7457C5,    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
    7, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7457C9,    ABISELECT(24,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7457C7[];
extern void _ZN7S7457C7D1Ev();
extern void _ZN7S7457C7D0Ev();
extern void ABISELECT(_ZThn8_N7S7457C7D1Ev,_ZThn4_N7S7457C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7457C7D0Ev,_ZThn4_N7S7457C7D0Ev)();
static  VTBL_ENTRY vtc_S7457C7[] = {
  ABISELECT(112,76),
  ABISELECT(114,78),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
  (VTBL_ENTRY)&_ZN7S7457C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C7D0Ev,
  ABISELECT(104,72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7457C7D1Ev,_ZThn4_N7S7457C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7457C7D0Ev,_ZThn4_N7S7457C7D0Ev),
  ABISELECT(88,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
};
extern VTBL_ENTRY _ZTV7S7457C7[];
static  VTBL_ENTRY _tg__ZTV7S7457C6__7S7457C7[] = {
  ABISELECT(114,78),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C8__7S7457C7[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C8__7S7457C7[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__A1__7S7457C7[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTT_ENTRY vtt_S7457C7[] = {
  {&(_ZTV7S7457C7[4]),  4,14},
  {&(_tg__ZTV7S7457C6__7S7457C7[3]),  3,3},
  {&(_tg__ZTV7S7457C8__7S7457C7[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C8__7S7457C7[3]),  3,3},
  {&(_tg__ZTV7S7457C9__A1__7S7457C7[3]),  3,3},
  {&(_ZTV7S7457C7[9]),  9,14},
  {&(_ZTV7S7457C7[14]),  14,14},
};
extern VTBL_ENTRY _ZTI7S7457C7[];
extern  VTBL_ENTRY _ZTV7S7457C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C7[];
Class_Descriptor cd_S7457C7 = {  "S7457C7", // class name
  bases_S7457C7, 9,
  &(vtc_S7457C7[0]), // expected_vtbl_contents
  &(vtt_S7457C7[0]), // expected_vtt_contents
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI7S7457C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7457C7),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7457C7),7, //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  S7457C11  : virtual S19572C5 {
  ~S7457C11(); // tgen
  S7457C11(); // tgen
};
//SIG(-1 S7457C11) C1{ VBC2{ m Fs:13}}


S7457C11 ::~S7457C11(){ note_dtor("S7457C11", this);} // tgen
S7457C11 ::S7457C11(){ note_ctor("S7457C11", this);} // tgen

static void Test_S7457C11()
{
  extern Class_Descriptor cd_S7457C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7457C11, buf);
    S7457C11 *dp, &lv = *(dp=new (buf) S7457C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7457C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C11)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S7457C11");
    test_class_info(&lv, &cd_S7457C11);
    dp->~S7457C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C11(Test_S7457C11, "S7457C11", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7457C11C1Ev();
extern void _ZN8S7457C11D1Ev();
Name_Map name_map_S7457C11[] = {
  NSPAIR(_ZN8S7457C11C1Ev),
  NSPAIR(_ZN8S7457C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S7457C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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 _ZTI8S7457C11[];
static  VTBL_ENTRY vtc_S7457C11[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C11[0]),
};
extern VTBL_ENTRY _ZTV8S7457C11[];
static  VTT_ENTRY vtt_S7457C11[] = {
  {&(_ZTV8S7457C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7457C11[];
extern  VTBL_ENTRY _ZTV8S7457C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C11[];
Class_Descriptor cd_S7457C11 = {  "S7457C11", // class name
  bases_S7457C11, 1,
  &(vtc_S7457C11[0]), // expected_vtbl_contents
  &(vtt_S7457C11[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7457C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7457C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7457C11),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  S7457C10  : virtual S7457C11 , virtual S7457C9 , S19572C5 , virtual S7457C5 {
  int s7457c10f0;
  virtual  ~S7457C10(); // _ZN8S7457C10D2Ev
  S7457C10(); // tgen
};
//SIG(-1 S7457C10) C1{ VBC2{ VBC3{ m Fs:13}} VBC4{ VBC3} BC3 VBC5{ BC3} vd Fi}


 S7457C10 ::~S7457C10(){ note_dtor("S7457C10", this);}
S7457C10 ::S7457C10(){ note_ctor("S7457C10", this);} // tgen

static void Test_S7457C10()
{
  extern Class_Descriptor cd_S7457C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S7457C10, buf);
    S7457C10 *dp, &lv = *(dp=new (buf) S7457C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S7457C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C10)");
    check_base_class_offset(lv, (S19572C5*)(S7457C11*), ABISELECT(16,12), "S7457C10");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(16,12), "S7457C10");
    check_base_class_offset(lv, (S7457C11*), 0, "S7457C10");
    check_base_class_offset(lv, (S7457C9*), ABISELECT(24,16), "S7457C10");
    /*is_ambiguous_... S7457C10::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S7457C10");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(32,20), "S7457C10");
    check_base_class_offset(lv, (S7457C5*), ABISELECT(32,20), "S7457C10");
    check_field_offset(lv, s7457c10f0, ABISELECT(12,8), "S7457C10.s7457c10f0");
    test_class_info(&lv, &cd_S7457C10);
    dp->~S7457C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C10(Test_S7457C10, "S7457C10", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S7457C10C1Ev();
extern void _ZN8S7457C10D2Ev();
Name_Map name_map_S7457C10[] = {
  NSPAIR(_ZN8S7457C10C1Ev),
  NSPAIR(_ZN8S7457C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C11;
extern VTBL_ENTRY _ZTI8S7457C11[];
extern  VTBL_ENTRY _ZTV8S7457C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C11[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
static Base_Class bases_S7457C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(16,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
  0, 1},
  {&cd_S7457C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7457C9,    ABISELECT(24,16), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    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_S19572C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S7457C5,    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 _ZTI8S7457C10[];
extern void _ZN8S7457C10D1Ev();
extern void _ZN8S7457C10D0Ev();
static  VTBL_ENTRY vtc_S7457C10[] = {
  ABISELECT(32,20),
  ABISELECT(24,16),
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
  (VTBL_ENTRY)&_ZN8S7457C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C10D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
};
extern VTBL_ENTRY _ZTV8S7457C10[];
static  VTBL_ENTRY _tg__ZTV8S7457C11__8S7457C10[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C10[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTT_ENTRY vtt_S7457C10[] = {
  {&(_ZTV8S7457C10[6]),  6,11},
  {&(_ZTV8S7457C10[6]),  6,11},
  {&(_ZTV8S7457C10[11]),  11,11},
  {&(_tg__ZTV8S7457C11__8S7457C10[3]),  3,3},
  {&(_tg__ZTV7S7457C9__8S7457C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7457C10[];
extern  VTBL_ENTRY _ZTV8S7457C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C10[];
Class_Descriptor cd_S7457C10 = {  "S7457C10", // class name
  bases_S7457C10, 6,
  &(vtc_S7457C10[0]), // expected_vtbl_contents
  &(vtt_S7457C10[0]), // expected_vtt_contents
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S7457C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7457C10),11, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7457C10),5, //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  S7457C4  : virtual S7457C5 , virtual S7457C6 , virtual S7457C7 , S7457C9 {
  ::S7457C10 s7457c4f0;
  virtual void  v1(); // _ZN7S7457C42v1Ev
  ~S7457C4(); // tgen
  S7457C4(); // tgen
};
//SIG(-1 S7457C4) C1{ VBC2{ BC3{ m Fs:13}} VBC4{ VBC2} VBC5{ VBC3 VBC2 BC4 BC6{ BC7{ VBC3} BC2 vd} BC7 vd FD[5]} BC7 v1 FC8{ VBC9{ VBC3} VBC7 BC3 VBC2 vd Fi}}


void  S7457C4 ::v1(){vfunc_called(this, "_ZN7S7457C42v1Ev");}
S7457C4 ::~S7457C4(){ note_dtor("S7457C4", this);} // tgen
S7457C4 ::S7457C4(){ note_ctor("S7457C4", this);} // tgen

static void Test_S7457C4()
{
  extern Class_Descriptor cd_S7457C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,30)];
    init_test(&cd_S7457C4, buf);
    S7457C4 *dp, &lv = *(dp=new (buf) S7457C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,116), "sizeof(S7457C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7457C4)");
    /*is_ambiguous_... S7457C4::S7457C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(48,28), "S7457C4");
    /*is_ambiguous_... S7457C4::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*), ABISELECT(48,28), "S7457C4");
    /*is_ambiguous_... S7457C4::S7457C6 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C6*), ABISELECT(48,28), "S7457C4");
    /*is_ambiguous_... S7457C7::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C7*), ABISELECT(48,28), "S7457C4");
    check_base_class_offset(lv, (S7457C5*)(S7457C6*)(S7457C7*), ABISELECT(48,28), "S7457C4");
    /*is_ambiguous_... S7457C4::S7457C6 */ AMB_check_base_class_offset(lv, (S7457C6*), ABISELECT(56,32), "S7457C4");
    /*is_ambiguous_... S7457C7::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C7*), ABISELECT(176,112), "S7457C4");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*)(S7457C7*), ABISELECT(176,112), "S7457C4");
    /*is_ambiguous_... S7457C7::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C7*), ABISELECT(176,112), "S7457C4");
    /*is_ambiguous_... S7457C4::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(176,112), "S7457C4");
    check_base_class_offset(lv, (S7457C6*)(S7457C7*), ABISELECT(64,36), "S7457C4");
    check_base_class_offset(lv, (S7457C9*)(S7457C8*)(S7457C7*), ABISELECT(72,40), "S7457C4");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*)(S7457C7*), ABISELECT(80,44), "S7457C4");
    check_base_class_offset(lv, (S7457C5*)(S7457C8*)(S7457C7*), ABISELECT(80,44), "S7457C4");
    check_base_class_offset(lv, (S7457C8*)(S7457C7*), ABISELECT(72,40), "S7457C4");
    /*is_ambiguous_... S7457C7::S7457C9 */ AMB_check_base_class_offset(lv, (S7457C9*)(S7457C7*), ABISELECT(88,48), "S7457C4");
    check_base_class_offset(lv, (S7457C7*), ABISELECT(64,36), "S7457C4");
    /*is_ambiguous_... S7457C4::S7457C9 */ AMB_check_base_class_offset(lv, (S7457C9*), 0, "S7457C4");
    check_field_offset(lv, s7457c4f0, ABISELECT(8,4), "S7457C4.s7457c4f0");
    test_class_info(&lv, &cd_S7457C4);
    dp->~S7457C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C4(Test_S7457C4, "S7457C4", ABISELECT(192,116));

#else // __cplusplus

extern void _ZN7S7457C4C1Ev();
extern void _ZN7S7457C4D1Ev();
Name_Map name_map_S7457C4[] = {
  NSPAIR(_ZN7S7457C4C1Ev),
  NSPAIR(_ZN7S7457C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C6;
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C6;
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S7457C7;
extern VTBL_ENTRY _ZTI7S7457C7[];
extern  VTBL_ENTRY _ZTV7S7457C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C7[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
static Base_Class bases_S7457C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    1, //immediately_derived
  0, 0},
  {&cd_S7457C5,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S7457C6,    ABISELECT(56,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(176,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
    5, //immediately_derived
  0, 1},
  {&cd_S7457C6,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C9,    ABISELECT(72,40), //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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    7, //immediately_derived
  0, 0},
  {&cd_S7457C5,    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
    8, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(72,40), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C9,    ABISELECT(88,48), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C7,    ABISELECT(64,36), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7457C9,    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 _ZTI7S7457C4[];
extern void _ZN7S7457C42v1Ev();
extern void _ZN7S7457C4D1Ev();
extern void _ZN7S7457C4D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev)();
extern void ABISELECT(_ZThn64_N7S7457C4D1Ev,_ZThn36_N7S7457C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev)();
extern void ABISELECT(_ZThn64_N7S7457C4D0Ev,_ZThn36_N7S7457C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S7457C4D1Ev,_ZTvn4_n20_N7S7457C4D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7457C4D0Ev,_ZTvn4_n20_N7S7457C4D0Ev)();
static  VTBL_ENTRY vtc_S7457C4[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&_ZN7S7457C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7457C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C4D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  ABISELECT(-64,-36),
  ABISELECT(112,76),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev),
  ABISELECT(104,72),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C4D1Ev,_ZTvn4_n20_N7S7457C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C4D0Ev,_ZTvn4_n20_N7S7457C4D0Ev),
  ABISELECT(88,64),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
};
extern VTBL_ENTRY _ZTV7S7457C4[];
static  VTBL_ENTRY _tg__ZTV7S7457C9__A2__7S7457C4[] = {
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__7S7457C4[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern void _ZN7S7457C7D1Ev();
extern void _ZN7S7457C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C7__7S7457C4[] = {
  ABISELECT(112,76),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
  (VTBL_ENTRY)&_ZN7S7457C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C67S7457C7__A1__7S7457C4[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C87S7457C7__7S7457C4[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C87S7457C7__7S7457C4[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C7__A1__7S7457C4[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void ABISELECT(_ZThn8_N7S7457C7D1Ev,_ZThn4_N7S7457C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7457C7D0Ev,_ZThn4_N7S7457C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7457C8__7S7457C7__7S7457C4[] = {
  ABISELECT(104,72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7457C7D1Ev,_ZThn4_N7S7457C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7457C7D0Ev,_ZThn4_N7S7457C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__A1__7S7457C7__7S7457C4[] = {
  ABISELECT(88,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
};
static  VTT_ENTRY vtt_S7457C4[] = {
  {&(_ZTV7S7457C4[6]),  6,27},
  {&(_tg__ZTV7S7457C9__A2__7S7457C4[3]),  3,3},
  {&(_ZTV7S7457C4[12]),  12,27},
  {&(_ZTV7S7457C4[17]),  17,27},
  {&(_ZTV7S7457C4[22]),  22,27},
  {&(_ZTV7S7457C4[27]),  27,27},
  {&(_tg__ZTV7S7457C6__7S7457C4[3]),  3,3},
  {&(_tg__ZTV7S7457C7__7S7457C4[4]),  4,6},
  {&(_tg__ZTV7S7457C67S7457C7__A1__7S7457C4[3]),  3,3},
  {&(_tg__ZTV7S7457C87S7457C7__7S7457C4[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C87S7457C7__7S7457C4[3]),  3,3},
  {&(_tg__ZTV7S7457C97S7457C7__A1__7S7457C4[3]),  3,3},
  {&(_tg__ZTV7S7457C8__7S7457C7__7S7457C4[3]),  3,5},
  {&(_tg__ZTV7S7457C9__A1__7S7457C7__7S7457C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7457C4[];
extern  VTBL_ENTRY _ZTV7S7457C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C4[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7457C4D0Ev,_ZThn36_N7S7457C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7457C4D1Ev,_ZThn36_N7S7457C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7457C4 = {  "S7457C4", // class name
  bases_S7457C4, 12,
  &(vtc_S7457C4[0]), // expected_vtbl_contents
  &(vtt_S7457C4[0]), // expected_vtt_contents
  ABISELECT(192,116), // object size
  NSPAIRA(_ZTI7S7457C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7457C4),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7457C4),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7457C13  : virtual S19572C5 , virtual S7457C9 {
  ~S7457C13(); // tgen
  S7457C13(); // tgen
};
//SIG(-1 S7457C13) C1{ VBC2{ m Fs:13} VBC3{ VBC2}}


S7457C13 ::~S7457C13(){ note_dtor("S7457C13", this);} // tgen
S7457C13 ::S7457C13(){ note_ctor("S7457C13", this);} // tgen

static void Test_S7457C13()
{
  extern Class_Descriptor cd_S7457C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7457C13, buf);
    S7457C13 *dp, &lv = *(dp=new (buf) S7457C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7457C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C13)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S7457C13");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(8,4), "S7457C13");
    check_base_class_offset(lv, (S7457C9*), 0, "S7457C13");
    test_class_info(&lv, &cd_S7457C13);
    dp->~S7457C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C13(Test_S7457C13, "S7457C13", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7457C13C1Ev();
extern void _ZN8S7457C13D1Ev();
Name_Map name_map_S7457C13[] = {
  NSPAIR(_ZN8S7457C13C1Ev),
  NSPAIR(_ZN8S7457C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
static Base_Class bases_S7457C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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},
  {&cd_S7457C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7457C13[];
static  VTBL_ENTRY vtc_S7457C13[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C13[0]),
};
extern VTBL_ENTRY _ZTV8S7457C13[];
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C13[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTT_ENTRY vtt_S7457C13[] = {
  {&(_ZTV8S7457C13[4]),  4,4},
  {&(_ZTV8S7457C13[4]),  4,4},
  {&(_tg__ZTV7S7457C9__8S7457C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7457C13[];
extern  VTBL_ENTRY _ZTV8S7457C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C13[];
Class_Descriptor cd_S7457C13 = {  "S7457C13", // class name
  bases_S7457C13, 2,
  &(vtc_S7457C13[0]), // expected_vtbl_contents
  &(vtt_S7457C13[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7457C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7457C13),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7457C13),3, //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  S7457C14  : virtual S7457C5 , virtual S7457C10 , S7457C8 {
  virtual  ~S7457C14(); // _ZN8S7457C14D2Ev
  S7457C14(); // tgen
};
//SIG(-1 S7457C14) C1{ VBC2{ BC3{ m Fs:13}} VBC4{ VBC5{ VBC3} VBC6{ VBC3} BC3 VBC2 vd Fi} BC7{ BC6 BC2 vd} vd}


 S7457C14 ::~S7457C14(){ note_dtor("S7457C14", this);}
S7457C14 ::S7457C14(){ note_ctor("S7457C14", this);} // tgen

static void Test_S7457C14()
{
  extern Class_Descriptor cd_S7457C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S7457C14, buf);
    S7457C14 *dp, &lv = *(dp=new (buf) S7457C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S7457C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C14)");
    /*is_ambiguous_... S7457C14::S7457C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(10,6), "S7457C14");
    /*is_ambiguous_... S7457C14::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*), ABISELECT(10,6), "S7457C14");
    check_base_class_offset(lv, (S7457C5*)(S7457C10*), ABISELECT(10,6), "S7457C14");
    check_base_class_offset(lv, (S19572C5*)(S7457C11*), ABISELECT(32,20), "S7457C14");
    /*is_ambiguous_... S7457C14::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(32,20), "S7457C14");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*), ABISELECT(32,20), "S7457C14");
    check_base_class_offset(lv, (S7457C11*)(S7457C10*), ABISELECT(16,8), "S7457C14");
    check_base_class_offset(lv, (S7457C9*)(S7457C10*), ABISELECT(40,24), "S7457C14");
    /*is_ambiguous_... S7457C10::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C10*), ABISELECT(24,12), "S7457C14");
    check_base_class_offset(lv, (S7457C10*), ABISELECT(16,8), "S7457C14");
    check_base_class_offset(lv, (S7457C9*)(S7457C8*), 0, "S7457C14");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*), ABISELECT(8,4), "S7457C14");
    check_base_class_offset(lv, (S7457C5*)(S7457C8*), ABISELECT(8,4), "S7457C14");
    check_base_class_offset(lv, (S7457C8*), 0, "S7457C14");
    test_class_info(&lv, &cd_S7457C14);
    dp->~S7457C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C14(Test_S7457C14, "S7457C14", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S7457C14C1Ev();
extern void _ZN8S7457C14D2Ev();
Name_Map name_map_S7457C14[] = {
  NSPAIR(_ZN8S7457C14C1Ev),
  NSPAIR(_ZN8S7457C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C11;
extern VTBL_ENTRY _ZTI8S7457C11[];
extern  VTBL_ENTRY _ZTV8S7457C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C11[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C10;
extern VTBL_ENTRY _ZTI8S7457C10[];
extern  VTBL_ENTRY _ZTV8S7457C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C10[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
static Base_Class bases_S7457C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7457C5,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19572C5,    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
    3, //immediately_derived
  0, 1},
  {&cd_S7457C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7457C9,    ABISELECT(40,24), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19572C5,    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_S7457C10,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7457C9,    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
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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_S7457C5,    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
    10, //immediately_derived
  0, 0},
  {&cd_S7457C8,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S7457C14[];
extern void _ZN8S7457C14D1Ev();
extern void _ZN8S7457C14D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S7457C14D1Ev,_ZThn8_N8S7457C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev)();
extern void ABISELECT(_ZThn16_N8S7457C14D0Ev,_ZThn8_N8S7457C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7457C14[] = {
  ABISELECT(40,24),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(10,6),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
  (VTBL_ENTRY)&_ZN8S7457C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C14D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-6,-2),
  ABISELECT(24,16),
  0,
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
};
extern VTBL_ENTRY _ZTV8S7457C14[];
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C8__8S7457C14[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C8__A1__8S7457C14[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void _ZN8S7457C10D1Ev();
extern void _ZN8S7457C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C10__8S7457C14[] = {
  ABISELECT(-6,-2),
  ABISELECT(24,16),
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
  (VTBL_ENTRY)&_ZN8S7457C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C10__8S7457C14[] = {
  ABISELECT(-8,-4),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7457C11__8S7457C14[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C14[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTT_ENTRY vtt_S7457C14[] = {
  {&(_ZTV8S7457C14[7]),  7,21},
  {&(_tg__ZTV7S7457C8__8S7457C14[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C8__A1__8S7457C14[3]),  3,3},
  {&(_ZTV8S7457C14[16]),  16,21},
  {&(_ZTV8S7457C14[16]),  16,21},
  {&(_ZTV8S7457C14[21]),  21,21},
  {&(_tg__ZTV8S7457C10__8S7457C14[6]),  6,8},
  {&(_tg__ZTV8S7457C10__8S7457C14[6]),  6,8},
  {&(_tg__ZTV7S7457C9__8S7457C10__8S7457C14[3]),  3,3},
  {&(_tg__ZTV8S7457C11__8S7457C14[3]),  3,3},
  {&(_tg__ZTV7S7457C9__8S7457C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7457C14[];
extern  VTBL_ENTRY _ZTV8S7457C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C14[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7457C14D0Ev,_ZThn8_N8S7457C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7457C14D1Ev,_ZThn8_N8S7457C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7457C14 = {  "S7457C14", // class name
  bases_S7457C14, 11,
  &(vtc_S7457C14[0]), // expected_vtbl_contents
  &(vtt_S7457C14[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S7457C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7457C14),21, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7457C14),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7457C12  : virtual S7457C10 , virtual S7457C6 , virtual S7457C8 , S7457C13 , virtual S7457C14 {
  virtual  ~S7457C12(); // _ZN8S7457C12D2Ev
  S7457C12(); // tgen
};
//SIG(-1 S7457C12) C1{ VBC2{ VBC3{ VBC4{ m Fs:13}} VBC5{ VBC4} BC4 VBC6{ BC4} vd Fi} VBC7{ VBC6} VBC8{ BC5 BC6 vd} BC9{ VBC4 VBC5} VBC10{ VBC6 VBC2 BC8 vd} vd}


 S7457C12 ::~S7457C12(){ note_dtor("S7457C12", this);}
S7457C12 ::S7457C12(){ note_ctor("S7457C12", this);} // tgen

static void Test_S7457C12()
{
  extern Class_Descriptor cd_S7457C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S7457C12, buf);
    S7457C12 *dp, &lv = *(dp=new (buf) S7457C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S7457C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C12)");
    check_base_class_offset(lv, (S19572C5*)(S7457C11*), ABISELECT(24,16), "S7457C12");
    /*is_ambiguous_... S7457C12::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(24,16), "S7457C12");
    /*is_ambiguous_... S7457C12::S7457C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*), ABISELECT(24,16), "S7457C12");
    check_base_class_offset(lv, (S19572C5*)(S7457C13*), ABISELECT(24,16), "S7457C12");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*)(S7457C14*), ABISELECT(24,16), "S7457C12");
    check_base_class_offset(lv, (S7457C11*)(S7457C10*), ABISELECT(8,4), "S7457C12");
    check_base_class_offset(lv, (S7457C9*)(S7457C10*), 0, "S7457C12");
    check_base_class_offset(lv, (S7457C9*)(S7457C13*), 0, "S7457C12");
    /*is_ambiguous_... S7457C10::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C10*), ABISELECT(16,8), "S7457C12");
    /*is_ambiguous_... S7457C12::S7457C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(26,18), "S7457C12");
    check_base_class_offset(lv, (S7457C5*)(S7457C10*), ABISELECT(26,18), "S7457C12");
    check_base_class_offset(lv, (S7457C5*)(S7457C6*), ABISELECT(26,18), "S7457C12");
    /*is_ambiguous_... S7457C14::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C14*), ABISELECT(26,18), "S7457C12");
    check_base_class_offset(lv, (S7457C10*), ABISELECT(8,4), "S7457C12");
    check_base_class_offset(lv, (S7457C10*)(S7457C14*), ABISELECT(8,4), "S7457C12");
    check_base_class_offset(lv, (S7457C6*), ABISELECT(32,20), "S7457C12");
    /*is_ambiguous_... S7457C12::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C9*)(S7457C8*), ABISELECT(40,24), "S7457C12");
    /*is_ambiguous_... S7457C12::S7457C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*), ABISELECT(48,28), "S7457C12");
    /*is_ambiguous_... S7457C12::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C8*), ABISELECT(48,28), "S7457C12");
    /*is_ambiguous_... S7457C12::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C8*), ABISELECT(40,24), "S7457C12");
    check_base_class_offset(lv, (S7457C13*), 0, "S7457C12");
    check_base_class_offset(lv, (S7457C9*)(S7457C8*)(S7457C14*), ABISELECT(56,32), "S7457C12");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*)(S7457C14*), ABISELECT(64,36), "S7457C12");
    check_base_class_offset(lv, (S7457C5*)(S7457C8*)(S7457C14*), ABISELECT(64,36), "S7457C12");
    check_base_class_offset(lv, (S7457C8*)(S7457C14*), ABISELECT(56,32), "S7457C12");
    check_base_class_offset(lv, (S7457C14*), ABISELECT(56,32), "S7457C12");
    test_class_info(&lv, &cd_S7457C12);
    dp->~S7457C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C12(Test_S7457C12, "S7457C12", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S7457C12C1Ev();
extern void _ZN8S7457C12D2Ev();
Name_Map name_map_S7457C12[] = {
  NSPAIR(_ZN8S7457C12C1Ev),
  NSPAIR(_ZN8S7457C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C11;
extern VTBL_ENTRY _ZTI8S7457C11[];
extern  VTBL_ENTRY _ZTV8S7457C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C11[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C10;
extern VTBL_ENTRY _ZTI8S7457C10[];
extern  VTBL_ENTRY _ZTV8S7457C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C10[];
extern Class_Descriptor cd_S7457C6;
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C13;
extern VTBL_ENTRY _ZTI8S7457C13[];
extern  VTBL_ENTRY _ZTV8S7457C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C13[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C14;
extern VTBL_ENTRY _ZTI8S7457C14[];
extern  VTBL_ENTRY _ZTV8S7457C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C14[];
static Base_Class bases_S7457C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(24,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
    1, //immediately_derived
  0, 1},
  {&cd_S7457C11,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7457C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19572C5,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(26,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C5,    ABISELECT(26,18), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C10,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7457C6,    ABISELECT(32,20), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7457C9,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    10, //immediately_derived
  0, 0},
  {&cd_S7457C5,    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
    11, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(40,24), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7457C13,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7457C9,    ABISELECT(56,32), //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
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    15, //immediately_derived
  0, 0},
  {&cd_S7457C5,    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
    16, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(56,32), //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
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7457C14,    ABISELECT(56,32), //bcp->offset
    30, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7457C12[];
extern void _ZN8S7457C12D1Ev();
extern void _ZN8S7457C12D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn8_N8S7457C12D1Ev,_ZThn4_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn8_N8S7457C12D0Ev,_ZThn4_N8S7457C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn40_N8S7457C12D1Ev,_ZThn24_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn40_N8S7457C12D0Ev,_ZThn24_N8S7457C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn56_N8S7457C12D1Ev,_ZThn32_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn56_N8S7457C12D0Ev,_ZThn32_N8S7457C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7457C12[] = {
  ABISELECT(56,32),
  ABISELECT(40,24),
  ABISELECT(32,20),
  ABISELECT(26,18),
  ABISELECT(8,4),
  ABISELECT(8,4),
  0,
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&_ZN8S7457C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C12D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(18,14),
  ABISELECT(-8,-4),
  0,
  ABISELECT(16,12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev),
  ABISELECT(-6,-2),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  ABISELECT(-40,-24),
  ABISELECT(-16,-8),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-30,-14),
  ABISELECT(-32,-16),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S7457C12[];
static  VTBL_ENTRY _tg__ZTV8S7457C13__8S7457C12[] = {
  0,
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C13[0]),
};
extern void _ZN8S7457C10D1Ev();
extern void _ZN8S7457C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C10__8S7457C12[] = {
  ABISELECT(18,14),
  ABISELECT(-8,-4),
  0,
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
  (VTBL_ENTRY)&_ZN8S7457C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C10__8S7457C12[] = {
  ABISELECT(24,16),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7457C11__8S7457C12[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C12[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__8S7457C12[] = {
  ABISELECT(-6,-2),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C8__8S7457C12[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C8__A1__8S7457C12[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void _ZN8S7457C14D1Ev();
extern void _ZN8S7457C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C14__8S7457C12[] = {
  ABISELECT(-56,-32),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  ABISELECT(-30,-14),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
  (VTBL_ENTRY)&_ZN8S7457C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C14D0Ev,
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C88S7457C14__A1__8S7457C12[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C88S7457C14__A2__8S7457C12[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7457C10__8S7457C14__8S7457C12[] = {
  ABISELECT(48,28),
  ABISELECT(18,14),
  ABISELECT(-8,-4),
  0,
  ABISELECT(16,12),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C14__8S7457C12[] = {
  ABISELECT(24,16),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
};
static  VTT_ENTRY vtt_S7457C12[] = {
  {&(_ZTV8S7457C12[10]),  10,40},
  {&(_tg__ZTV8S7457C13__8S7457C12[4]),  4,4},
  {&(_tg__ZTV8S7457C13__8S7457C12[4]),  4,4},
  {&(_ZTV8S7457C12[19]),  19,40},
  {&(_ZTV8S7457C12[19]),  19,40},
  {&(_ZTV8S7457C12[10]),  10,40},
  {&(_ZTV8S7457C12[24]),  24,40},
  {&(_ZTV8S7457C12[28]),  28,40},
  {&(_ZTV8S7457C12[38]),  38,40},
  {&(_tg__ZTV8S7457C10__8S7457C12[6]),  6,8},
  {&(_tg__ZTV8S7457C10__8S7457C12[6]),  6,8},
  {&(_tg__ZTV7S7457C9__8S7457C10__8S7457C12[3]),  3,3},
  {&(_tg__ZTV8S7457C11__8S7457C12[3]),  3,3},
  {&(_tg__ZTV7S7457C9__8S7457C12[3]),  3,3},
  {&(_tg__ZTV7S7457C6__8S7457C12[3]),  3,3},
  {&(_tg__ZTV7S7457C8__8S7457C12[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C8__A1__8S7457C12[3]),  3,3},
  {&(_tg__ZTV8S7457C14__8S7457C12[7]),  7,9},
  {&(_tg__ZTV7S7457C88S7457C14__A1__8S7457C12[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C88S7457C14__A2__8S7457C12[3]),  3,3},
  {&(_tg__ZTV8S7457C10__8S7457C14__8S7457C12[7]),  7,9},
  {&(_tg__ZTV8S7457C10__8S7457C14__8S7457C12[7]),  7,9},
  {&(_tg__ZTV7S7457C9__8S7457C14__8S7457C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7457C12[];
extern  VTBL_ENTRY _ZTV8S7457C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C12[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7457C12D0Ev,_ZThn32_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S7457C12D1Ev,_ZThn32_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7457C12D0Ev,_ZThn24_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S7457C12D1Ev,_ZThn24_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7457C12D0Ev,_ZThn4_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7457C12D1Ev,_ZThn4_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7457C12 = {  "S7457C12", // class name
  bases_S7457C12, 18,
  &(vtc_S7457C12[0]), // expected_vtbl_contents
  &(vtt_S7457C12[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S7457C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S7457C12),40, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7457C12),23, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7457C16  : virtual S7457C9 {
  ~S7457C16(); // tgen
  S7457C16(); // tgen
};
//SIG(-1 S7457C16) C1{ VBC2{ VBC3{ m Fs:13}}}


S7457C16 ::~S7457C16(){ note_dtor("S7457C16", this);} // tgen
S7457C16 ::S7457C16(){ note_ctor("S7457C16", this);} // tgen

static void Test_S7457C16()
{
  extern Class_Descriptor cd_S7457C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7457C16, buf);
    S7457C16 *dp, &lv = *(dp=new (buf) S7457C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7457C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7457C16)");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(8,4), "S7457C16");
    check_base_class_offset(lv, (S7457C9*), 0, "S7457C16");
    test_class_info(&lv, &cd_S7457C16);
    dp->~S7457C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C16(Test_S7457C16, "S7457C16", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S7457C16C1Ev();
extern void _ZN8S7457C16D1Ev();
Name_Map name_map_S7457C16[] = {
  NSPAIR(_ZN8S7457C16C1Ev),
  NSPAIR(_ZN8S7457C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
static Base_Class bases_S7457C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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, 1},
  {&cd_S7457C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7457C16[];
static  VTBL_ENTRY vtc_S7457C16[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C16[0]),
};
extern VTBL_ENTRY _ZTV8S7457C16[];
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C16[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTT_ENTRY vtt_S7457C16[] = {
  {&(_ZTV8S7457C16[4]),  4,4},
  {&(_ZTV8S7457C16[4]),  4,4},
  {&(_tg__ZTV7S7457C9__8S7457C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7457C16[];
extern  VTBL_ENTRY _ZTV8S7457C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C16[];
Class_Descriptor cd_S7457C16 = {  "S7457C16", // class name
  bases_S7457C16, 2,
  &(vtc_S7457C16[0]), // expected_vtbl_contents
  &(vtt_S7457C16[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7457C16),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7457C16),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7457C16),3, //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  S7457C2  : virtual S19572C5 , S7457C4 , S7457C12 , S629C14 , S7457C16 {
  virtual  ~S7457C2(); // _ZN7S7457C2D2Ev
  S7457C2(); // tgen
};
//SIG(-1 S7457C2) C1{ VBC2{ m Fs:13} BC3{ VBC4{ BC2} VBC5{ VBC4} VBC6{ VBC2 VBC4 BC5 BC7{ BC8{ VBC2} BC4 vd} BC8 vd FD[5]} BC8 v1 FC9{ VBC10{ VBC2} VBC8 BC2 VBC4 vd Fi}} BC11{ VBC9 VBC5 VBC7 BC12{ VBC2 VBC8} VBC13{ VBC4 VBC9 BC7 vd} vd} BC14{ m} BC15{ VBC8} vd}


 S7457C2 ::~S7457C2(){ note_dtor("S7457C2", this);}
S7457C2 ::S7457C2(){ note_ctor("S7457C2", this);} // tgen

static void Test_S7457C2()
{
  extern Class_Descriptor cd_S7457C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,38)];
    init_test(&cd_S7457C2, buf);
    S7457C2 *dp, &lv = *(dp=new (buf) S7457C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,148), "sizeof(S7457C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7457C2)");
    /*is_ambiguous_... S7457C2::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(64,36), "S7457C2");
    /*is_ambiguous_... S7457C7::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C7*), ABISELECT(64,36), "S7457C2");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*)(S7457C7*), ABISELECT(64,36), "S7457C2");
    /*is_ambiguous_... S7457C7::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C7*), ABISELECT(64,36), "S7457C2");
    /*is_ambiguous_... S7457C4::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C4*), ABISELECT(64,36), "S7457C2");
    check_base_class_offset(lv, (S19572C5*)(S7457C11*), ABISELECT(64,36), "S7457C2");
    /*is_ambiguous_... S7457C2::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(64,36), "S7457C2");
    /*is_ambiguous_... S7457C2::S7457C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*), ABISELECT(64,36), "S7457C2");
    check_base_class_offset(lv, (S19572C5*)(S7457C13*)(S7457C12*), ABISELECT(64,36), "S7457C2");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*)(S7457C14*), ABISELECT(64,36), "S7457C2");
    /*is_ambiguous_... S7457C2::S7457C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(66,38), "S7457C2");
    /*is_ambiguous_... S7457C4::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C4*), ABISELECT(66,38), "S7457C2");
    /*is_ambiguous_... S7457C2::S7457C6 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C6*), ABISELECT(66,38), "S7457C2");
    /*is_ambiguous_... S7457C7::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C7*), ABISELECT(66,38), "S7457C2");
    check_base_class_offset(lv, (S7457C5*)(S7457C6*)(S7457C7*), ABISELECT(66,38), "S7457C2");
    check_base_class_offset(lv, (S7457C5*)(S7457C10*), ABISELECT(66,38), "S7457C2");
    /*is_ambiguous_... S7457C14::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C14*), ABISELECT(66,38), "S7457C2");
    /*is_ambiguous_... S7457C4::S7457C6 */ AMB_check_base_class_offset(lv, (S7457C6*)(S7457C4*), ABISELECT(72,40), "S7457C2");
    check_base_class_offset(lv, (S7457C6*)(S7457C12*), ABISELECT(72,40), "S7457C2");
    check_base_class_offset(lv, (S7457C6*)(S7457C7*), ABISELECT(80,44), "S7457C2");
    check_base_class_offset(lv, (S7457C9*)(S7457C8*)(S7457C7*), ABISELECT(88,48), "S7457C2");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*)(S7457C7*), ABISELECT(96,52), "S7457C2");
    check_base_class_offset(lv, (S7457C5*)(S7457C8*)(S7457C7*), ABISELECT(96,52), "S7457C2");
    check_base_class_offset(lv, (S7457C8*)(S7457C7*), ABISELECT(88,48), "S7457C2");
    /*is_ambiguous_... S7457C7::S7457C9 */ AMB_check_base_class_offset(lv, (S7457C9*)(S7457C7*), ABISELECT(104,56), "S7457C2");
    check_base_class_offset(lv, (S7457C7*)(S7457C4*), ABISELECT(80,44), "S7457C2");
    /*is_ambiguous_... S7457C4::S7457C9 */ AMB_check_base_class_offset(lv, (S7457C9*)(S7457C4*), 0, "S7457C2");
    check_base_class_offset(lv, (S7457C4*), 0, "S7457C2");
    check_base_class_offset(lv, (S7457C11*)(S7457C10*), ABISELECT(192,120), "S7457C2");
    check_base_class_offset(lv, (S7457C9*)(S7457C10*), ABISELECT(48,28), "S7457C2");
    check_base_class_offset(lv, (S7457C9*)(S7457C13*)(S7457C12*), ABISELECT(48,28), "S7457C2");
    check_base_class_offset(lv, (S7457C9*)(S7457C16*), ABISELECT(48,28), "S7457C2");
    /*is_ambiguous_... S7457C10::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C10*), ABISELECT(200,124), "S7457C2");
    check_base_class_offset(lv, (S7457C10*)(S7457C12*), ABISELECT(192,120), "S7457C2");
    check_base_class_offset(lv, (S7457C10*)(S7457C14*), ABISELECT(192,120), "S7457C2");
    /*is_ambiguous_... S7457C2::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C9*)(S7457C8*), ABISELECT(208,132), "S7457C2");
    /*is_ambiguous_... S7457C2::S7457C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*), ABISELECT(216,136), "S7457C2");
    /*is_ambiguous_... S7457C2::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C8*), ABISELECT(216,136), "S7457C2");
    /*is_ambiguous_... S7457C12::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C8*)(S7457C12*), ABISELECT(208,132), "S7457C2");
    check_base_class_offset(lv, (S7457C13*)(S7457C12*), ABISELECT(48,28), "S7457C2");
    check_base_class_offset(lv, (S7457C9*)(S7457C8*)(S7457C14*), ABISELECT(224,140), "S7457C2");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*)(S7457C14*), ABISELECT(232,144), "S7457C2");
    check_base_class_offset(lv, (S7457C5*)(S7457C8*)(S7457C14*), ABISELECT(232,144), "S7457C2");
    check_base_class_offset(lv, (S7457C8*)(S7457C14*), ABISELECT(224,140), "S7457C2");
    check_base_class_offset(lv, (S7457C14*)(S7457C12*), ABISELECT(224,140), "S7457C2");
    check_base_class_offset(lv, (S7457C12*), ABISELECT(48,28), "S7457C2");
    check_base_class_offset(lv, (S629C14*), 0, "S7457C2");
    check_base_class_offset(lv, (S7457C16*), ABISELECT(56,32), "S7457C2");
    test_class_info(&lv, &cd_S7457C2);
    dp->~S7457C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C2(Test_S7457C2, "S7457C2", ABISELECT(240,148));

#else // __cplusplus

extern void _ZN7S7457C2C1Ev();
extern void _ZN7S7457C2D2Ev();
Name_Map name_map_S7457C2[] = {
  NSPAIR(_ZN7S7457C2C1Ev),
  NSPAIR(_ZN7S7457C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C6;
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
extern Class_Descriptor cd_S7457C6;
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S7457C7;
extern VTBL_ENTRY _ZTI7S7457C7[];
extern  VTBL_ENTRY _ZTV7S7457C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C7[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S7457C4;
extern VTBL_ENTRY _ZTI7S7457C4[];
extern  VTBL_ENTRY _ZTV7S7457C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C4[];
extern Class_Descriptor cd_S7457C11;
extern VTBL_ENTRY _ZTI8S7457C11[];
extern  VTBL_ENTRY _ZTV8S7457C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C11[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C10;
extern VTBL_ENTRY _ZTI8S7457C10[];
extern  VTBL_ENTRY _ZTV8S7457C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C10[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C13;
extern VTBL_ENTRY _ZTI8S7457C13[];
extern  VTBL_ENTRY _ZTV8S7457C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C13[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C14;
extern VTBL_ENTRY _ZTI8S7457C14[];
extern  VTBL_ENTRY _ZTV8S7457C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C14[];
extern Class_Descriptor cd_S7457C12;
extern VTBL_ENTRY _ZTI8S7457C12[];
extern  VTBL_ENTRY _ZTV8S7457C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C12[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S7457C16;
extern VTBL_ENTRY _ZTI8S7457C16[];
extern  VTBL_ENTRY _ZTV8S7457C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C16[];
static Base_Class bases_S7457C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(66,38), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C5,    ABISELECT(66,38), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C6,    ABISELECT(72,40), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7457C6,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C9,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    -1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7457C5,    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
    -1, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(88,48), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C9,    ABISELECT(104,56), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C7,    ABISELECT(80,44), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7457C9,    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
    15, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7457C4,    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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7457C11,    ABISELECT(192,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7457C9,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(200,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
    16, //immediately_derived
  0, 0},
  {&cd_S7457C10,    ABISELECT(192,120), //bcp->offset
    48, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S7457C9,    ABISELECT(208,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(216,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
    19, //immediately_derived
  0, 0},
  {&cd_S7457C5,    ABISELECT(216,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
    20, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(208,132), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S7457C13,    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
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7457C9,    ABISELECT(224,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(232,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7457C5,    ABISELECT(232,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C8,    ABISELECT(224,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7457C14,    ABISELECT(224,140), //bcp->offset
    63, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S7457C12,    ABISELECT(48,28), //bcp->offset
    14, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7457C16,    ABISELECT(56,32), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7457C2[];
extern void _ZN7S7457C42v1Ev();
extern void _ZN7S7457C2D1Ev();
extern void _ZN7S7457C2D0Ev();
extern void ABISELECT(_ZThn48_N7S7457C2D1Ev,_ZThn28_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S7457C2D0Ev,_ZThn28_N7S7457C2D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7457C2D1Ev,_ZTv0_n20_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn80_N7S7457C2D1Ev,_ZThn44_N7S7457C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7457C2D0Ev,_ZTv0_n20_N7S7457C2D0Ev)();
extern void ABISELECT(_ZThn80_N7S7457C2D0Ev,_ZThn44_N7S7457C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S7457C2D1Ev,_ZTvn4_n20_N7S7457C2D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7457C2D0Ev,_ZTvn4_n20_N7S7457C2D0Ev)();
extern void ABISELECT(_ZTv0_n56_N7S7457C2D1Ev,_ZTv0_n28_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn192_N7S7457C2D1Ev,_ZThn120_N7S7457C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7457C2D0Ev,_ZTv0_n28_N7S7457C2D0Ev)();
extern void ABISELECT(_ZThn192_N7S7457C2D0Ev,_ZThn120_N7S7457C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7457C2D1Ev,_ZTv0_n16_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn208_N7S7457C2D1Ev,_ZThn132_N7S7457C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7457C2D0Ev,_ZTv0_n16_N7S7457C2D0Ev)();
extern void ABISELECT(_ZThn208_N7S7457C2D0Ev,_ZThn132_N7S7457C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7457C2D1Ev,_ZTv0_n32_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn224_N7S7457C2D1Ev,_ZThn140_N7S7457C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7457C2D0Ev,_ZTv0_n32_N7S7457C2D0Ev)();
extern void ABISELECT(_ZThn224_N7S7457C2D0Ev,_ZThn140_N7S7457C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7457C2[] = {
  ABISELECT(224,140),
  ABISELECT(208,132),
  ABISELECT(48,28),
  ABISELECT(192,120),
  ABISELECT(192,120),
  ABISELECT(80,44),
  ABISELECT(72,40),
  ABISELECT(66,38),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&_ZN7S7457C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7457C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C2D0Ev,
  ABISELECT(176,112),
  ABISELECT(160,104),
  ABISELECT(24,12),
  ABISELECT(18,10),
  ABISELECT(144,92),
  ABISELECT(144,92),
  0,
  ABISELECT(16,8),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7457C2D1Ev,_ZThn28_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7457C2D0Ev,_ZThn28_N7S7457C2D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(8,4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  ABISELECT(-6,-2),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  ABISELECT(-80,-44),
  ABISELECT(-16,-8),
  ABISELECT(-14,-6),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C2D1Ev,_ZTv0_n20_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C2D0Ev,_ZTv0_n20_N7S7457C2D0Ev),
  ABISELECT(-24,-12),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C2D1Ev,_ZTvn4_n20_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C2D0Ev,_ZTvn4_n20_N7S7457C2D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  ABISELECT(-192,-120),
  ABISELECT(-126,-82),
  ABISELECT(-144,-92),
  0,
  ABISELECT(-128,-84),
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7457C2D1Ev,_ZTv0_n28_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7457C2D0Ev,_ZTv0_n28_N7S7457C2D0Ev),
  ABISELECT(-208,-132),
  ABISELECT(-144,-96),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7457C2D1Ev,_ZTv0_n16_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7457C2D0Ev,_ZTv0_n16_N7S7457C2D0Ev),
  ABISELECT(-224,-140),
  ABISELECT(-176,-112),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-158,-102),
  ABISELECT(-160,-104),
  ABISELECT(-224,-140),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7457C2D1Ev,_ZTv0_n32_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7457C2D0Ev,_ZTv0_n32_N7S7457C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7457C2[];
extern void _ZN7S7457C42v1Ev();
extern void _ZN7S7457C4D1Ev();
extern void _ZN7S7457C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C4__7S7457C2[] = {
  ABISELECT(80,44),
  ABISELECT(72,40),
  ABISELECT(66,38),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&_ZN7S7457C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7457C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C4__A2__7S7457C2[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__7S7457C4__7S7457C2[] = {
  ABISELECT(-6,-2),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev)();
extern void ABISELECT(_ZThn80_N7S7457C4D1Ev,_ZThn44_N7S7457C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev)();
extern void ABISELECT(_ZThn80_N7S7457C4D0Ev,_ZThn44_N7S7457C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7457C7__7S7457C4__7S7457C2[] = {
  ABISELECT(-80,-44),
  ABISELECT(-16,-8),
  ABISELECT(-14,-6),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7457C4D1Ev,_ZTvn4_n20_N7S7457C4D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7457C4D0Ev,_ZTvn4_n20_N7S7457C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7457C87S7457C7__7S7457C4__7S7457C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C4D1Ev,_ZTvn4_n20_N7S7457C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C4D0Ev,_ZTvn4_n20_N7S7457C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C7__A1__7S7457C4__7S7457C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
};
extern void _ZN8S7457C12D1Ev();
extern void _ZN8S7457C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C12__7S7457C2[] = {
  ABISELECT(176,112),
  ABISELECT(160,104),
  ABISELECT(24,12),
  ABISELECT(18,10),
  ABISELECT(144,92),
  ABISELECT(144,92),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&_ZN8S7457C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7457C138S7457C12__7S7457C2[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C13[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn144_N8S7457C12D1Ev,_ZThn92_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn144_N8S7457C12D0Ev,_ZThn92_N8S7457C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7457C10__8S7457C12__7S7457C2[] = {
  ABISELECT(-144,-92),
  ABISELECT(-126,-82),
  ABISELECT(-144,-92),
  0,
  ABISELECT(-128,-84),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__8S7457C12__7S7457C2[] = {
  ABISELECT(-6,-2),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S7457C12D1Ev,_ZThn104_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S7457C12D0Ev,_ZThn104_N8S7457C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7457C8__8S7457C12__7S7457C2[] = {
  ABISELECT(-160,-104),
  ABISELECT(-144,-96),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn176_N8S7457C12D1Ev,_ZThn112_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn176_N8S7457C12D0Ev,_ZThn112_N8S7457C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7457C14__8S7457C12__7S7457C2[] = {
  ABISELECT(-176,-112),
  ABISELECT(-176,-112),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-158,-102),
  ABISELECT(-160,-104),
  ABISELECT(-176,-112),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7457C16__7S7457C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C16__7S7457C2[] = {
  ABISELECT(16,8),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7457C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__7S7457C2[] = {
  ABISELECT(-6,-2),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern void _ZN7S7457C7D1Ev();
extern void _ZN7S7457C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C7__7S7457C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-14,-6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
  (VTBL_ENTRY)&_ZN7S7457C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C67S7457C7__A1__7S7457C2[] = {
  ABISELECT(-14,-6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C87S7457C7__7S7457C2[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C87S7457C7__7S7457C2[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C7__A1__7S7457C2[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void ABISELECT(_ZThn8_N7S7457C7D1Ev,_ZThn4_N7S7457C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7457C7D0Ev,_ZThn4_N7S7457C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7457C8__7S7457C7__7S7457C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7457C7D1Ev,_ZThn4_N7S7457C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7457C7D0Ev,_ZThn4_N7S7457C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__A1__7S7457C7__7S7457C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
};
extern void _ZN8S7457C10D1Ev();
extern void _ZN8S7457C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C10__7S7457C2[] = {
  ABISELECT(-126,-82),
  ABISELECT(-144,-92),
  0,
  ABISELECT(-128,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
  (VTBL_ENTRY)&_ZN8S7457C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C10__7S7457C2[] = {
  ABISELECT(16,8),
  ABISELECT(144,92),
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7457C11__7S7457C2[] = {
  ABISELECT(-128,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__A3__7S7457C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C8__A1__7S7457C2[] = {
  ABISELECT(-144,-96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C8__A4__7S7457C2[] = {
  ABISELECT(-144,-96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void _ZN8S7457C14D1Ev();
extern void _ZN8S7457C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C14__7S7457C2[] = {
  ABISELECT(-176,-112),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-158,-102),
  ABISELECT(-160,-104),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
  (VTBL_ENTRY)&_ZN8S7457C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C14D0Ev,
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C88S7457C14__A2__7S7457C2[] = {
  ABISELECT(-160,-104),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C88S7457C14__A5__7S7457C2[] = {
  ABISELECT(-160,-104),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7457C10__8S7457C14__7S7457C2[] = {
  ABISELECT(32,20),
  ABISELECT(-126,-82),
  ABISELECT(-144,-92),
  0,
  ABISELECT(-128,-84),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C14__7S7457C2[] = {
  ABISELECT(16,8),
  ABISELECT(176,112),
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
};
static  VTT_ENTRY vtt_S7457C2[] = {
  {&(_ZTV7S7457C2[11]),  11,73},
  {&(_tg__ZTV7S7457C4__7S7457C2[6]),  6,9},
  {&(_tg__ZTV7S7457C97S7457C4__A2__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C6__7S7457C4__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C7__7S7457C4__7S7457C2[5]),  5,7},
  {&(_tg__ZTV7S7457C87S7457C7__7S7457C4__7S7457C2[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C7__A1__7S7457C4__7S7457C2[3]),  3,3},
  {&(_tg__ZTV8S7457C12__7S7457C2[10]),  10,12},
  {&(_tg__ZTV8S7457C138S7457C12__7S7457C2[4]),  4,4},
  {&(_tg__ZTV8S7457C138S7457C12__7S7457C2[4]),  4,4},
  {&(_tg__ZTV8S7457C10__8S7457C12__7S7457C2[7]),  7,9},
  {&(_tg__ZTV8S7457C10__8S7457C12__7S7457C2[7]),  7,9},
  {&(_tg__ZTV8S7457C12__7S7457C2[10]),  10,12},
  {&(_tg__ZTV7S7457C6__8S7457C12__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C8__8S7457C12__7S7457C2[4]),  4,6},
  {&(_tg__ZTV8S7457C14__8S7457C12__7S7457C2[8]),  8,10},
  {&(_tg__ZTV8S7457C16__7S7457C2[4]),  4,4},
  {&(_tg__ZTV7S7457C9__8S7457C16__7S7457C2[3]),  3,3},
  {&(_ZTV7S7457C2[33]),  33,73},
  {&(_ZTV7S7457C2[38]),  38,73},
  {&(_ZTV7S7457C2[43]),  43,73},
  {&(_ZTV7S7457C2[48]),  48,73},
  {&(_ZTV7S7457C2[24]),  24,73},
  {&(_ZTV7S7457C2[55]),  55,73},
  {&(_ZTV7S7457C2[55]),  55,73},
  {&(_ZTV7S7457C2[24]),  24,73},
  {&(_ZTV7S7457C2[61]),  61,73},
  {&(_ZTV7S7457C2[71]),  71,73},
  {&(_ZTV7S7457C2[30]),  30,73},
  {&(_tg__ZTV7S7457C6__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C7__7S7457C2[4]),  4,6},
  {&(_tg__ZTV7S7457C67S7457C7__A1__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C87S7457C7__7S7457C2[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C87S7457C7__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C97S7457C7__A1__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C8__7S7457C7__7S7457C2[3]),  3,5},
  {&(_tg__ZTV7S7457C9__A1__7S7457C7__7S7457C2[3]),  3,3},
  {&(_tg__ZTV8S7457C10__7S7457C2[6]),  6,8},
  {&(_tg__ZTV8S7457C10__7S7457C2[6]),  6,8},
  {&(_tg__ZTV7S7457C9__8S7457C10__7S7457C2[3]),  3,3},
  {&(_tg__ZTV8S7457C11__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C9__A3__7S7457C2[3]),  3,3},
  {&(_tg__ZTV7S7457C8__A1__7S7457C2[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C8__A4__7S7457C2[3]),  3,3},
  {&(_tg__ZTV8S7457C14__7S7457C2[7]),  7,9},
  {&(_tg__ZTV7S7457C88S7457C14__A2__7S7457C2[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C88S7457C14__A5__7S7457C2[3]),  3,3},
  {&(_tg__ZTV8S7457C10__8S7457C14__7S7457C2[7]),  7,9},
  {&(_tg__ZTV8S7457C10__8S7457C14__7S7457C2[7]),  7,9},
  {&(_tg__ZTV7S7457C9__8S7457C14__7S7457C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7457C2[];
extern  VTBL_ENTRY _ZTV7S7457C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C2[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7457C12D0Ev,_ZThn112_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7457C12D1Ev,_ZThn112_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7457C12D0Ev,_ZThn104_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7457C12D1Ev,_ZThn104_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7457C12D0Ev,_ZThn92_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S7457C12D1Ev,_ZThn92_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7457C4D0Ev,_ZThn44_N7S7457C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7457C4D1Ev,_ZThn44_N7S7457C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7457C2D0Ev,_ZTv0_n32_N7S7457C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7457C2D0Ev,_ZThn140_N7S7457C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7457C2D1Ev,_ZTv0_n32_N7S7457C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7457C2D1Ev,_ZThn140_N7S7457C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7457C2D0Ev,_ZTv0_n16_N7S7457C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7457C2D0Ev,_ZThn132_N7S7457C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7457C2D1Ev,_ZTv0_n16_N7S7457C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7457C2D1Ev,_ZThn132_N7S7457C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7457C2D0Ev,_ZTv0_n28_N7S7457C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7457C2D0Ev,_ZThn120_N7S7457C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7457C2D1Ev,_ZTv0_n28_N7S7457C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7457C2D1Ev,_ZThn120_N7S7457C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C2D0Ev,_ZTv0_n20_N7S7457C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7457C2D0Ev,_ZThn44_N7S7457C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C2D1Ev,_ZTv0_n20_N7S7457C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7457C2D1Ev,_ZThn44_N7S7457C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7457C2 = {  "S7457C2", // class name
  bases_S7457C2, 30,
  &(vtc_S7457C2[0]), // expected_vtbl_contents
  &(vtt_S7457C2[0]), // expected_vtt_contents
  ABISELECT(240,148), // object size
  NSPAIRA(_ZTI7S7457C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7457C2),73, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7457C2),50, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7457C1  : S7457C2 , S7457C11 {
  virtual  ~S7457C1(); // _ZN7S7457C1D2Ev
  S7457C1(); // tgen
};
//SIG(1 S7457C1) C1{ BC2{ VBC3{ m Fs:13} BC4{ VBC5{ BC3} VBC6{ VBC5} VBC7{ VBC3 VBC5 BC6 BC8{ BC9{ VBC3} BC5 vd} BC9 vd FD[5]} BC9 v1 FC10{ VBC11{ VBC3} VBC9 BC3 VBC5 vd Fi}} BC12{ VBC10 VBC6 VBC8 BC13{ VBC3 VBC9} VBC14{ VBC5 VBC10 BC8 vd} vd} BC15{ m} BC16{ VBC9} vd} BC11 vd}


 S7457C1 ::~S7457C1(){ note_dtor("S7457C1", this);}
S7457C1 ::S7457C1(){ note_ctor("S7457C1", this);} // tgen

static void Test_S7457C1()
{
  extern Class_Descriptor cd_S7457C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,39)];
    init_test(&cd_S7457C1, buf);
    S7457C1 *dp, &lv = *(dp=new (buf) S7457C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,152), "sizeof(S7457C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7457C1)");
    /*is_ambiguous_... S7457C2::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C2*), ABISELECT(72,40), "S7457C1");
    /*is_ambiguous_... S7457C7::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C7*), ABISELECT(72,40), "S7457C1");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*)(S7457C7*), ABISELECT(72,40), "S7457C1");
    /*is_ambiguous_... S7457C7::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C7*), ABISELECT(72,40), "S7457C1");
    /*is_ambiguous_... S7457C4::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C4*)(S7457C2*), ABISELECT(72,40), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C11 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C11*), ABISELECT(72,40), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C9 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*), ABISELECT(72,40), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*), ABISELECT(72,40), "S7457C1");
    check_base_class_offset(lv, (S19572C5*)(S7457C13*)(S7457C12*)(S7457C2*), ABISELECT(72,40), "S7457C1");
    check_base_class_offset(lv, (S19572C5*)(S7457C9*)(S7457C8*)(S7457C14*), ABISELECT(72,40), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C11 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C11*), ABISELECT(72,40), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*), ABISELECT(74,42), "S7457C1");
    /*is_ambiguous_... S7457C4::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C4*)(S7457C2*), ABISELECT(74,42), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C6 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C6*), ABISELECT(74,42), "S7457C1");
    /*is_ambiguous_... S7457C7::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C7*), ABISELECT(74,42), "S7457C1");
    check_base_class_offset(lv, (S7457C5*)(S7457C6*)(S7457C7*), ABISELECT(74,42), "S7457C1");
    check_base_class_offset(lv, (S7457C5*)(S7457C10*), ABISELECT(74,42), "S7457C1");
    /*is_ambiguous_... S7457C14::S7457C5 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C14*), ABISELECT(74,42), "S7457C1");
    /*is_ambiguous_... S7457C4::S7457C6 */ AMB_check_base_class_offset(lv, (S7457C6*)(S7457C4*)(S7457C2*), ABISELECT(80,44), "S7457C1");
    check_base_class_offset(lv, (S7457C6*)(S7457C12*)(S7457C2*), ABISELECT(80,44), "S7457C1");
    check_base_class_offset(lv, (S7457C6*)(S7457C7*), ABISELECT(96,48), "S7457C1");
    check_base_class_offset(lv, (S7457C9*)(S7457C8*)(S7457C7*), ABISELECT(104,52), "S7457C1");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*)(S7457C7*), ABISELECT(112,56), "S7457C1");
    check_base_class_offset(lv, (S7457C5*)(S7457C8*)(S7457C7*), ABISELECT(112,56), "S7457C1");
    check_base_class_offset(lv, (S7457C8*)(S7457C7*), ABISELECT(104,52), "S7457C1");
    /*is_ambiguous_... S7457C7::S7457C9 */ AMB_check_base_class_offset(lv, (S7457C9*)(S7457C7*), ABISELECT(120,60), "S7457C1");
    check_base_class_offset(lv, (S7457C7*)(S7457C4*)(S7457C2*), ABISELECT(96,48), "S7457C1");
    /*is_ambiguous_... S7457C4::S7457C9 */ AMB_check_base_class_offset(lv, (S7457C9*)(S7457C4*)(S7457C2*), 0, "S7457C1");
    check_base_class_offset(lv, (S7457C4*)(S7457C2*), 0, "S7457C1");
    check_base_class_offset(lv, (S7457C11*)(S7457C10*), ABISELECT(208,124), "S7457C1");
    check_base_class_offset(lv, (S7457C9*)(S7457C10*), ABISELECT(48,28), "S7457C1");
    check_base_class_offset(lv, (S7457C9*)(S7457C13*)(S7457C12*)(S7457C2*), ABISELECT(48,28), "S7457C1");
    check_base_class_offset(lv, (S7457C9*)(S7457C16*)(S7457C2*), ABISELECT(48,28), "S7457C1");
    /*is_ambiguous_... S7457C10::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C10*), ABISELECT(216,128), "S7457C1");
    check_base_class_offset(lv, (S7457C10*)(S7457C12*)(S7457C2*), ABISELECT(208,124), "S7457C1");
    check_base_class_offset(lv, (S7457C10*)(S7457C14*), ABISELECT(208,124), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C9*)(S7457C8*), ABISELECT(224,136), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C8 */ AMB_check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*), ABISELECT(232,140), "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C5*)(S7457C8*), ABISELECT(232,140), "S7457C1");
    /*is_ambiguous_... S7457C12::S7457C8 */ AMB_check_base_class_offset(lv, (S7457C8*)(S7457C12*)(S7457C2*), ABISELECT(224,136), "S7457C1");
    check_base_class_offset(lv, (S7457C13*)(S7457C12*)(S7457C2*), ABISELECT(48,28), "S7457C1");
    check_base_class_offset(lv, (S7457C9*)(S7457C8*)(S7457C14*), ABISELECT(240,144), "S7457C1");
    check_base_class_offset(lv, (S19572C5*)(S7457C5*)(S7457C8*)(S7457C14*), ABISELECT(248,148), "S7457C1");
    check_base_class_offset(lv, (S7457C5*)(S7457C8*)(S7457C14*), ABISELECT(248,148), "S7457C1");
    check_base_class_offset(lv, (S7457C8*)(S7457C14*), ABISELECT(240,144), "S7457C1");
    check_base_class_offset(lv, (S7457C14*)(S7457C12*)(S7457C2*), ABISELECT(240,144), "S7457C1");
    check_base_class_offset(lv, (S7457C12*)(S7457C2*), ABISELECT(48,28), "S7457C1");
    check_base_class_offset(lv, (S629C14*)(S7457C2*), 0, "S7457C1");
    check_base_class_offset(lv, (S7457C16*)(S7457C2*), ABISELECT(56,32), "S7457C1");
    check_base_class_offset(lv, (S7457C2*), 0, "S7457C1");
    /*is_ambiguous_... S7457C1::S7457C11 */ AMB_check_base_class_offset(lv, (S7457C11*), ABISELECT(64,36), "S7457C1");
    test_class_info(&lv, &cd_S7457C1);
    dp->~S7457C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7457C1(Test_S7457C1, "S7457C1", ABISELECT(256,152));

#else // __cplusplus

extern void _ZN7S7457C1C1Ev();
extern void _ZN7S7457C1D2Ev();
Name_Map name_map_S7457C1[] = {
  NSPAIR(_ZN7S7457C1C1Ev),
  NSPAIR(_ZN7S7457C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C6;
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
extern Class_Descriptor cd_S7457C6;
extern VTBL_ENTRY _ZTI7S7457C6[];
extern  VTBL_ENTRY _ZTV7S7457C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C6[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S7457C7;
extern VTBL_ENTRY _ZTI7S7457C7[];
extern  VTBL_ENTRY _ZTV7S7457C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C7[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S7457C4;
extern VTBL_ENTRY _ZTI7S7457C4[];
extern  VTBL_ENTRY _ZTV7S7457C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C4[];
extern Class_Descriptor cd_S7457C11;
extern VTBL_ENTRY _ZTI8S7457C11[];
extern  VTBL_ENTRY _ZTV8S7457C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C11[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C10;
extern VTBL_ENTRY _ZTI8S7457C10[];
extern  VTBL_ENTRY _ZTV8S7457C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C10[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C13;
extern VTBL_ENTRY _ZTI8S7457C13[];
extern  VTBL_ENTRY _ZTV8S7457C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C13[];
extern Class_Descriptor cd_S7457C9;
extern VTBL_ENTRY _ZTI7S7457C9[];
extern  VTBL_ENTRY _ZTV7S7457C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C9[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S7457C5;
extern VTBL_ENTRY _ZTI7S7457C5[];
extern Class_Descriptor cd_S7457C8;
extern VTBL_ENTRY _ZTI7S7457C8[];
extern  VTBL_ENTRY _ZTV7S7457C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C8[];
extern Class_Descriptor cd_S7457C14;
extern VTBL_ENTRY _ZTI8S7457C14[];
extern  VTBL_ENTRY _ZTV8S7457C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C14[];
extern Class_Descriptor cd_S7457C12;
extern VTBL_ENTRY _ZTI8S7457C12[];
extern  VTBL_ENTRY _ZTV8S7457C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C12[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S7457C16;
extern VTBL_ENTRY _ZTI8S7457C16[];
extern  VTBL_ENTRY _ZTV8S7457C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C16[];
extern Class_Descriptor cd_S7457C2;
extern VTBL_ENTRY _ZTI7S7457C2[];
extern  VTBL_ENTRY _ZTV7S7457C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C2[];
extern Class_Descriptor cd_S7457C11;
extern VTBL_ENTRY _ZTI8S7457C11[];
extern  VTBL_ENTRY _ZTV8S7457C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7457C11[];
static Base_Class bases_S7457C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(74,42), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C5,    ABISELECT(74,42), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C6,    ABISELECT(80,44), //bcp->offset
    33, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7457C6,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C9,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    7, //immediately_derived
  0, 0},
  {&cd_S7457C5,    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
    8, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(104,52), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C9,    ABISELECT(120,60), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7457C7,    ABISELECT(96,48), //bcp->offset
    36, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7457C9,    0, //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
    15, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7457C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7457C11,    ABISELECT(208,124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7457C9,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(216,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
    16, //immediately_derived
  0, 0},
  {&cd_S7457C10,    ABISELECT(208,124), //bcp->offset
    51, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S7457C9,    ABISELECT(224,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(232,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
    19, //immediately_derived
  0, 0},
  {&cd_S7457C5,    ABISELECT(232,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
    20, //immediately_derived
  0, 0},
  {&cd_S7457C8,    ABISELECT(224,136), //bcp->offset
    60, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S7457C13,    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
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7457C9,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(248,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7457C5,    ABISELECT(248,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C8,    ABISELECT(240,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7457C14,    ABISELECT(240,144), //bcp->offset
    66, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S7457C12,    ABISELECT(48,28), //bcp->offset
    14, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7457C16,    ABISELECT(56,32), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S7457C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //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_S7457C11,    ABISELECT(64,36), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7457C1[];
extern void _ZN7S7457C42v1Ev();
extern void _ZN7S7457C1D1Ev();
extern void _ZN7S7457C1D0Ev();
extern void ABISELECT(_ZThn48_N7S7457C1D1Ev,_ZThn28_N7S7457C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7457C1D0Ev,_ZThn28_N7S7457C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7457C1D1Ev,_ZTv0_n20_N7S7457C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S7457C1D1Ev,_ZThn48_N7S7457C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7457C1D0Ev,_ZTv0_n20_N7S7457C1D0Ev)();
extern void ABISELECT(_ZThn96_N7S7457C1D0Ev,_ZThn48_N7S7457C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S7457C1D1Ev,_ZTvn4_n20_N7S7457C1D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7457C1D0Ev,_ZTvn4_n20_N7S7457C1D0Ev)();
extern void ABISELECT(_ZTv0_n56_N7S7457C1D1Ev,_ZTv0_n28_N7S7457C1D1Ev)();
extern void ABISELECT(_ZThn208_N7S7457C1D1Ev,_ZThn124_N7S7457C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7457C1D0Ev,_ZTv0_n28_N7S7457C1D0Ev)();
extern void ABISELECT(_ZThn208_N7S7457C1D0Ev,_ZThn124_N7S7457C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7457C1D1Ev,_ZTv0_n16_N7S7457C1D1Ev)();
extern void ABISELECT(_ZThn224_N7S7457C1D1Ev,_ZThn136_N7S7457C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7457C1D0Ev,_ZTv0_n16_N7S7457C1D0Ev)();
extern void ABISELECT(_ZThn224_N7S7457C1D0Ev,_ZThn136_N7S7457C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7457C1D1Ev,_ZTv0_n32_N7S7457C1D1Ev)();
extern void ABISELECT(_ZThn240_N7S7457C1D1Ev,_ZThn144_N7S7457C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7457C1D0Ev,_ZTv0_n32_N7S7457C1D0Ev)();
extern void ABISELECT(_ZThn240_N7S7457C1D0Ev,_ZThn144_N7S7457C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7457C1[] = {
  ABISELECT(240,144),
  ABISELECT(224,136),
  ABISELECT(48,28),
  ABISELECT(208,124),
  ABISELECT(208,124),
  ABISELECT(96,48),
  ABISELECT(80,44),
  ABISELECT(74,42),
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  (VTBL_ENTRY)&_ZN7S7457C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7457C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C1D0Ev,
  ABISELECT(192,116),
  ABISELECT(176,108),
  ABISELECT(32,16),
  ABISELECT(26,14),
  ABISELECT(160,96),
  ABISELECT(160,96),
  0,
  ABISELECT(24,12),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7457C1D1Ev,_ZThn28_N7S7457C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7457C1D0Ev,_ZThn28_N7S7457C1D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  ABISELECT(8,4),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  ABISELECT(-6,-2),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  ABISELECT(-96,-48),
  ABISELECT(-24,-8),
  ABISELECT(-22,-6),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C1D1Ev,_ZTv0_n20_N7S7457C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C1D0Ev,_ZTv0_n20_N7S7457C1D0Ev),
  ABISELECT(-32,-12),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C1D1Ev,_ZTvn4_n20_N7S7457C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C1D0Ev,_ZTvn4_n20_N7S7457C1D0Ev),
  ABISELECT(-48,-20),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  ABISELECT(-208,-124),
  ABISELECT(-134,-82),
  ABISELECT(-160,-96),
  0,
  ABISELECT(-136,-84),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7457C1D1Ev,_ZTv0_n28_N7S7457C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7457C1D0Ev,_ZTv0_n28_N7S7457C1D0Ev),
  ABISELECT(-224,-136),
  ABISELECT(-152,-96),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7457C1D1Ev,_ZTv0_n16_N7S7457C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7457C1D0Ev,_ZTv0_n16_N7S7457C1D0Ev),
  ABISELECT(-240,-144),
  ABISELECT(-192,-116),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-166,-102),
  ABISELECT(-168,-104),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI7S7457C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7457C1D1Ev,_ZTv0_n32_N7S7457C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7457C1D0Ev,_ZTv0_n32_N7S7457C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7457C1[];
extern void _ZN7S7457C42v1Ev();
extern void _ZN7S7457C2D1Ev();
extern void _ZN7S7457C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C2__7S7457C1[] = {
  ABISELECT(240,144),
  ABISELECT(224,136),
  ABISELECT(48,28),
  ABISELECT(208,124),
  ABISELECT(208,124),
  ABISELECT(96,48),
  ABISELECT(80,44),
  ABISELECT(74,42),
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&_ZN7S7457C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7457C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C2D0Ev,
};
extern void _ZN7S7457C42v1Ev();
extern void _ZN7S7457C4D1Ev();
extern void _ZN7S7457C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C47S7457C2__7S7457C1[] = {
  ABISELECT(96,48),
  ABISELECT(80,44),
  ABISELECT(74,42),
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&_ZN7S7457C42v1Ev,
  (VTBL_ENTRY)&_ZN7S7457C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C47S7457C2__A2__7S7457C1[] = {
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__7S7457C47S7457C2__7S7457C1[] = {
  ABISELECT(-6,-2),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev)();
extern void ABISELECT(_ZThn96_N7S7457C4D1Ev,_ZThn48_N7S7457C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev)();
extern void ABISELECT(_ZThn96_N7S7457C4D0Ev,_ZThn48_N7S7457C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7457C7__7S7457C47S7457C2__7S7457C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(-24,-8),
  ABISELECT(-22,-6),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7457C4D1Ev,_ZTvn4_n20_N7S7457C4D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7457C4D0Ev,_ZTvn4_n20_N7S7457C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7457C87S7457C7__7S7457C47S7457C2__7S7457C1[] = {
  ABISELECT(-32,-12),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C4D1Ev,_ZTvn4_n20_N7S7457C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C4D0Ev,_ZTvn4_n20_N7S7457C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C7__A1__7S7457C47S7457C2__7S7457C1[] = {
  ABISELECT(-48,-20),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7457C4[0]),
};
extern void _ZN8S7457C12D1Ev();
extern void _ZN8S7457C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C127S7457C2__7S7457C1[] = {
  ABISELECT(192,116),
  ABISELECT(176,108),
  ABISELECT(32,16),
  ABISELECT(26,14),
  ABISELECT(160,96),
  ABISELECT(160,96),
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&_ZN8S7457C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7457C138S7457C127S7457C2__7S7457C1[] = {
  0,
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C13[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn160_N8S7457C12D1Ev,_ZThn96_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn160_N8S7457C12D0Ev,_ZThn96_N8S7457C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7457C10__8S7457C127S7457C2__7S7457C1[] = {
  ABISELECT(-160,-96),
  ABISELECT(-134,-82),
  ABISELECT(-160,-96),
  0,
  ABISELECT(-136,-84),
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__8S7457C127S7457C2__7S7457C1[] = {
  ABISELECT(-6,-2),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn176_N8S7457C12D1Ev,_ZThn108_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn176_N8S7457C12D0Ev,_ZThn108_N8S7457C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7457C8__8S7457C127S7457C2__7S7457C1[] = {
  ABISELECT(-176,-108),
  ABISELECT(-152,-96),
  ABISELECT(-176,-108),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev)();
extern void ABISELECT(_ZThn192_N8S7457C12D1Ev,_ZThn116_N8S7457C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev)();
extern void ABISELECT(_ZThn192_N8S7457C12D0Ev,_ZThn116_N8S7457C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7457C14__8S7457C127S7457C2__7S7457C1[] = {
  ABISELECT(-192,-116),
  ABISELECT(-192,-116),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-166,-102),
  ABISELECT(-168,-104),
  ABISELECT(-192,-116),
  (VTBL_ENTRY)&(_ZTI8S7457C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7457C167S7457C2__7S7457C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C167S7457C2__7S7457C1[] = {
  ABISELECT(24,12),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7457C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__7S7457C2__7S7457C1[] = {
  ABISELECT(-6,-2),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S7457C2D1Ev,_ZTv0_n20_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn96_N7S7457C2D1Ev,_ZThn48_N7S7457C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7457C2D0Ev,_ZTv0_n20_N7S7457C2D0Ev)();
extern void ABISELECT(_ZThn96_N7S7457C2D0Ev,_ZThn48_N7S7457C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7457C7__7S7457C2__7S7457C1[] = {
  ABISELECT(-96,-48),
  ABISELECT(-24,-8),
  ABISELECT(-22,-6),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C2D1Ev,_ZTv0_n20_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7457C2D0Ev,_ZTv0_n20_N7S7457C2D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S7457C2D1Ev,_ZTvn4_n20_N7S7457C2D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S7457C2D0Ev,_ZTvn4_n20_N7S7457C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7457C87S7457C7__7S7457C2__7S7457C1[] = {
  ABISELECT(-32,-12),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C2D1Ev,_ZTvn4_n20_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S7457C2D0Ev,_ZTvn4_n20_N7S7457C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C7__A1__7S7457C2__7S7457C1[] = {
  ABISELECT(-48,-20),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
};
extern void ABISELECT(_ZThn48_N7S7457C2D1Ev,_ZThn28_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S7457C2D0Ev,_ZThn28_N7S7457C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7457C12__7S7457C2__7S7457C1[] = {
  ABISELECT(192,116),
  ABISELECT(176,108),
  ABISELECT(32,16),
  ABISELECT(26,14),
  ABISELECT(160,96),
  ABISELECT(160,96),
  0,
  ABISELECT(24,12),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7457C2D1Ev,_ZThn28_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7457C2D0Ev,_ZThn28_N7S7457C2D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N7S7457C2D1Ev,_ZTv0_n28_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn208_N7S7457C2D1Ev,_ZThn124_N7S7457C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7457C2D0Ev,_ZTv0_n28_N7S7457C2D0Ev)();
extern void ABISELECT(_ZThn208_N7S7457C2D0Ev,_ZThn124_N7S7457C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7457C10__7S7457C2__7S7457C1[] = {
  ABISELECT(-208,-124),
  ABISELECT(-134,-82),
  ABISELECT(-160,-96),
  0,
  ABISELECT(-136,-84),
  ABISELECT(-208,-124),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7457C2D1Ev,_ZTv0_n28_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7457C2D0Ev,_ZTv0_n28_N7S7457C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7457C2D1Ev,_ZTv0_n16_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn224_N7S7457C2D1Ev,_ZThn136_N7S7457C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7457C2D0Ev,_ZTv0_n16_N7S7457C2D0Ev)();
extern void ABISELECT(_ZThn224_N7S7457C2D0Ev,_ZThn136_N7S7457C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7457C8__A1__7S7457C2__7S7457C1[] = {
  ABISELECT(-224,-136),
  ABISELECT(-152,-96),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7457C2D1Ev,_ZTv0_n16_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7457C2D0Ev,_ZTv0_n16_N7S7457C2D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N7S7457C2D1Ev,_ZTv0_n32_N7S7457C2D1Ev)();
extern void ABISELECT(_ZThn240_N7S7457C2D1Ev,_ZThn144_N7S7457C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7457C2D0Ev,_ZTv0_n32_N7S7457C2D0Ev)();
extern void ABISELECT(_ZThn240_N7S7457C2D0Ev,_ZThn144_N7S7457C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7457C14__7S7457C2__7S7457C1[] = {
  ABISELECT(-240,-144),
  ABISELECT(-192,-116),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-166,-102),
  ABISELECT(-168,-104),
  ABISELECT(-240,-144),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7457C2D1Ev,_ZTv0_n32_N7S7457C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7457C2D0Ev,_ZTv0_n32_N7S7457C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S7457C16__7S7457C2__7S7457C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7457C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7457C11__A__7S7457C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C6__7S7457C1[] = {
  ABISELECT(-6,-2),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern void _ZN7S7457C7D1Ev();
extern void _ZN7S7457C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C7__7S7457C1[] = {
  ABISELECT(-24,-8),
  ABISELECT(-22,-6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
  (VTBL_ENTRY)&_ZN7S7457C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C67S7457C7__A1__7S7457C1[] = {
  ABISELECT(-22,-6),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C6[0]),
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C87S7457C7__7S7457C1[] = {
  ABISELECT(-32,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C87S7457C7__7S7457C1[] = {
  ABISELECT(-32,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C7__A1__7S7457C1[] = {
  ABISELECT(-48,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void ABISELECT(_ZThn8_N7S7457C7D1Ev,_ZThn4_N7S7457C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7457C7D0Ev,_ZThn4_N7S7457C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7457C8__7S7457C7__7S7457C1[] = {
  ABISELECT(-32,-12),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7457C7D1Ev,_ZThn4_N7S7457C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7457C7D0Ev,_ZThn4_N7S7457C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__A1__7S7457C7__7S7457C1[] = {
  ABISELECT(-48,-20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7457C7[0]),
};
extern void _ZN8S7457C10D1Ev();
extern void _ZN8S7457C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C10__7S7457C1[] = {
  ABISELECT(-134,-82),
  ABISELECT(-160,-96),
  0,
  ABISELECT(-136,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
  (VTBL_ENTRY)&_ZN8S7457C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C10__7S7457C1[] = {
  ABISELECT(24,12),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI8S7457C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7457C11__7S7457C1[] = {
  ABISELECT(-136,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__A3__7S7457C1[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C8__A1__7S7457C1[] = {
  ABISELECT(-152,-96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C8__A4__7S7457C1[] = {
  ABISELECT(-152,-96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void _ZN8S7457C14D1Ev();
extern void _ZN8S7457C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7457C14__7S7457C1[] = {
  ABISELECT(-192,-116),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-166,-102),
  ABISELECT(-168,-104),
  0,
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
  (VTBL_ENTRY)&_ZN8S7457C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7457C14D0Ev,
};
extern void _ZN7S7457C8D1Ev();
extern void _ZN7S7457C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7457C88S7457C14__A2__7S7457C1[] = {
  ABISELECT(-168,-104),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C8[0]),
  (VTBL_ENTRY)&_ZN7S7457C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7457C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7457C97S7457C88S7457C14__A5__7S7457C1[] = {
  ABISELECT(-168,-104),
  0,
  (VTBL_ENTRY)&(_ZTI7S7457C9[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S7457C10__8S7457C14__7S7457C1[] = {
  ABISELECT(32,20),
  ABISELECT(-134,-82),
  ABISELECT(-160,-96),
  0,
  ABISELECT(-136,-84),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C14D1Ev,_ZTv0_n28_N8S7457C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S7457C14D0Ev,_ZTv0_n28_N8S7457C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7457C9__8S7457C14__7S7457C1[] = {
  ABISELECT(24,12),
  ABISELECT(192,116),
  (VTBL_ENTRY)&(_ZTI8S7457C14[0]),
};
static  VTT_ENTRY vtt_S7457C1[] = {
  {&(_ZTV7S7457C1[11]),  11,76},
  {&(_tg__ZTV7S7457C2__7S7457C1[11]),  11,14},
  {&(_tg__ZTV7S7457C47S7457C2__7S7457C1[6]),  6,9},
  {&(_tg__ZTV7S7457C97S7457C47S7457C2__A2__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C6__7S7457C47S7457C2__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C7__7S7457C47S7457C2__7S7457C1[5]),  5,7},
  {&(_tg__ZTV7S7457C87S7457C7__7S7457C47S7457C2__7S7457C1[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C7__A1__7S7457C47S7457C2__7S7457C1[3]),  3,3},
  {&(_tg__ZTV8S7457C127S7457C2__7S7457C1[10]),  10,12},
  {&(_tg__ZTV8S7457C138S7457C127S7457C2__7S7457C1[4]),  4,4},
  {&(_tg__ZTV8S7457C138S7457C127S7457C2__7S7457C1[4]),  4,4},
  {&(_tg__ZTV8S7457C10__8S7457C127S7457C2__7S7457C1[7]),  7,9},
  {&(_tg__ZTV8S7457C10__8S7457C127S7457C2__7S7457C1[7]),  7,9},
  {&(_tg__ZTV8S7457C127S7457C2__7S7457C1[10]),  10,12},
  {&(_tg__ZTV7S7457C6__8S7457C127S7457C2__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C8__8S7457C127S7457C2__7S7457C1[4]),  4,6},
  {&(_tg__ZTV8S7457C14__8S7457C127S7457C2__7S7457C1[8]),  8,10},
  {&(_tg__ZTV8S7457C167S7457C2__7S7457C1[4]),  4,4},
  {&(_tg__ZTV7S7457C9__8S7457C167S7457C2__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C6__7S7457C2__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C7__7S7457C2__7S7457C1[5]),  5,7},
  {&(_tg__ZTV7S7457C87S7457C7__7S7457C2__7S7457C1[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C7__A1__7S7457C2__7S7457C1[3]),  3,3},
  {&(_tg__ZTV8S7457C12__7S7457C2__7S7457C1[10]),  10,12},
  {&(_tg__ZTV8S7457C10__7S7457C2__7S7457C1[7]),  7,9},
  {&(_tg__ZTV8S7457C10__7S7457C2__7S7457C1[7]),  7,9},
  {&(_tg__ZTV8S7457C12__7S7457C2__7S7457C1[10]),  10,12},
  {&(_tg__ZTV7S7457C8__A1__7S7457C2__7S7457C1[4]),  4,6},
  {&(_tg__ZTV8S7457C14__7S7457C2__7S7457C1[8]),  8,10},
  {&(_tg__ZTV8S7457C16__7S7457C2__7S7457C1[4]),  4,4},
  {&(_tg__ZTV8S7457C11__A__7S7457C1[3]),  3,3},
  {&(_ZTV7S7457C1[36]),  36,76},
  {&(_ZTV7S7457C1[41]),  41,76},
  {&(_ZTV7S7457C1[46]),  46,76},
  {&(_ZTV7S7457C1[51]),  51,76},
  {&(_ZTV7S7457C1[24]),  24,76},
  {&(_ZTV7S7457C1[58]),  58,76},
  {&(_ZTV7S7457C1[58]),  58,76},
  {&(_ZTV7S7457C1[24]),  24,76},
  {&(_ZTV7S7457C1[64]),  64,76},
  {&(_ZTV7S7457C1[74]),  74,76},
  {&(_ZTV7S7457C1[30]),  30,76},
  {&(_ZTV7S7457C1[33]),  33,76},
  {&(_tg__ZTV7S7457C6__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C7__7S7457C1[4]),  4,6},
  {&(_tg__ZTV7S7457C67S7457C7__A1__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C87S7457C7__7S7457C1[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C87S7457C7__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C97S7457C7__A1__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C8__7S7457C7__7S7457C1[3]),  3,5},
  {&(_tg__ZTV7S7457C9__A1__7S7457C7__7S7457C1[3]),  3,3},
  {&(_tg__ZTV8S7457C10__7S7457C1[6]),  6,8},
  {&(_tg__ZTV8S7457C10__7S7457C1[6]),  6,8},
  {&(_tg__ZTV7S7457C9__8S7457C10__7S7457C1[3]),  3,3},
  {&(_tg__ZTV8S7457C11__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C9__A3__7S7457C1[3]),  3,3},
  {&(_tg__ZTV7S7457C8__A1__7S7457C1[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C8__A4__7S7457C1[3]),  3,3},
  {&(_tg__ZTV8S7457C14__7S7457C1[7]),  7,9},
  {&(_tg__ZTV7S7457C88S7457C14__A2__7S7457C1[3]),  3,5},
  {&(_tg__ZTV7S7457C97S7457C88S7457C14__A5__7S7457C1[3]),  3,3},
  {&(_tg__ZTV8S7457C10__8S7457C14__7S7457C1[7]),  7,9},
  {&(_tg__ZTV8S7457C10__8S7457C14__7S7457C1[7]),  7,9},
  {&(_tg__ZTV7S7457C9__8S7457C14__7S7457C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7457C1[];
extern  VTBL_ENTRY _ZTV7S7457C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7457C1[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7457C2D0Ev,_ZTv0_n32_N7S7457C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7457C2D0Ev,_ZThn144_N7S7457C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7457C2D1Ev,_ZTv0_n32_N7S7457C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7457C2D1Ev,_ZThn144_N7S7457C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7457C2D0Ev,_ZTv0_n16_N7S7457C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7457C2D0Ev,_ZThn136_N7S7457C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7457C2D1Ev,_ZTv0_n16_N7S7457C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7457C2D1Ev,_ZThn136_N7S7457C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7457C2D0Ev,_ZTv0_n28_N7S7457C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7457C2D0Ev,_ZThn124_N7S7457C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7457C2D1Ev,_ZTv0_n28_N7S7457C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7457C2D1Ev,_ZThn124_N7S7457C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C2D0Ev,_ZTv0_n20_N7S7457C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7457C2D0Ev,_ZThn48_N7S7457C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C2D1Ev,_ZTv0_n20_N7S7457C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7457C2D1Ev,_ZThn48_N7S7457C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7457C12D0Ev,_ZTv0_n32_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S7457C12D0Ev,_ZThn116_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S7457C12D1Ev,_ZTv0_n32_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S7457C12D1Ev,_ZThn116_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7457C12D0Ev,_ZTv0_n16_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7457C12D0Ev,_ZThn108_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7457C12D1Ev,_ZTv0_n16_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7457C12D1Ev,_ZThn108_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7457C12D0Ev,_ZTv0_n28_N8S7457C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7457C12D0Ev,_ZThn96_N8S7457C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S7457C12D1Ev,_ZTv0_n28_N8S7457C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S7457C12D1Ev,_ZThn96_N8S7457C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C4D0Ev,_ZTv0_n20_N7S7457C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7457C4D0Ev,_ZThn48_N7S7457C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C4D1Ev,_ZTv0_n20_N7S7457C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7457C4D1Ev,_ZThn48_N7S7457C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7457C1D0Ev,_ZTv0_n32_N7S7457C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7457C1D0Ev,_ZThn144_N7S7457C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7457C1D1Ev,_ZTv0_n32_N7S7457C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N7S7457C1D1Ev,_ZThn144_N7S7457C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7457C1D0Ev,_ZTv0_n16_N7S7457C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7457C1D0Ev,_ZThn136_N7S7457C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7457C1D1Ev,_ZTv0_n16_N7S7457C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N7S7457C1D1Ev,_ZThn136_N7S7457C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7457C1D0Ev,_ZTv0_n28_N7S7457C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7457C1D0Ev,_ZThn124_N7S7457C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7457C1D1Ev,_ZTv0_n28_N7S7457C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7457C1D1Ev,_ZThn124_N7S7457C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C1D0Ev,_ZTv0_n20_N7S7457C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7457C1D0Ev,_ZThn48_N7S7457C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7457C1D1Ev,_ZTv0_n20_N7S7457C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7457C1D1Ev,_ZThn48_N7S7457C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7457C1 = {  "S7457C1", // class name
  bases_S7457C1, 32,
  &(vtc_S7457C1[0]), // expected_vtbl_contents
  &(vtt_S7457C1[0]), // expected_vtt_contents
  ABISELECT(256,152), // object size
  NSPAIRA(_ZTI7S7457C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7457C1),76, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7457C1),64, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19306C3  {
  __tsi64 s19306c3f0[9];
  virtual  ~S19306C3(); // _ZN8S19306C3D1Ev
  virtual void  v2(); // _ZN8S19306C32v2Ev
  virtual void  v3(); // _ZN8S19306C32v3Ev
  virtual void  v4(); // _ZN8S19306C32v4Ev
  virtual void  v5(); // _ZN8S19306C32v5Ev
  virtual void  v6(); // _ZN8S19306C32v6Ev
  virtual void  v7(); // _ZN8S19306C32v7Ev
  virtual void  v8(); // _ZN8S19306C32v8Ev
  S19306C3(); // tgen
};
//SIG(-1 S19306C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 FL[9]}


 S19306C3 ::~S19306C3(){ note_dtor("S19306C3", this);}
void  S19306C3 ::v2(){vfunc_called(this, "_ZN8S19306C32v2Ev");}
void  S19306C3 ::v3(){vfunc_called(this, "_ZN8S19306C32v3Ev");}
void  S19306C3 ::v4(){vfunc_called(this, "_ZN8S19306C32v4Ev");}
void  S19306C3 ::v5(){vfunc_called(this, "_ZN8S19306C32v5Ev");}
void  S19306C3 ::v6(){vfunc_called(this, "_ZN8S19306C32v6Ev");}
void  S19306C3 ::v7(){vfunc_called(this, "_ZN8S19306C32v7Ev");}
void  S19306C3 ::v8(){vfunc_called(this, "_ZN8S19306C32v8Ev");}
S19306C3 ::S19306C3(){ note_ctor("S19306C3", this);} // tgen

static void Test_S19306C3()
{
  extern Class_Descriptor cd_S19306C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,20)];
    init_test(&cd_S19306C3, buf);
    S19306C3 *dp, &lv = *(dp=new (buf) S19306C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,76), "sizeof(S19306C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19306C3)");
    check_field_offset(lv, s19306c3f0, ABISELECT(8,4), "S19306C3.s19306c3f0");
    test_class_info(&lv, &cd_S19306C3);
    dp->~S19306C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C3(Test_S19306C3, "S19306C3", ABISELECT(80,76));

#else // __cplusplus

extern void _ZN8S19306C3C1Ev();
extern void _ZN8S19306C3D1Ev();
Name_Map name_map_S19306C3[] = {
  NSPAIR(_ZN8S19306C3C1Ev),
  NSPAIR(_ZN8S19306C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19306C3[];
extern void _ZN8S19306C3D1Ev();
extern void _ZN8S19306C3D0Ev();
extern void _ZN8S19306C32v2Ev();
extern void _ZN8S19306C32v3Ev();
extern void _ZN8S19306C32v4Ev();
extern void _ZN8S19306C32v5Ev();
extern void _ZN8S19306C32v6Ev();
extern void _ZN8S19306C32v7Ev();
extern void _ZN8S19306C32v8Ev();
static  VTBL_ENTRY vtc_S19306C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C3[0]),
  (VTBL_ENTRY)&_ZN8S19306C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19306C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S19306C3[];
extern  VTBL_ENTRY _ZTV8S19306C3[];
Class_Descriptor cd_S19306C3 = {  "S19306C3", // class name
  0,0,//no base classes
  &(vtc_S19306C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,76), // object size
  NSPAIRA(_ZTI8S19306C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19306C3),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  S19306C7  {
  void *s19306c7f0;
  long double s19306c7f1;
  int s19306c7f2;
  virtual void  v9(); // _ZN8S19306C72v9Ev
  virtual void  v10(); // _ZN8S19306C73v10Ev
  ~S19306C7(); // tgen
  S19306C7(); // tgen
};
//SIG(-1 S19306C7) C1{ v1 v2 Fp FD Fi}


void  S19306C7 ::v9(){vfunc_called(this, "_ZN8S19306C72v9Ev");}
void  S19306C7 ::v10(){vfunc_called(this, "_ZN8S19306C73v10Ev");}
S19306C7 ::~S19306C7(){ note_dtor("S19306C7", this);} // tgen
S19306C7 ::S19306C7(){ note_ctor("S19306C7", this);} // tgen

static void Test_S19306C7()
{
  extern Class_Descriptor cd_S19306C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19306C7, buf);
    S19306C7 *dp, &lv = *(dp=new (buf) S19306C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19306C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19306C7)");
    check_field_offset(lv, s19306c7f0, ABISELECT(8,4), "S19306C7.s19306c7f0");
    check_field_offset(lv, s19306c7f1, ABISELECT(16,8), "S19306C7.s19306c7f1");
    check_field_offset(lv, s19306c7f2, ABISELECT(32,20), "S19306C7.s19306c7f2");
    test_class_info(&lv, &cd_S19306C7);
    dp->~S19306C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C7(Test_S19306C7, "S19306C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19306C7C1Ev();
extern void _ZN8S19306C7D1Ev();
Name_Map name_map_S19306C7[] = {
  NSPAIR(_ZN8S19306C7C1Ev),
  NSPAIR(_ZN8S19306C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19306C7[];
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
static  VTBL_ENTRY vtc_S19306C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C7[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
};
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
Class_Descriptor cd_S19306C7 = {  "S19306C7", // class name
  0,0,//no base classes
  &(vtc_S19306C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19306C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19306C7),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  S19306C6  : S19306C7 {
  virtual void  v11(); // _ZN8S19306C63v11Ev
  virtual void  v12(); // _ZN8S19306C63v12Ev
  ~S19306C6(); // tgen
  S19306C6(); // tgen
};
//SIG(-1 S19306C6) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S19306C6 ::v11(){vfunc_called(this, "_ZN8S19306C63v11Ev");}
void  S19306C6 ::v12(){vfunc_called(this, "_ZN8S19306C63v12Ev");}
S19306C6 ::~S19306C6(){ note_dtor("S19306C6", this);} // tgen
S19306C6 ::S19306C6(){ note_ctor("S19306C6", this);} // tgen

static void Test_S19306C6()
{
  extern Class_Descriptor cd_S19306C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19306C6, buf);
    S19306C6 *dp, &lv = *(dp=new (buf) S19306C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19306C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19306C6)");
    check_base_class_offset(lv, (S19306C7*), 0, "S19306C6");
    test_class_info(&lv, &cd_S19306C6);
    dp->~S19306C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C6(Test_S19306C6, "S19306C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19306C6C1Ev();
extern void _ZN8S19306C6D1Ev();
Name_Map name_map_S19306C6[] = {
  NSPAIR(_ZN8S19306C6C1Ev),
  NSPAIR(_ZN8S19306C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
static Base_Class bases_S19306C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19306C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19306C6[];
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C63v11Ev();
extern void _ZN8S19306C63v12Ev();
static  VTBL_ENTRY vtc_S19306C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C6[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v12Ev,
};
extern VTBL_ENTRY _ZTI8S19306C6[];
extern  VTBL_ENTRY _ZTV8S19306C6[];
Class_Descriptor cd_S19306C6 = {  "S19306C6", // class name
  bases_S19306C6, 1,
  &(vtc_S19306C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19306C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19306C6),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  S19306C5  : S19306C6 , S19306C7 {
  virtual void  v13(); // _ZN8S19306C53v13Ev
  virtual void  v14(); // _ZN8S19306C53v14Ev
  virtual void  v15(); // _ZN8S19306C53v15Ev
  virtual void  v16(); // _ZN8S19306C53v16Ev
  ~S19306C5(); // tgen
  S19306C5(); // tgen
};
//SIG(-1 S19306C5) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S19306C5 ::v13(){vfunc_called(this, "_ZN8S19306C53v13Ev");}
void  S19306C5 ::v14(){vfunc_called(this, "_ZN8S19306C53v14Ev");}
void  S19306C5 ::v15(){vfunc_called(this, "_ZN8S19306C53v15Ev");}
void  S19306C5 ::v16(){vfunc_called(this, "_ZN8S19306C53v16Ev");}
S19306C5 ::~S19306C5(){ note_dtor("S19306C5", this);} // tgen
S19306C5 ::S19306C5(){ note_ctor("S19306C5", this);} // tgen

static void Test_S19306C5()
{
  extern Class_Descriptor cd_S19306C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S19306C5, buf);
    S19306C5 *dp, &lv = *(dp=new (buf) S19306C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S19306C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19306C5)");
    check_base_class_offset(lv, (S19306C7*)(S19306C6*), 0, "S19306C5");
    check_base_class_offset(lv, (S19306C6*), 0, "S19306C5");
    /*is_ambiguous_... S19306C5::S19306C7 */ AMB_check_base_class_offset(lv, (S19306C7*), ABISELECT(48,24), "S19306C5");
    test_class_info(&lv, &cd_S19306C5);
    dp->~S19306C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C5(Test_S19306C5, "S19306C5", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S19306C5C1Ev();
extern void _ZN8S19306C5D1Ev();
Name_Map name_map_S19306C5[] = {
  NSPAIR(_ZN8S19306C5C1Ev),
  NSPAIR(_ZN8S19306C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
extern Class_Descriptor cd_S19306C6;
extern VTBL_ENTRY _ZTI8S19306C6[];
extern  VTBL_ENTRY _ZTV8S19306C6[];
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
static Base_Class bases_S19306C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19306C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19306C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S19306C7,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_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 _ZTI8S19306C5[];
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C63v11Ev();
extern void _ZN8S19306C63v12Ev();
extern void _ZN8S19306C53v13Ev();
extern void _ZN8S19306C53v14Ev();
extern void _ZN8S19306C53v15Ev();
extern void _ZN8S19306C53v16Ev();
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
static  VTBL_ENTRY vtc_S19306C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C5[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v16Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19306C5[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
};
extern VTBL_ENTRY _ZTI8S19306C5[];
extern  VTBL_ENTRY _ZTV8S19306C5[];
Class_Descriptor cd_S19306C5 = {  "S19306C5", // class name
  bases_S19306C5, 3,
  &(vtc_S19306C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S19306C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19306C5),14, //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  S19306C10  {
  ::S1400C17_nt s19306c10f0;
  void *s19306c10f1;
  virtual void  v17(); // _ZN9S19306C103v17Ev
  ~S19306C10(); // tgen
  S19306C10(); // tgen
};
//SIG(-1 S19306C10) C1{ v1 FC2{ v2 v3} Fp}


void  S19306C10 ::v17(){vfunc_called(this, "_ZN9S19306C103v17Ev");}
S19306C10 ::~S19306C10(){ note_dtor("S19306C10", this);} // tgen
S19306C10 ::S19306C10(){ note_ctor("S19306C10", this);} // tgen

static void Test_S19306C10()
{
  extern Class_Descriptor cd_S19306C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19306C10, buf);
    S19306C10 *dp, &lv = *(dp=new (buf) S19306C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19306C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19306C10)");
    check_field_offset(lv, s19306c10f0, ABISELECT(8,4), "S19306C10.s19306c10f0");
    check_field_offset(lv, s19306c10f1, ABISELECT(16,8), "S19306C10.s19306c10f1");
    test_class_info(&lv, &cd_S19306C10);
    dp->~S19306C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C10(Test_S19306C10, "S19306C10", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19306C10C1Ev();
extern void _ZN9S19306C10D1Ev();
Name_Map name_map_S19306C10[] = {
  NSPAIR(_ZN9S19306C10C1Ev),
  NSPAIR(_ZN9S19306C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19306C10[];
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY vtc_S19306C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19306C10[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
Class_Descriptor cd_S19306C10 = {  "S19306C10", // class name
  0,0,//no base classes
  &(vtc_S19306C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19306C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19306C10),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19306C9  : virtual S19306C10 {
  virtual void  v18(); // _ZN8S19306C93v18Ev
  ~S19306C9(); // tgen
  S19306C9(); // tgen
};
//SIG(-1 S19306C9) C1{ VBC2{ v2 FC3{ v3 v4} Fp} v1}


void  S19306C9 ::v18(){vfunc_called(this, "_ZN8S19306C93v18Ev");}
S19306C9 ::~S19306C9(){ note_dtor("S19306C9", this);} // tgen
S19306C9 ::S19306C9(){ note_ctor("S19306C9", this);} // tgen

static void Test_S19306C9()
{
  extern Class_Descriptor cd_S19306C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19306C9, buf);
    S19306C9 *dp, &lv = *(dp=new (buf) S19306C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19306C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19306C9)");
    check_base_class_offset(lv, (S19306C10*), ABISELECT(8,4), "S19306C9");
    test_class_info(&lv, &cd_S19306C9);
    dp->~S19306C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C9(Test_S19306C9, "S19306C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19306C9C1Ev();
extern void _ZN8S19306C9D1Ev();
Name_Map name_map_S19306C9[] = {
  NSPAIR(_ZN8S19306C9C1Ev),
  NSPAIR(_ZN8S19306C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19306C10;
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
static Base_Class bases_S19306C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19306C10,    ABISELECT(8,4), //bcp->offset
    4, //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 _ZTI8S19306C9[];
extern void _ZN8S19306C93v18Ev();
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY vtc_S19306C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19306C9[];
static  VTT_ENTRY vtt_S19306C9[] = {
  {&(_ZTV8S19306C9[3]),  3,8},
  {&(_ZTV8S19306C9[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S19306C9[];
extern  VTBL_ENTRY _ZTV8S19306C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C9[];
Class_Descriptor cd_S19306C9 = {  "S19306C9", // class name
  bases_S19306C9, 1,
  &(vtc_S19306C9[0]), // expected_vtbl_contents
  &(vtt_S19306C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19306C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19306C9),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19306C9),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  S19306C8  : virtual S19306C9 {
  virtual void  v19(); // _ZN8S19306C83v19Ev
  virtual void  v20(); // _ZN8S19306C83v20Ev
  virtual void  v21(); // _ZN8S19306C83v21Ev
  ~S19306C8(); // tgen
  S19306C8(); // tgen
};
//SIG(-1 S19306C8) C1{ VBC2{ VBC3{ v4 FC4{ v6 v7} Fp} v5} v1 v2 v3}


void  S19306C8 ::v19(){vfunc_called(this, "_ZN8S19306C83v19Ev");}
void  S19306C8 ::v20(){vfunc_called(this, "_ZN8S19306C83v20Ev");}
void  S19306C8 ::v21(){vfunc_called(this, "_ZN8S19306C83v21Ev");}
S19306C8 ::~S19306C8(){ note_dtor("S19306C8", this);} // tgen
S19306C8 ::S19306C8(){ note_ctor("S19306C8", this);} // tgen

static void Test_S19306C8()
{
  extern Class_Descriptor cd_S19306C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19306C8, buf);
    S19306C8 *dp, &lv = *(dp=new (buf) S19306C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19306C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19306C8)");
    check_base_class_offset(lv, (S19306C10*)(S19306C9*), ABISELECT(8,4), "S19306C8");
    check_base_class_offset(lv, (S19306C9*), 0, "S19306C8");
    test_class_info(&lv, &cd_S19306C8);
    dp->~S19306C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C8(Test_S19306C8, "S19306C8", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19306C8C1Ev();
extern void _ZN8S19306C8D1Ev();
Name_Map name_map_S19306C8[] = {
  NSPAIR(_ZN8S19306C8C1Ev),
  NSPAIR(_ZN8S19306C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19306C10;
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
extern Class_Descriptor cd_S19306C9;
extern VTBL_ENTRY _ZTI8S19306C9[];
extern  VTBL_ENTRY _ZTV8S19306C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C9[];
static Base_Class bases_S19306C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19306C10,    ABISELECT(8,4), //bcp->offset
    9, //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
    1, //immediately_derived
  0, 1},
  {&cd_S19306C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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 _ZTI8S19306C8[];
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY vtc_S19306C8[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C8[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19306C8[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19306C8[];
extern void _ZN8S19306C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C9__8S19306C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C9__8S19306C8[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
static  VTT_ENTRY vtt_S19306C8[] = {
  {&(_ZTV8S19306C8[5]),  5,13},
  {&(_ZTV8S19306C8[5]),  5,13},
  {&(_ZTV8S19306C8[12]),  12,13},
  {&(_tg__ZTV8S19306C9__8S19306C8[3]),  3,4},
  {&(_tg__ZTV9S19306C10__8S19306C9__8S19306C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19306C8[];
extern  VTBL_ENTRY _ZTV8S19306C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C8[];
Class_Descriptor cd_S19306C8 = {  "S19306C8", // class name
  bases_S19306C8, 2,
  &(vtc_S19306C8[0]), // expected_vtbl_contents
  &(vtt_S19306C8[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19306C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19306C8),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19306C8),5, //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  S19306C4  : S19306C5 , virtual S19306C8 {
  virtual void  v22(); // _ZN8S19306C43v22Ev
  virtual void  v23(); // _ZN8S19306C43v23Ev
  virtual void  v24(); // _ZN8S19306C43v24Ev
  ~S19306C4(); // tgen
  S19306C4(); // tgen
};
//SIG(-1 S19306C4) C1{ BC2{ BC3{ BC4{ v4 v5 Fp FD Fi} v6 v7} BC4 v8 v9 v10 v11} VBC5{ VBC6{ VBC7{ v12 FC8{ v17 v18} Fp} v13} v14 v15 v16} v1 v2 v3}


void  S19306C4 ::v22(){vfunc_called(this, "_ZN8S19306C43v22Ev");}
void  S19306C4 ::v23(){vfunc_called(this, "_ZN8S19306C43v23Ev");}
void  S19306C4 ::v24(){vfunc_called(this, "_ZN8S19306C43v24Ev");}
S19306C4 ::~S19306C4(){ note_dtor("S19306C4", this);} // tgen
S19306C4 ::S19306C4(){ note_ctor("S19306C4", this);} // tgen

static void Test_S19306C4()
{
  extern Class_Descriptor cd_S19306C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S19306C4, buf);
    S19306C4 *dp, &lv = *(dp=new (buf) S19306C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S19306C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19306C4)");
    check_base_class_offset(lv, (S19306C7*)(S19306C6*)(S19306C5*), 0, "S19306C4");
    check_base_class_offset(lv, (S19306C6*)(S19306C5*), 0, "S19306C4");
    /*is_ambiguous_... S19306C5::S19306C7 */ AMB_check_base_class_offset(lv, (S19306C7*)(S19306C5*), ABISELECT(48,24), "S19306C4");
    check_base_class_offset(lv, (S19306C5*), 0, "S19306C4");
    check_base_class_offset(lv, (S19306C10*)(S19306C9*), ABISELECT(96,52), "S19306C4");
    check_base_class_offset(lv, (S19306C9*)(S19306C8*), ABISELECT(88,48), "S19306C4");
    check_base_class_offset(lv, (S19306C8*), ABISELECT(88,48), "S19306C4");
    test_class_info(&lv, &cd_S19306C4);
    dp->~S19306C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C4(Test_S19306C4, "S19306C4", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S19306C4C1Ev();
extern void _ZN8S19306C4D1Ev();
Name_Map name_map_S19306C4[] = {
  NSPAIR(_ZN8S19306C4C1Ev),
  NSPAIR(_ZN8S19306C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
extern Class_Descriptor cd_S19306C6;
extern VTBL_ENTRY _ZTI8S19306C6[];
extern  VTBL_ENTRY _ZTV8S19306C6[];
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
extern Class_Descriptor cd_S19306C5;
extern VTBL_ENTRY _ZTI8S19306C5[];
extern  VTBL_ENTRY _ZTV8S19306C5[];
extern Class_Descriptor cd_S19306C10;
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
extern Class_Descriptor cd_S19306C9;
extern VTBL_ENTRY _ZTI8S19306C9[];
extern  VTBL_ENTRY _ZTV8S19306C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C9[];
extern Class_Descriptor cd_S19306C8;
extern VTBL_ENTRY _ZTI8S19306C8[];
extern  VTBL_ENTRY _ZTV8S19306C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C8[];
static Base_Class bases_S19306C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19306C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19306C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19306C7,    ABISELECT(48,24), //bcp->offset
    16, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19306C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S19306C10,    ABISELECT(96,52), //bcp->offset
    32, //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
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19306C9,    ABISELECT(88,48), //bcp->offset
    -1, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19306C8,    ABISELECT(88,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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 _ZTI8S19306C4[];
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C63v11Ev();
extern void _ZN8S19306C63v12Ev();
extern void _ZN8S19306C53v13Ev();
extern void _ZN8S19306C53v14Ev();
extern void _ZN8S19306C53v15Ev();
extern void _ZN8S19306C53v16Ev();
extern void _ZN8S19306C43v22Ev();
extern void _ZN8S19306C43v23Ev();
extern void _ZN8S19306C43v24Ev();
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY vtc_S19306C4[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v24Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19306C4[];
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C8__8S19306C4[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C8[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C8__8S19306C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19306C8[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern void _ZN8S19306C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C9__8S19306C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C9__8S19306C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
static  VTT_ENTRY vtt_S19306C4[] = {
  {&(_ZTV8S19306C4[5]),  5,36},
  {&(_ZTV8S19306C4[28]),  28,36},
  {&(_ZTV8S19306C4[28]),  28,36},
  {&(_ZTV8S19306C4[35]),  35,36},
  {&(_tg__ZTV8S19306C8__8S19306C4[5]),  5,9},
  {&(_tg__ZTV8S19306C8__8S19306C4[5]),  5,9},
  {&(_tg__ZTV9S19306C10__8S19306C8__8S19306C4[3]),  3,4},
  {&(_tg__ZTV8S19306C9__8S19306C4[3]),  3,4},
  {&(_tg__ZTV9S19306C10__8S19306C9__8S19306C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19306C4[];
extern  VTBL_ENTRY _ZTV8S19306C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C4[];
Class_Descriptor cd_S19306C4 = {  "S19306C4", // class name
  bases_S19306C4, 7,
  &(vtc_S19306C4[0]), // expected_vtbl_contents
  &(vtt_S19306C4[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S19306C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19306C4),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19306C4),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19306C2  : S19306C3 , virtual S19306C4 {
  __tsi64 s19306c2f0[2];
  long double s19306c2f1;
  short s19306c2f2;
  int s19306c2f3;
  virtual void  v25(); // _ZN8S19306C23v25Ev
  virtual void  v26(); // _ZN8S19306C23v26Ev
  virtual void  v27(); // _ZN8S19306C23v27Ev
  ~S19306C2(); // tgen
  S19306C2(); // tgen
};
//SIG(-1 S19306C2) C1{ BC2{ vd v4 v5 v6 v7 v8 v9 v10 FL[9]} VBC3{ BC4{ BC5{ BC6{ v11 v12 Fp FD Fi} v13 v14} BC6 v15 v16 v17 v18} VBC7{ VBC8{ VBC9{ v19 FC10{ v27 v28} Fp} v20} v21 v22 v23} v24 v25 v26} v1 v2 v3 FL[2] FD Fs Fi}


void  S19306C2 ::v25(){vfunc_called(this, "_ZN8S19306C23v25Ev");}
void  S19306C2 ::v26(){vfunc_called(this, "_ZN8S19306C23v26Ev");}
void  S19306C2 ::v27(){vfunc_called(this, "_ZN8S19306C23v27Ev");}
S19306C2 ::~S19306C2(){ note_dtor("S19306C2", this);} // tgen
S19306C2 ::S19306C2(){ note_ctor("S19306C2", this);} // tgen

static void Test_S19306C2()
{
  extern Class_Descriptor cd_S19306C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,45)];
    init_test(&cd_S19306C2, buf);
    S19306C2 *dp, &lv = *(dp=new (buf) S19306C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,176), "sizeof(S19306C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19306C2)");
    check_base_class_offset(lv, (S19306C3*), 0, "S19306C2");
    check_base_class_offset(lv, (S19306C7*)(S19306C6*)(S19306C5*)(S19306C4*), ABISELECT(128,112), "S19306C2");
    check_base_class_offset(lv, (S19306C6*)(S19306C5*)(S19306C4*), ABISELECT(128,112), "S19306C2");
    /*is_ambiguous_... S19306C5::S19306C7 */ AMB_check_base_class_offset(lv, (S19306C7*)(S19306C5*)(S19306C4*), ABISELECT(176,136), "S19306C2");
    check_base_class_offset(lv, (S19306C5*)(S19306C4*), ABISELECT(128,112), "S19306C2");
    check_base_class_offset(lv, (S19306C10*)(S19306C9*), ABISELECT(224,164), "S19306C2");
    check_base_class_offset(lv, (S19306C9*)(S19306C8*), ABISELECT(216,160), "S19306C2");
    check_base_class_offset(lv, (S19306C8*)(S19306C4*), ABISELECT(216,160), "S19306C2");
    check_base_class_offset(lv, (S19306C4*), ABISELECT(128,112), "S19306C2");
    check_field_offset(lv, s19306c2f0, ABISELECT(80,76), "S19306C2.s19306c2f0");
    check_field_offset(lv, s19306c2f1, ABISELECT(96,92), "S19306C2.s19306c2f1");
    check_field_offset(lv, s19306c2f2, ABISELECT(112,104), "S19306C2.s19306c2f2");
    check_field_offset(lv, s19306c2f3, ABISELECT(116,108), "S19306C2.s19306c2f3");
    test_class_info(&lv, &cd_S19306C2);
    dp->~S19306C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C2(Test_S19306C2, "S19306C2", ABISELECT(256,176));

#else // __cplusplus

extern void _ZN8S19306C2C1Ev();
extern void _ZN8S19306C2D1Ev();
Name_Map name_map_S19306C2[] = {
  NSPAIR(_ZN8S19306C2C1Ev),
  NSPAIR(_ZN8S19306C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19306C3;
extern VTBL_ENTRY _ZTI8S19306C3[];
extern  VTBL_ENTRY _ZTV8S19306C3[];
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
extern Class_Descriptor cd_S19306C6;
extern VTBL_ENTRY _ZTI8S19306C6[];
extern  VTBL_ENTRY _ZTV8S19306C6[];
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
extern Class_Descriptor cd_S19306C5;
extern VTBL_ENTRY _ZTI8S19306C5[];
extern  VTBL_ENTRY _ZTV8S19306C5[];
extern Class_Descriptor cd_S19306C10;
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
extern Class_Descriptor cd_S19306C9;
extern VTBL_ENTRY _ZTI8S19306C9[];
extern  VTBL_ENTRY _ZTV8S19306C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C9[];
extern Class_Descriptor cd_S19306C8;
extern VTBL_ENTRY _ZTI8S19306C8[];
extern  VTBL_ENTRY _ZTV8S19306C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C8[];
extern Class_Descriptor cd_S19306C4;
extern VTBL_ENTRY _ZTI8S19306C4[];
extern  VTBL_ENTRY _ZTV8S19306C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C4[];
static Base_Class bases_S19306C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19306C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19306C7,    ABISELECT(128,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
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19306C6,    ABISELECT(128,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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19306C7,    ABISELECT(176,136), //bcp->offset
    45, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19306C5,    ABISELECT(128,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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19306C10,    ABISELECT(224,164), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19306C9,    ABISELECT(216,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19306C8,    ABISELECT(216,160), //bcp->offset
    49, //bcp->virtual_function_table_offset
    8, //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
    8, //immediately_derived
  0, 1},
  {&cd_S19306C4,    ABISELECT(128,112), //bcp->offset
    18, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19306C2[];
extern void _ZN8S19306C2D1Ev();
extern void _ZN8S19306C2D0Ev();
extern void _ZN8S19306C32v2Ev();
extern void _ZN8S19306C32v3Ev();
extern void _ZN8S19306C32v4Ev();
extern void _ZN8S19306C32v5Ev();
extern void _ZN8S19306C32v6Ev();
extern void _ZN8S19306C32v7Ev();
extern void _ZN8S19306C32v8Ev();
extern void _ZN8S19306C23v25Ev();
extern void _ZN8S19306C23v26Ev();
extern void _ZN8S19306C23v27Ev();
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C63v11Ev();
extern void _ZN8S19306C63v12Ev();
extern void _ZN8S19306C53v13Ev();
extern void _ZN8S19306C53v14Ev();
extern void _ZN8S19306C53v15Ev();
extern void _ZN8S19306C53v16Ev();
extern void _ZN8S19306C43v22Ev();
extern void _ZN8S19306C43v23Ev();
extern void _ZN8S19306C43v24Ev();
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY vtc_S19306C2[] = {
  ABISELECT(224,164),
  ABISELECT(216,160),
  ABISELECT(216,160),
  ABISELECT(128,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN8S19306C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19306C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v25Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v26Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v27Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-128,-112),
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v24Ev,
  ABISELECT(-176,-136),
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-216,-160),
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
  0,
  ABISELECT(-224,-164),
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19306C2[];
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C63v11Ev();
extern void _ZN8S19306C63v12Ev();
extern void _ZN8S19306C53v13Ev();
extern void _ZN8S19306C53v14Ev();
extern void _ZN8S19306C53v15Ev();
extern void _ZN8S19306C53v16Ev();
extern void _ZN8S19306C43v22Ev();
extern void _ZN8S19306C43v23Ev();
extern void _ZN8S19306C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C4__8S19306C2[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v24Ev,
};
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C8__8S19306C4__8S19306C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C4__8S19306C2[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C8__8S19306C2[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C8[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C8__8S19306C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19306C8[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern void _ZN8S19306C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C9__8S19306C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C9__8S19306C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
static  VTT_ENTRY vtt_S19306C2[] = {
  {&(_ZTV8S19306C2[6]),  6,65},
  {&(_ZTV8S19306C2[34]),  34,65},
  {&(_ZTV8S19306C2[47]),  47,65},
  {&(_ZTV8S19306C2[57]),  57,65},
  {&(_ZTV8S19306C2[57]),  57,65},
  {&(_ZTV8S19306C2[64]),  64,65},
  {&(_tg__ZTV8S19306C4__8S19306C2[5]),  5,16},
  {&(_tg__ZTV8S19306C8__8S19306C4__8S19306C2[8]),  8,12},
  {&(_tg__ZTV8S19306C8__8S19306C4__8S19306C2[8]),  8,12},
  {&(_tg__ZTV9S19306C10__8S19306C4__8S19306C2[3]),  3,4},
  {&(_tg__ZTV8S19306C8__8S19306C2[5]),  5,9},
  {&(_tg__ZTV8S19306C8__8S19306C2[5]),  5,9},
  {&(_tg__ZTV9S19306C10__8S19306C8__8S19306C2[3]),  3,4},
  {&(_tg__ZTV8S19306C9__8S19306C2[3]),  3,4},
  {&(_tg__ZTV9S19306C10__8S19306C9__8S19306C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19306C2[];
extern  VTBL_ENTRY _ZTV8S19306C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C2[];
Class_Descriptor cd_S19306C2 = {  "S19306C2", // class name
  bases_S19306C2, 9,
  &(vtc_S19306C2[0]), // expected_vtbl_contents
  &(vtt_S19306C2[0]), // expected_vtt_contents
  ABISELECT(256,176), // object size
  NSPAIRA(_ZTI8S19306C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19306C2),65, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19306C2),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19306C12  : S19306C10 , S19306C9 {
  int s19306c12f0;
  virtual  ~S19306C12(); // _ZN9S19306C12D2Ev
  virtual void  v28(); // _ZN9S19306C123v28Ev
  S19306C12(); // tgen
};
//SIG(-1 S19306C12) C1{ BC2{ v2 FC3{ v4 v5} Fp} BC4{ VBC2 v3} vd v1 Fi}


 S19306C12 ::~S19306C12(){ note_dtor("S19306C12", this);}
void  S19306C12 ::v28(){vfunc_called(this, "_ZN9S19306C123v28Ev");}
S19306C12 ::S19306C12(){ note_ctor("S19306C12", this);} // tgen

static void Test_S19306C12()
{
  extern Class_Descriptor cd_S19306C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19306C12, buf);
    S19306C12 *dp, &lv = *(dp=new (buf) S19306C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19306C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19306C12)");
    /*is_ambiguous_... S19306C12::S19306C10 */ AMB_check_base_class_offset(lv, (S19306C10*), 0, "S19306C12");
    check_base_class_offset(lv, (S19306C10*)(S19306C9*), ABISELECT(40,20), "S19306C12");
    check_base_class_offset(lv, (S19306C9*), ABISELECT(24,12), "S19306C12");
    check_field_offset(lv, s19306c12f0, ABISELECT(32,16), "S19306C12.s19306c12f0");
    test_class_info(&lv, &cd_S19306C12);
    dp->~S19306C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C12(Test_S19306C12, "S19306C12", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S19306C12C1Ev();
extern void _ZN9S19306C12D2Ev();
Name_Map name_map_S19306C12[] = {
  NSPAIR(_ZN9S19306C12C1Ev),
  NSPAIR(_ZN9S19306C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19306C10;
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
extern Class_Descriptor cd_S19306C10;
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
extern Class_Descriptor cd_S19306C9;
extern VTBL_ENTRY _ZTI8S19306C9[];
extern  VTBL_ENTRY _ZTV8S19306C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C9[];
static Base_Class bases_S19306C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19306C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S19306C10,    ABISELECT(40,20), //bcp->offset
    11, //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
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19306C9,    ABISELECT(24,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI9S19306C12[];
extern void _ZN9S19306C103v17Ev();
extern void _ZN9S19306C12D1Ev();
extern void _ZN9S19306C12D0Ev();
extern void _ZN9S19306C123v28Ev();
extern void _ZN8S19306C93v18Ev();
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY vtc_S19306C12[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19306C12[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19306C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19306C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19306C123v28Ev,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19306C12[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19306C12[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern VTBL_ENTRY _ZTV9S19306C12[];
extern void _ZN8S19306C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C9__9S19306C12[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C9__9S19306C12[] = {
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
static  VTT_ENTRY vtt_S19306C12[] = {
  {&(_ZTV9S19306C12[3]),  3,15},
  {&(_tg__ZTV8S19306C9__9S19306C12[3]),  3,4},
  {&(_tg__ZTV9S19306C10__8S19306C9__9S19306C12[3]),  3,4},
  {&(_ZTV9S19306C12[10]),  10,15},
  {&(_ZTV9S19306C12[14]),  14,15},
};
extern VTBL_ENTRY _ZTI9S19306C12[];
extern  VTBL_ENTRY _ZTV9S19306C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19306C12[];
Class_Descriptor cd_S19306C12 = {  "S19306C12", // class name
  bases_S19306C12, 3,
  &(vtc_S19306C12[0]), // expected_vtbl_contents
  &(vtt_S19306C12[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S19306C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19306C12),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19306C12),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19306C1  : virtual S19306C2 , virtual S19306C12 {
  int s19306c1f0;
  virtual void  v1(); // _ZN8S19306C12v1Ev
  ~S19306C1(); // tgen
  S19306C1(); // tgen
};
//SIG(1 S19306C1) C1{ VBC2{ BC3{ vd v2 v3 v4 v5 v6 v7 v8 FL[9]} VBC4{ BC5{ BC6{ BC7{ v9 v10 Fp FD Fi} v11 v12} BC7 v13 v14 v15 v16} VBC8{ VBC9{ VBC10{ v17 FC11{ v29 v30} Fp} v18} v19 v20 v21} v22 v23 v24} v25 v26 v27 FL[2] FD Fs Fi} VBC12{ BC10 BC9 vd v28 Fi} v1 Fi}


void  S19306C1 ::v1(){vfunc_called(this, "_ZN8S19306C12v1Ev");}
S19306C1 ::~S19306C1(){ note_dtor("S19306C1", this);} // tgen
S19306C1 ::S19306C1(){ note_ctor("S19306C1", this);} // tgen

static void Test_S19306C1()
{
  extern Class_Descriptor cd_S19306C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,51)];
    init_test(&cd_S19306C1, buf);
    S19306C1 *dp, &lv = *(dp=new (buf) S19306C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,200), "sizeof(S19306C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19306C1)");
    check_base_class_offset(lv, (S19306C3*)(S19306C2*), ABISELECT(16,8), "S19306C1");
    check_base_class_offset(lv, (S19306C7*)(S19306C6*)(S19306C5*)(S19306C4*), ABISELECT(144,120), "S19306C1");
    check_base_class_offset(lv, (S19306C6*)(S19306C5*)(S19306C4*), ABISELECT(144,120), "S19306C1");
    /*is_ambiguous_... S19306C5::S19306C7 */ AMB_check_base_class_offset(lv, (S19306C7*)(S19306C5*)(S19306C4*), ABISELECT(192,144), "S19306C1");
    check_base_class_offset(lv, (S19306C5*)(S19306C4*), ABISELECT(144,120), "S19306C1");
    /*is_ambiguous_... S19306C1::S19306C9 */ AMB_check_base_class_offset(lv, (S19306C10*)(S19306C9*), ABISELECT(232,168), "S19306C1");
    check_base_class_offset(lv, (S19306C10*)(S19306C9*)(S19306C12*), ABISELECT(232,168), "S19306C1");
    check_base_class_offset(lv, (S19306C9*)(S19306C8*), 0, "S19306C1");
    check_base_class_offset(lv, (S19306C8*)(S19306C4*), 0, "S19306C1");
    check_base_class_offset(lv, (S19306C4*)(S19306C2*), ABISELECT(144,120), "S19306C1");
    check_base_class_offset(lv, (S19306C2*), ABISELECT(16,8), "S19306C1");
    /*is_ambiguous_... S19306C12::S19306C10 */ AMB_check_base_class_offset(lv, (S19306C10*)(S19306C12*), ABISELECT(256,180), "S19306C1");
    check_base_class_offset(lv, (S19306C9*)(S19306C12*), ABISELECT(280,192), "S19306C1");
    check_base_class_offset(lv, (S19306C12*), ABISELECT(256,180), "S19306C1");
    check_field_offset(lv, s19306c1f0, ABISELECT(8,4), "S19306C1.s19306c1f0");
    test_class_info(&lv, &cd_S19306C1);
    dp->~S19306C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19306C1(Test_S19306C1, "S19306C1", ABISELECT(304,200));

#else // __cplusplus

extern void _ZN8S19306C1C1Ev();
extern void _ZN8S19306C1D1Ev();
Name_Map name_map_S19306C1[] = {
  NSPAIR(_ZN8S19306C1C1Ev),
  NSPAIR(_ZN8S19306C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19306C3;
extern VTBL_ENTRY _ZTI8S19306C3[];
extern  VTBL_ENTRY _ZTV8S19306C3[];
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
extern Class_Descriptor cd_S19306C6;
extern VTBL_ENTRY _ZTI8S19306C6[];
extern  VTBL_ENTRY _ZTV8S19306C6[];
extern Class_Descriptor cd_S19306C7;
extern VTBL_ENTRY _ZTI8S19306C7[];
extern  VTBL_ENTRY _ZTV8S19306C7[];
extern Class_Descriptor cd_S19306C5;
extern VTBL_ENTRY _ZTI8S19306C5[];
extern  VTBL_ENTRY _ZTV8S19306C5[];
extern Class_Descriptor cd_S19306C10;
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
extern Class_Descriptor cd_S19306C9;
extern VTBL_ENTRY _ZTI8S19306C9[];
extern  VTBL_ENTRY _ZTV8S19306C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C9[];
extern Class_Descriptor cd_S19306C8;
extern VTBL_ENTRY _ZTI8S19306C8[];
extern  VTBL_ENTRY _ZTV8S19306C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C8[];
extern Class_Descriptor cd_S19306C4;
extern VTBL_ENTRY _ZTI8S19306C4[];
extern  VTBL_ENTRY _ZTV8S19306C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C4[];
extern Class_Descriptor cd_S19306C2;
extern VTBL_ENTRY _ZTI8S19306C2[];
extern  VTBL_ENTRY _ZTV8S19306C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C2[];
extern Class_Descriptor cd_S19306C10;
extern VTBL_ENTRY _ZTI9S19306C10[];
extern  VTBL_ENTRY _ZTV9S19306C10[];
extern Class_Descriptor cd_S19306C9;
extern VTBL_ENTRY _ZTI8S19306C9[];
extern  VTBL_ENTRY _ZTV8S19306C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C9[];
extern Class_Descriptor cd_S19306C12;
extern VTBL_ENTRY _ZTI9S19306C12[];
extern  VTBL_ENTRY _ZTV9S19306C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19306C12[];
static Base_Class bases_S19306C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19306C3,    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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19306C7,    ABISELECT(144,120), //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S19306C6,    ABISELECT(144,120), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S19306C7,    ABISELECT(192,144), //bcp->offset
    75, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19306C5,    ABISELECT(144,120), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S19306C10,    ABISELECT(232,168), //bcp->offset
    79, //bcp->virtual_function_table_offset
    3, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19306C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19306C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19306C4,    ABISELECT(144,120), //bcp->offset
    48, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19306C2,    ABISELECT(16,8), //bcp->offset
    19, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19306C10,    ABISELECT(256,180), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S19306C9,    ABISELECT(280,192), //bcp->offset
    94, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19306C12,    ABISELECT(256,180), //bcp->offset
    83, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19306C1[];
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
extern void _ZN8S19306C12v1Ev();
extern void _ZN8S19306C1D1Ev();
extern void _ZN8S19306C1D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S19306C1D1Ev,_ZTv0_n28_N8S19306C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19306C1D1Ev,_ZThn8_N8S19306C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19306C1D0Ev,_ZTv0_n28_N8S19306C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19306C1D0Ev,_ZThn8_N8S19306C1D0Ev)() __attribute__((weak));
extern void _ZN8S19306C32v2Ev();
extern void _ZN8S19306C32v3Ev();
extern void _ZN8S19306C32v4Ev();
extern void _ZN8S19306C32v5Ev();
extern void _ZN8S19306C32v6Ev();
extern void _ZN8S19306C32v7Ev();
extern void _ZN8S19306C32v8Ev();
extern void _ZN8S19306C23v25Ev();
extern void _ZN8S19306C23v26Ev();
extern void _ZN8S19306C23v27Ev();
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C63v11Ev();
extern void _ZN8S19306C63v12Ev();
extern void _ZN8S19306C53v13Ev();
extern void _ZN8S19306C53v14Ev();
extern void _ZN8S19306C53v15Ev();
extern void _ZN8S19306C53v16Ev();
extern void _ZN8S19306C43v22Ev();
extern void _ZN8S19306C43v23Ev();
extern void _ZN8S19306C43v24Ev();
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN9S19306C103v17Ev();
extern void _ZN9S19306C103v17Ev();
extern void ABISELECT(_ZTv0_n40_N8S19306C1D1Ev,_ZTv0_n20_N8S19306C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S19306C1D1Ev,_ZThn180_N8S19306C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19306C1D0Ev,_ZTv0_n20_N8S19306C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S19306C1D0Ev,_ZThn180_N8S19306C1D0Ev)() __attribute__((weak));
extern void _ZN9S19306C123v28Ev();
extern void _ZN8S19306C93v18Ev();
static  VTBL_ENTRY vtc_S19306C1[] = {
  ABISELECT(256,180),
  0,
  ABISELECT(144,120),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(232,168),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C1[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19306C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19306C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19306C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(216,160),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(128,112),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19306C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19306C1D1Ev,_ZTv0_n28_N8S19306C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19306C1D0Ev,_ZTv0_n28_N8S19306C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19306C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v25Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v26Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v27Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  ABISELECT(-144,-120),
  ABISELECT(-144,-120),
  ABISELECT(-144,-120),
  (VTBL_ENTRY)&(_ZTI8S19306C1[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v24Ev,
  ABISELECT(-192,-144),
  (VTBL_ENTRY)&(_ZTI8S19306C1[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  0,
  ABISELECT(-232,-168),
  (VTBL_ENTRY)&(_ZTI8S19306C1[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
  ABISELECT(24,12),
  0,
  ABISELECT(-256,-180),
  0,
  ABISELECT(-24,-12),
  ABISELECT(-256,-180),
  (VTBL_ENTRY)&(_ZTI8S19306C1[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19306C1D1Ev,_ZTv0_n20_N8S19306C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19306C1D0Ev,_ZTv0_n20_N8S19306C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19306C123v28Ev,
  ABISELECT(-48,-24),
  ABISELECT(-280,-192),
  (VTBL_ENTRY)&(_ZTI8S19306C1[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
};
extern VTBL_ENTRY _ZTV8S19306C1[];
extern void _ZN8S19306C2D1Ev();
extern void _ZN8S19306C2D0Ev();
extern void _ZN8S19306C32v2Ev();
extern void _ZN8S19306C32v3Ev();
extern void _ZN8S19306C32v4Ev();
extern void _ZN8S19306C32v5Ev();
extern void _ZN8S19306C32v6Ev();
extern void _ZN8S19306C32v7Ev();
extern void _ZN8S19306C32v8Ev();
extern void _ZN8S19306C23v25Ev();
extern void _ZN8S19306C23v26Ev();
extern void _ZN8S19306C23v27Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C2__8S19306C1[] = {
  ABISELECT(216,160),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(128,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN8S19306C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19306C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19306C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v25Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v26Ev,
  (VTBL_ENTRY)&_ZN8S19306C23v27Ev,
};
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C63v11Ev();
extern void _ZN8S19306C63v12Ev();
extern void _ZN8S19306C53v13Ev();
extern void _ZN8S19306C53v14Ev();
extern void _ZN8S19306C53v15Ev();
extern void _ZN8S19306C53v16Ev();
extern void _ZN8S19306C43v22Ev();
extern void _ZN8S19306C43v23Ev();
extern void _ZN8S19306C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C4__8S19306C2__8S19306C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  ABISELECT(-144,-120),
  ABISELECT(-144,-120),
  ABISELECT(-128,-112),
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v24Ev,
};
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C78S19306C58S19306C4__A1__8S19306C2__8S19306C1[] = {
  ABISELECT(-176,-136),
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
};
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C8__8S19306C2__8S19306C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(232,168),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C2__8S19306C1[] = {
  0,
  ABISELECT(-216,-160),
  (VTBL_ENTRY)&(_ZTI8S19306C2[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern void _ZN8S19306C72v9Ev();
extern void _ZN8S19306C73v10Ev();
extern void _ZN8S19306C63v11Ev();
extern void _ZN8S19306C63v12Ev();
extern void _ZN8S19306C53v13Ev();
extern void _ZN8S19306C53v14Ev();
extern void _ZN8S19306C53v15Ev();
extern void _ZN8S19306C53v16Ev();
extern void _ZN8S19306C43v22Ev();
extern void _ZN8S19306C43v23Ev();
extern void _ZN8S19306C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C4__8S19306C1[] = {
  ABISELECT(88,48),
  ABISELECT(-144,-120),
  ABISELECT(-144,-120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN8S19306C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19306C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19306C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19306C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19306C43v24Ev,
};
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C8__8S19306C4__8S19306C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(232,168),
  ABISELECT(144,120),
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C4__8S19306C1[] = {
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19306C4[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern void _ZN8S19306C93v18Ev();
extern void _ZN8S19306C83v19Ev();
extern void _ZN8S19306C83v20Ev();
extern void _ZN8S19306C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C8__8S19306C1[] = {
  0,
  0,
  ABISELECT(232,168),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C8[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19306C83v21Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C8__8S19306C1[] = {
  0,
  ABISELECT(-232,-168),
  (VTBL_ENTRY)&(_ZTI8S19306C8[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern void _ZN8S19306C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C9__8S19306C1[] = {
  ABISELECT(232,168),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C9__8S19306C1[] = {
  0,
  ABISELECT(-232,-168),
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern void _ZN9S19306C103v17Ev();
extern void _ZN9S19306C12D1Ev();
extern void _ZN9S19306C12D0Ev();
extern void _ZN9S19306C123v28Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C12__8S19306C1[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19306C12[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19306C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19306C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19306C123v28Ev,
};
extern void _ZN8S19306C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C99S19306C12__A1__8S19306C1[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__8S19306C99S19306C12__A1__8S19306C1[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19306C9[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
extern void _ZN8S19306C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19306C9__9S19306C12__8S19306C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19306C12[0]),
  (VTBL_ENTRY)&_ZN8S19306C93v18Ev,
};
extern void _ZN9S19306C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19306C10__A1__9S19306C12__8S19306C1[] = {
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19306C12[0]),
  (VTBL_ENTRY)&_ZN9S19306C103v17Ev,
};
static  VTT_ENTRY vtt_S19306C1[] = {
  {&(_ZTV8S19306C1[12]),  12,98},
  {&(_ZTV8S19306C1[36]),  36,98},
  {&(_ZTV8S19306C1[64]),  64,98},
  {&(_ZTV8S19306C1[77]),  77,98},
  {&(_ZTV8S19306C1[12]),  12,98},
  {&(_ZTV8S19306C1[12]),  12,98},
  {&(_ZTV8S19306C1[82]),  82,98},
  {&(_ZTV8S19306C1[90]),  90,98},
  {&(_ZTV8S19306C1[97]),  97,98},
  {&(_tg__ZTV8S19306C2__8S19306C1[6]),  6,18},
  {&(_tg__ZTV8S19306C4__8S19306C2__8S19306C1[16]),  16,27},
  {&(_tg__ZTV8S19306C78S19306C58S19306C4__A1__8S19306C2__8S19306C1[2]),  2,4},
  {&(_tg__ZTV8S19306C8__8S19306C2__8S19306C1[8]),  8,12},
  {&(_tg__ZTV8S19306C8__8S19306C2__8S19306C1[8]),  8,12},
  {&(_tg__ZTV9S19306C10__8S19306C2__8S19306C1[3]),  3,4},
  {&(_tg__ZTV8S19306C4__8S19306C1[5]),  5,16},
  {&(_tg__ZTV8S19306C8__8S19306C4__8S19306C1[8]),  8,12},
  {&(_tg__ZTV8S19306C8__8S19306C4__8S19306C1[8]),  8,12},
  {&(_tg__ZTV9S19306C10__8S19306C4__8S19306C1[3]),  3,4},
  {&(_tg__ZTV8S19306C8__8S19306C1[5]),  5,9},
  {&(_tg__ZTV8S19306C8__8S19306C1[5]),  5,9},
  {&(_tg__ZTV9S19306C10__8S19306C8__8S19306C1[3]),  3,4},
  {&(_tg__ZTV8S19306C9__8S19306C1[3]),  3,4},
  {&(_tg__ZTV9S19306C10__8S19306C9__8S19306C1[3]),  3,4},
  {&(_tg__ZTV9S19306C12__8S19306C1[3]),  3,7},
  {&(_tg__ZTV8S19306C99S19306C12__A1__8S19306C1[3]),  3,4},
  {&(_tg__ZTV9S19306C10__8S19306C99S19306C12__A1__8S19306C1[3]),  3,4},
  {&(_tg__ZTV8S19306C9__9S19306C12__8S19306C1[3]),  3,4},
  {&(_tg__ZTV9S19306C10__A1__9S19306C12__8S19306C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19306C1[];
extern  VTBL_ENTRY _ZTV8S19306C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19306C1[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19306C1D0Ev,_ZTv0_n20_N8S19306C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19306C1D0Ev,_ZThn180_N8S19306C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19306C1D1Ev,_ZTv0_n20_N8S19306C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19306C1D1Ev,_ZThn180_N8S19306C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19306C1D0Ev,_ZTv0_n28_N8S19306C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19306C1D0Ev,_ZThn8_N8S19306C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19306C1D1Ev,_ZTv0_n28_N8S19306C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19306C1D1Ev,_ZThn8_N8S19306C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19306C1 = {  "S19306C1", // class name
  bases_S19306C1, 13,
  &(vtc_S19306C1[0]), // expected_vtbl_contents
  &(vtt_S19306C1[0]), // expected_vtt_contents
  ABISELECT(304,200), // object size
  NSPAIRA(_ZTI8S19306C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19306C1),98, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19306C1),29, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19305C3  {
  __tsi64 s19305c3f0[9];
  virtual  ~S19305C3(); // _ZN8S19305C3D1Ev
  virtual void  v2(); // _ZN8S19305C32v2Ev
  virtual void  v3(); // _ZN8S19305C32v3Ev
  virtual void  v4(); // _ZN8S19305C32v4Ev
  virtual void  v5(); // _ZN8S19305C32v5Ev
  virtual void  v6(); // _ZN8S19305C32v6Ev
  virtual void  v7(); // _ZN8S19305C32v7Ev
  virtual void  v8(); // _ZN8S19305C32v8Ev
  S19305C3(); // tgen
};
//SIG(-1 S19305C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 FL[9]}


 S19305C3 ::~S19305C3(){ note_dtor("S19305C3", this);}
void  S19305C3 ::v2(){vfunc_called(this, "_ZN8S19305C32v2Ev");}
void  S19305C3 ::v3(){vfunc_called(this, "_ZN8S19305C32v3Ev");}
void  S19305C3 ::v4(){vfunc_called(this, "_ZN8S19305C32v4Ev");}
void  S19305C3 ::v5(){vfunc_called(this, "_ZN8S19305C32v5Ev");}
void  S19305C3 ::v6(){vfunc_called(this, "_ZN8S19305C32v6Ev");}
void  S19305C3 ::v7(){vfunc_called(this, "_ZN8S19305C32v7Ev");}
void  S19305C3 ::v8(){vfunc_called(this, "_ZN8S19305C32v8Ev");}
S19305C3 ::S19305C3(){ note_ctor("S19305C3", this);} // tgen

static void Test_S19305C3()
{
  extern Class_Descriptor cd_S19305C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,20)];
    init_test(&cd_S19305C3, buf);
    S19305C3 *dp, &lv = *(dp=new (buf) S19305C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,76), "sizeof(S19305C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19305C3)");
    check_field_offset(lv, s19305c3f0, ABISELECT(8,4), "S19305C3.s19305c3f0");
    test_class_info(&lv, &cd_S19305C3);
    dp->~S19305C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C3(Test_S19305C3, "S19305C3", ABISELECT(80,76));

#else // __cplusplus

extern void _ZN8S19305C3C1Ev();
extern void _ZN8S19305C3D1Ev();
Name_Map name_map_S19305C3[] = {
  NSPAIR(_ZN8S19305C3C1Ev),
  NSPAIR(_ZN8S19305C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19305C3[];
extern void _ZN8S19305C3D1Ev();
extern void _ZN8S19305C3D0Ev();
extern void _ZN8S19305C32v2Ev();
extern void _ZN8S19305C32v3Ev();
extern void _ZN8S19305C32v4Ev();
extern void _ZN8S19305C32v5Ev();
extern void _ZN8S19305C32v6Ev();
extern void _ZN8S19305C32v7Ev();
extern void _ZN8S19305C32v8Ev();
static  VTBL_ENTRY vtc_S19305C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C3[0]),
  (VTBL_ENTRY)&_ZN8S19305C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19305C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S19305C3[];
extern  VTBL_ENTRY _ZTV8S19305C3[];
Class_Descriptor cd_S19305C3 = {  "S19305C3", // class name
  0,0,//no base classes
  &(vtc_S19305C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,76), // object size
  NSPAIRA(_ZTI8S19305C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19305C3),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  S19305C7  {
  void *s19305c7f0;
  long double s19305c7f1;
  int s19305c7f2;
  virtual void  v9(); // _ZN8S19305C72v9Ev
  virtual void  v10(); // _ZN8S19305C73v10Ev
  ~S19305C7(); // tgen
  S19305C7(); // tgen
};
//SIG(-1 S19305C7) C1{ v1 v2 Fp FD Fi}


void  S19305C7 ::v9(){vfunc_called(this, "_ZN8S19305C72v9Ev");}
void  S19305C7 ::v10(){vfunc_called(this, "_ZN8S19305C73v10Ev");}
S19305C7 ::~S19305C7(){ note_dtor("S19305C7", this);} // tgen
S19305C7 ::S19305C7(){ note_ctor("S19305C7", this);} // tgen

static void Test_S19305C7()
{
  extern Class_Descriptor cd_S19305C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19305C7, buf);
    S19305C7 *dp, &lv = *(dp=new (buf) S19305C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19305C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19305C7)");
    check_field_offset(lv, s19305c7f0, ABISELECT(8,4), "S19305C7.s19305c7f0");
    check_field_offset(lv, s19305c7f1, ABISELECT(16,8), "S19305C7.s19305c7f1");
    check_field_offset(lv, s19305c7f2, ABISELECT(32,20), "S19305C7.s19305c7f2");
    test_class_info(&lv, &cd_S19305C7);
    dp->~S19305C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C7(Test_S19305C7, "S19305C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19305C7C1Ev();
extern void _ZN8S19305C7D1Ev();
Name_Map name_map_S19305C7[] = {
  NSPAIR(_ZN8S19305C7C1Ev),
  NSPAIR(_ZN8S19305C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19305C7[];
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
static  VTBL_ENTRY vtc_S19305C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C7[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
};
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
Class_Descriptor cd_S19305C7 = {  "S19305C7", // class name
  0,0,//no base classes
  &(vtc_S19305C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19305C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19305C7),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  S19305C6  : S19305C7 {
  virtual void  v11(); // _ZN8S19305C63v11Ev
  virtual void  v12(); // _ZN8S19305C63v12Ev
  ~S19305C6(); // tgen
  S19305C6(); // tgen
};
//SIG(-1 S19305C6) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S19305C6 ::v11(){vfunc_called(this, "_ZN8S19305C63v11Ev");}
void  S19305C6 ::v12(){vfunc_called(this, "_ZN8S19305C63v12Ev");}
S19305C6 ::~S19305C6(){ note_dtor("S19305C6", this);} // tgen
S19305C6 ::S19305C6(){ note_ctor("S19305C6", this);} // tgen

static void Test_S19305C6()
{
  extern Class_Descriptor cd_S19305C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19305C6, buf);
    S19305C6 *dp, &lv = *(dp=new (buf) S19305C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19305C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19305C6)");
    check_base_class_offset(lv, (S19305C7*), 0, "S19305C6");
    test_class_info(&lv, &cd_S19305C6);
    dp->~S19305C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C6(Test_S19305C6, "S19305C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19305C6C1Ev();
extern void _ZN8S19305C6D1Ev();
Name_Map name_map_S19305C6[] = {
  NSPAIR(_ZN8S19305C6C1Ev),
  NSPAIR(_ZN8S19305C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
static Base_Class bases_S19305C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19305C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19305C6[];
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C63v11Ev();
extern void _ZN8S19305C63v12Ev();
static  VTBL_ENTRY vtc_S19305C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C6[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v12Ev,
};
extern VTBL_ENTRY _ZTI8S19305C6[];
extern  VTBL_ENTRY _ZTV8S19305C6[];
Class_Descriptor cd_S19305C6 = {  "S19305C6", // class name
  bases_S19305C6, 1,
  &(vtc_S19305C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19305C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19305C6),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  S19305C5  : S19305C6 , S19305C7 {
  virtual void  v13(); // _ZN8S19305C53v13Ev
  virtual void  v14(); // _ZN8S19305C53v14Ev
  virtual void  v15(); // _ZN8S19305C53v15Ev
  virtual void  v16(); // _ZN8S19305C53v16Ev
  ~S19305C5(); // tgen
  S19305C5(); // tgen
};
//SIG(-1 S19305C5) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S19305C5 ::v13(){vfunc_called(this, "_ZN8S19305C53v13Ev");}
void  S19305C5 ::v14(){vfunc_called(this, "_ZN8S19305C53v14Ev");}
void  S19305C5 ::v15(){vfunc_called(this, "_ZN8S19305C53v15Ev");}
void  S19305C5 ::v16(){vfunc_called(this, "_ZN8S19305C53v16Ev");}
S19305C5 ::~S19305C5(){ note_dtor("S19305C5", this);} // tgen
S19305C5 ::S19305C5(){ note_ctor("S19305C5", this);} // tgen

static void Test_S19305C5()
{
  extern Class_Descriptor cd_S19305C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S19305C5, buf);
    S19305C5 *dp, &lv = *(dp=new (buf) S19305C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S19305C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19305C5)");
    check_base_class_offset(lv, (S19305C7*)(S19305C6*), 0, "S19305C5");
    check_base_class_offset(lv, (S19305C6*), 0, "S19305C5");
    /*is_ambiguous_... S19305C5::S19305C7 */ AMB_check_base_class_offset(lv, (S19305C7*), ABISELECT(48,24), "S19305C5");
    test_class_info(&lv, &cd_S19305C5);
    dp->~S19305C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C5(Test_S19305C5, "S19305C5", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S19305C5C1Ev();
extern void _ZN8S19305C5D1Ev();
Name_Map name_map_S19305C5[] = {
  NSPAIR(_ZN8S19305C5C1Ev),
  NSPAIR(_ZN8S19305C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
extern Class_Descriptor cd_S19305C6;
extern VTBL_ENTRY _ZTI8S19305C6[];
extern  VTBL_ENTRY _ZTV8S19305C6[];
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
static Base_Class bases_S19305C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19305C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19305C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S19305C7,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_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 _ZTI8S19305C5[];
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C63v11Ev();
extern void _ZN8S19305C63v12Ev();
extern void _ZN8S19305C53v13Ev();
extern void _ZN8S19305C53v14Ev();
extern void _ZN8S19305C53v15Ev();
extern void _ZN8S19305C53v16Ev();
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
static  VTBL_ENTRY vtc_S19305C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C5[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v16Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19305C5[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
};
extern VTBL_ENTRY _ZTI8S19305C5[];
extern  VTBL_ENTRY _ZTV8S19305C5[];
Class_Descriptor cd_S19305C5 = {  "S19305C5", // class name
  bases_S19305C5, 3,
  &(vtc_S19305C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S19305C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19305C5),14, //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  S19305C10  {
  ::S1400C17_nt s19305c10f0;
  void *s19305c10f1;
  virtual void  v17(); // _ZN9S19305C103v17Ev
  ~S19305C10(); // tgen
  S19305C10(); // tgen
};
//SIG(-1 S19305C10) C1{ v1 FC2{ v2 v3} Fp}


void  S19305C10 ::v17(){vfunc_called(this, "_ZN9S19305C103v17Ev");}
S19305C10 ::~S19305C10(){ note_dtor("S19305C10", this);} // tgen
S19305C10 ::S19305C10(){ note_ctor("S19305C10", this);} // tgen

static void Test_S19305C10()
{
  extern Class_Descriptor cd_S19305C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19305C10, buf);
    S19305C10 *dp, &lv = *(dp=new (buf) S19305C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19305C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19305C10)");
    check_field_offset(lv, s19305c10f0, ABISELECT(8,4), "S19305C10.s19305c10f0");
    check_field_offset(lv, s19305c10f1, ABISELECT(16,8), "S19305C10.s19305c10f1");
    test_class_info(&lv, &cd_S19305C10);
    dp->~S19305C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C10(Test_S19305C10, "S19305C10", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19305C10C1Ev();
extern void _ZN9S19305C10D1Ev();
Name_Map name_map_S19305C10[] = {
  NSPAIR(_ZN9S19305C10C1Ev),
  NSPAIR(_ZN9S19305C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19305C10[];
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY vtc_S19305C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19305C10[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
Class_Descriptor cd_S19305C10 = {  "S19305C10", // class name
  0,0,//no base classes
  &(vtc_S19305C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19305C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19305C10),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19305C9  : virtual S19305C10 {
  virtual void  v18(); // _ZN8S19305C93v18Ev
  ~S19305C9(); // tgen
  S19305C9(); // tgen
};
//SIG(-1 S19305C9) C1{ VBC2{ v2 FC3{ v3 v4} Fp} v1}


void  S19305C9 ::v18(){vfunc_called(this, "_ZN8S19305C93v18Ev");}
S19305C9 ::~S19305C9(){ note_dtor("S19305C9", this);} // tgen
S19305C9 ::S19305C9(){ note_ctor("S19305C9", this);} // tgen

static void Test_S19305C9()
{
  extern Class_Descriptor cd_S19305C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19305C9, buf);
    S19305C9 *dp, &lv = *(dp=new (buf) S19305C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19305C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19305C9)");
    check_base_class_offset(lv, (S19305C10*), ABISELECT(8,4), "S19305C9");
    test_class_info(&lv, &cd_S19305C9);
    dp->~S19305C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C9(Test_S19305C9, "S19305C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19305C9C1Ev();
extern void _ZN8S19305C9D1Ev();
Name_Map name_map_S19305C9[] = {
  NSPAIR(_ZN8S19305C9C1Ev),
  NSPAIR(_ZN8S19305C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19305C10;
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
static Base_Class bases_S19305C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19305C10,    ABISELECT(8,4), //bcp->offset
    4, //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 _ZTI8S19305C9[];
extern void _ZN8S19305C93v18Ev();
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY vtc_S19305C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19305C9[];
static  VTT_ENTRY vtt_S19305C9[] = {
  {&(_ZTV8S19305C9[3]),  3,8},
  {&(_ZTV8S19305C9[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S19305C9[];
extern  VTBL_ENTRY _ZTV8S19305C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C9[];
Class_Descriptor cd_S19305C9 = {  "S19305C9", // class name
  bases_S19305C9, 1,
  &(vtc_S19305C9[0]), // expected_vtbl_contents
  &(vtt_S19305C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19305C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19305C9),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19305C9),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  S19305C8  : virtual S19305C9 {
  virtual void  v19(); // _ZN8S19305C83v19Ev
  virtual void  v20(); // _ZN8S19305C83v20Ev
  virtual void  v21(); // _ZN8S19305C83v21Ev
  ~S19305C8(); // tgen
  S19305C8(); // tgen
};
//SIG(-1 S19305C8) C1{ VBC2{ VBC3{ v4 FC4{ v6 v7} Fp} v5} v1 v2 v3}


void  S19305C8 ::v19(){vfunc_called(this, "_ZN8S19305C83v19Ev");}
void  S19305C8 ::v20(){vfunc_called(this, "_ZN8S19305C83v20Ev");}
void  S19305C8 ::v21(){vfunc_called(this, "_ZN8S19305C83v21Ev");}
S19305C8 ::~S19305C8(){ note_dtor("S19305C8", this);} // tgen
S19305C8 ::S19305C8(){ note_ctor("S19305C8", this);} // tgen

static void Test_S19305C8()
{
  extern Class_Descriptor cd_S19305C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19305C8, buf);
    S19305C8 *dp, &lv = *(dp=new (buf) S19305C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19305C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19305C8)");
    check_base_class_offset(lv, (S19305C10*)(S19305C9*), ABISELECT(8,4), "S19305C8");
    check_base_class_offset(lv, (S19305C9*), 0, "S19305C8");
    test_class_info(&lv, &cd_S19305C8);
    dp->~S19305C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C8(Test_S19305C8, "S19305C8", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19305C8C1Ev();
extern void _ZN8S19305C8D1Ev();
Name_Map name_map_S19305C8[] = {
  NSPAIR(_ZN8S19305C8C1Ev),
  NSPAIR(_ZN8S19305C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19305C10;
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
extern Class_Descriptor cd_S19305C9;
extern VTBL_ENTRY _ZTI8S19305C9[];
extern  VTBL_ENTRY _ZTV8S19305C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C9[];
static Base_Class bases_S19305C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19305C10,    ABISELECT(8,4), //bcp->offset
    9, //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
    1, //immediately_derived
  0, 1},
  {&cd_S19305C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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 _ZTI8S19305C8[];
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY vtc_S19305C8[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C8[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19305C8[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19305C8[];
extern void _ZN8S19305C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C9__8S19305C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C9__8S19305C8[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
static  VTT_ENTRY vtt_S19305C8[] = {
  {&(_ZTV8S19305C8[5]),  5,13},
  {&(_ZTV8S19305C8[5]),  5,13},
  {&(_ZTV8S19305C8[12]),  12,13},
  {&(_tg__ZTV8S19305C9__8S19305C8[3]),  3,4},
  {&(_tg__ZTV9S19305C10__8S19305C9__8S19305C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19305C8[];
extern  VTBL_ENTRY _ZTV8S19305C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C8[];
Class_Descriptor cd_S19305C8 = {  "S19305C8", // class name
  bases_S19305C8, 2,
  &(vtc_S19305C8[0]), // expected_vtbl_contents
  &(vtt_S19305C8[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19305C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19305C8),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19305C8),5, //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  S19305C4  : S19305C5 , virtual S19305C8 {
  virtual void  v22(); // _ZN8S19305C43v22Ev
  virtual void  v23(); // _ZN8S19305C43v23Ev
  virtual void  v24(); // _ZN8S19305C43v24Ev
  ~S19305C4(); // tgen
  S19305C4(); // tgen
};
//SIG(-1 S19305C4) C1{ BC2{ BC3{ BC4{ v4 v5 Fp FD Fi} v6 v7} BC4 v8 v9 v10 v11} VBC5{ VBC6{ VBC7{ v12 FC8{ v17 v18} Fp} v13} v14 v15 v16} v1 v2 v3}


void  S19305C4 ::v22(){vfunc_called(this, "_ZN8S19305C43v22Ev");}
void  S19305C4 ::v23(){vfunc_called(this, "_ZN8S19305C43v23Ev");}
void  S19305C4 ::v24(){vfunc_called(this, "_ZN8S19305C43v24Ev");}
S19305C4 ::~S19305C4(){ note_dtor("S19305C4", this);} // tgen
S19305C4 ::S19305C4(){ note_ctor("S19305C4", this);} // tgen

static void Test_S19305C4()
{
  extern Class_Descriptor cd_S19305C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S19305C4, buf);
    S19305C4 *dp, &lv = *(dp=new (buf) S19305C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S19305C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19305C4)");
    check_base_class_offset(lv, (S19305C7*)(S19305C6*)(S19305C5*), 0, "S19305C4");
    check_base_class_offset(lv, (S19305C6*)(S19305C5*), 0, "S19305C4");
    /*is_ambiguous_... S19305C5::S19305C7 */ AMB_check_base_class_offset(lv, (S19305C7*)(S19305C5*), ABISELECT(48,24), "S19305C4");
    check_base_class_offset(lv, (S19305C5*), 0, "S19305C4");
    check_base_class_offset(lv, (S19305C10*)(S19305C9*), ABISELECT(96,52), "S19305C4");
    check_base_class_offset(lv, (S19305C9*)(S19305C8*), ABISELECT(88,48), "S19305C4");
    check_base_class_offset(lv, (S19305C8*), ABISELECT(88,48), "S19305C4");
    test_class_info(&lv, &cd_S19305C4);
    dp->~S19305C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C4(Test_S19305C4, "S19305C4", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S19305C4C1Ev();
extern void _ZN8S19305C4D1Ev();
Name_Map name_map_S19305C4[] = {
  NSPAIR(_ZN8S19305C4C1Ev),
  NSPAIR(_ZN8S19305C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
extern Class_Descriptor cd_S19305C6;
extern VTBL_ENTRY _ZTI8S19305C6[];
extern  VTBL_ENTRY _ZTV8S19305C6[];
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
extern Class_Descriptor cd_S19305C5;
extern VTBL_ENTRY _ZTI8S19305C5[];
extern  VTBL_ENTRY _ZTV8S19305C5[];
extern Class_Descriptor cd_S19305C10;
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
extern Class_Descriptor cd_S19305C9;
extern VTBL_ENTRY _ZTI8S19305C9[];
extern  VTBL_ENTRY _ZTV8S19305C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C9[];
extern Class_Descriptor cd_S19305C8;
extern VTBL_ENTRY _ZTI8S19305C8[];
extern  VTBL_ENTRY _ZTV8S19305C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C8[];
static Base_Class bases_S19305C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19305C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19305C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19305C7,    ABISELECT(48,24), //bcp->offset
    16, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19305C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S19305C10,    ABISELECT(96,52), //bcp->offset
    32, //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
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19305C9,    ABISELECT(88,48), //bcp->offset
    -1, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19305C8,    ABISELECT(88,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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 _ZTI8S19305C4[];
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C63v11Ev();
extern void _ZN8S19305C63v12Ev();
extern void _ZN8S19305C53v13Ev();
extern void _ZN8S19305C53v14Ev();
extern void _ZN8S19305C53v15Ev();
extern void _ZN8S19305C53v16Ev();
extern void _ZN8S19305C43v22Ev();
extern void _ZN8S19305C43v23Ev();
extern void _ZN8S19305C43v24Ev();
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY vtc_S19305C4[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v24Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19305C4[];
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C8__8S19305C4[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C8[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C8__8S19305C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19305C8[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern void _ZN8S19305C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C9__8S19305C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C9__8S19305C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
static  VTT_ENTRY vtt_S19305C4[] = {
  {&(_ZTV8S19305C4[5]),  5,36},
  {&(_ZTV8S19305C4[28]),  28,36},
  {&(_ZTV8S19305C4[28]),  28,36},
  {&(_ZTV8S19305C4[35]),  35,36},
  {&(_tg__ZTV8S19305C8__8S19305C4[5]),  5,9},
  {&(_tg__ZTV8S19305C8__8S19305C4[5]),  5,9},
  {&(_tg__ZTV9S19305C10__8S19305C8__8S19305C4[3]),  3,4},
  {&(_tg__ZTV8S19305C9__8S19305C4[3]),  3,4},
  {&(_tg__ZTV9S19305C10__8S19305C9__8S19305C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19305C4[];
extern  VTBL_ENTRY _ZTV8S19305C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C4[];
Class_Descriptor cd_S19305C4 = {  "S19305C4", // class name
  bases_S19305C4, 7,
  &(vtc_S19305C4[0]), // expected_vtbl_contents
  &(vtt_S19305C4[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S19305C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19305C4),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19305C4),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19305C2  : S19305C3 , virtual S19305C4 {
  long s19305c2f0;
  __tsi64 s19305c2f1;
  long double s19305c2f2;
  short s19305c2f3;
  int s19305c2f4;
  virtual void  v25(); // _ZN8S19305C23v25Ev
  virtual void  v26(); // _ZN8S19305C23v26Ev
  virtual void  v27(); // _ZN8S19305C23v27Ev
  ~S19305C2(); // tgen
  S19305C2(); // tgen
};
//SIG(-1 S19305C2) C1{ BC2{ vd v4 v5 v6 v7 v8 v9 v10 FL[9]} VBC3{ BC4{ BC5{ BC6{ v11 v12 Fp FD Fi} v13 v14} BC6 v15 v16 v17 v18} VBC7{ VBC8{ VBC9{ v19 FC10{ v27 v28} Fp} v20} v21 v22 v23} v24 v25 v26} v1 v2 v3 Fl FL FD Fs Fi}


void  S19305C2 ::v25(){vfunc_called(this, "_ZN8S19305C23v25Ev");}
void  S19305C2 ::v26(){vfunc_called(this, "_ZN8S19305C23v26Ev");}
void  S19305C2 ::v27(){vfunc_called(this, "_ZN8S19305C23v27Ev");}
S19305C2 ::~S19305C2(){ note_dtor("S19305C2", this);} // tgen
S19305C2 ::S19305C2(){ note_ctor("S19305C2", this);} // tgen

static void Test_S19305C2()
{
  extern Class_Descriptor cd_S19305C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,44)];
    init_test(&cd_S19305C2, buf);
    S19305C2 *dp, &lv = *(dp=new (buf) S19305C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,172), "sizeof(S19305C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19305C2)");
    check_base_class_offset(lv, (S19305C3*), 0, "S19305C2");
    check_base_class_offset(lv, (S19305C7*)(S19305C6*)(S19305C5*)(S19305C4*), ABISELECT(128,108), "S19305C2");
    check_base_class_offset(lv, (S19305C6*)(S19305C5*)(S19305C4*), ABISELECT(128,108), "S19305C2");
    /*is_ambiguous_... S19305C5::S19305C7 */ AMB_check_base_class_offset(lv, (S19305C7*)(S19305C5*)(S19305C4*), ABISELECT(176,132), "S19305C2");
    check_base_class_offset(lv, (S19305C5*)(S19305C4*), ABISELECT(128,108), "S19305C2");
    check_base_class_offset(lv, (S19305C10*)(S19305C9*), ABISELECT(224,160), "S19305C2");
    check_base_class_offset(lv, (S19305C9*)(S19305C8*), ABISELECT(216,156), "S19305C2");
    check_base_class_offset(lv, (S19305C8*)(S19305C4*), ABISELECT(216,156), "S19305C2");
    check_base_class_offset(lv, (S19305C4*), ABISELECT(128,108), "S19305C2");
    check_field_offset(lv, s19305c2f0, ABISELECT(80,76), "S19305C2.s19305c2f0");
    check_field_offset(lv, s19305c2f1, ABISELECT(88,80), "S19305C2.s19305c2f1");
    check_field_offset(lv, s19305c2f2, ABISELECT(96,88), "S19305C2.s19305c2f2");
    check_field_offset(lv, s19305c2f3, ABISELECT(112,100), "S19305C2.s19305c2f3");
    check_field_offset(lv, s19305c2f4, ABISELECT(116,104), "S19305C2.s19305c2f4");
    test_class_info(&lv, &cd_S19305C2);
    dp->~S19305C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C2(Test_S19305C2, "S19305C2", ABISELECT(256,172));

#else // __cplusplus

extern void _ZN8S19305C2C1Ev();
extern void _ZN8S19305C2D1Ev();
Name_Map name_map_S19305C2[] = {
  NSPAIR(_ZN8S19305C2C1Ev),
  NSPAIR(_ZN8S19305C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19305C3;
extern VTBL_ENTRY _ZTI8S19305C3[];
extern  VTBL_ENTRY _ZTV8S19305C3[];
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
extern Class_Descriptor cd_S19305C6;
extern VTBL_ENTRY _ZTI8S19305C6[];
extern  VTBL_ENTRY _ZTV8S19305C6[];
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
extern Class_Descriptor cd_S19305C5;
extern VTBL_ENTRY _ZTI8S19305C5[];
extern  VTBL_ENTRY _ZTV8S19305C5[];
extern Class_Descriptor cd_S19305C10;
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
extern Class_Descriptor cd_S19305C9;
extern VTBL_ENTRY _ZTI8S19305C9[];
extern  VTBL_ENTRY _ZTV8S19305C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C9[];
extern Class_Descriptor cd_S19305C8;
extern VTBL_ENTRY _ZTI8S19305C8[];
extern  VTBL_ENTRY _ZTV8S19305C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C8[];
extern Class_Descriptor cd_S19305C4;
extern VTBL_ENTRY _ZTI8S19305C4[];
extern  VTBL_ENTRY _ZTV8S19305C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C4[];
static Base_Class bases_S19305C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19305C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19305C7,    ABISELECT(128,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
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19305C6,    ABISELECT(128,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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19305C7,    ABISELECT(176,132), //bcp->offset
    45, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19305C5,    ABISELECT(128,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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19305C10,    ABISELECT(224,160), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19305C9,    ABISELECT(216,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19305C8,    ABISELECT(216,156), //bcp->offset
    49, //bcp->virtual_function_table_offset
    8, //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
    8, //immediately_derived
  0, 1},
  {&cd_S19305C4,    ABISELECT(128,108), //bcp->offset
    18, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19305C2[];
extern void _ZN8S19305C2D1Ev();
extern void _ZN8S19305C2D0Ev();
extern void _ZN8S19305C32v2Ev();
extern void _ZN8S19305C32v3Ev();
extern void _ZN8S19305C32v4Ev();
extern void _ZN8S19305C32v5Ev();
extern void _ZN8S19305C32v6Ev();
extern void _ZN8S19305C32v7Ev();
extern void _ZN8S19305C32v8Ev();
extern void _ZN8S19305C23v25Ev();
extern void _ZN8S19305C23v26Ev();
extern void _ZN8S19305C23v27Ev();
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C63v11Ev();
extern void _ZN8S19305C63v12Ev();
extern void _ZN8S19305C53v13Ev();
extern void _ZN8S19305C53v14Ev();
extern void _ZN8S19305C53v15Ev();
extern void _ZN8S19305C53v16Ev();
extern void _ZN8S19305C43v22Ev();
extern void _ZN8S19305C43v23Ev();
extern void _ZN8S19305C43v24Ev();
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY vtc_S19305C2[] = {
  ABISELECT(224,160),
  ABISELECT(216,156),
  ABISELECT(216,156),
  ABISELECT(128,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN8S19305C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19305C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v25Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v26Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v27Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-128,-108),
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v24Ev,
  ABISELECT(-176,-132),
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-216,-156),
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
  0,
  ABISELECT(-224,-160),
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19305C2[];
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C63v11Ev();
extern void _ZN8S19305C63v12Ev();
extern void _ZN8S19305C53v13Ev();
extern void _ZN8S19305C53v14Ev();
extern void _ZN8S19305C53v15Ev();
extern void _ZN8S19305C53v16Ev();
extern void _ZN8S19305C43v22Ev();
extern void _ZN8S19305C43v23Ev();
extern void _ZN8S19305C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C4__8S19305C2[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v24Ev,
};
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C8__8S19305C4__8S19305C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C4__8S19305C2[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C8__8S19305C2[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C8[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C8__8S19305C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19305C8[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern void _ZN8S19305C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C9__8S19305C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C9__8S19305C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
static  VTT_ENTRY vtt_S19305C2[] = {
  {&(_ZTV8S19305C2[6]),  6,65},
  {&(_ZTV8S19305C2[34]),  34,65},
  {&(_ZTV8S19305C2[47]),  47,65},
  {&(_ZTV8S19305C2[57]),  57,65},
  {&(_ZTV8S19305C2[57]),  57,65},
  {&(_ZTV8S19305C2[64]),  64,65},
  {&(_tg__ZTV8S19305C4__8S19305C2[5]),  5,16},
  {&(_tg__ZTV8S19305C8__8S19305C4__8S19305C2[8]),  8,12},
  {&(_tg__ZTV8S19305C8__8S19305C4__8S19305C2[8]),  8,12},
  {&(_tg__ZTV9S19305C10__8S19305C4__8S19305C2[3]),  3,4},
  {&(_tg__ZTV8S19305C8__8S19305C2[5]),  5,9},
  {&(_tg__ZTV8S19305C8__8S19305C2[5]),  5,9},
  {&(_tg__ZTV9S19305C10__8S19305C8__8S19305C2[3]),  3,4},
  {&(_tg__ZTV8S19305C9__8S19305C2[3]),  3,4},
  {&(_tg__ZTV9S19305C10__8S19305C9__8S19305C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19305C2[];
extern  VTBL_ENTRY _ZTV8S19305C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C2[];
Class_Descriptor cd_S19305C2 = {  "S19305C2", // class name
  bases_S19305C2, 9,
  &(vtc_S19305C2[0]), // expected_vtbl_contents
  &(vtt_S19305C2[0]), // expected_vtt_contents
  ABISELECT(256,172), // object size
  NSPAIRA(_ZTI8S19305C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19305C2),65, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19305C2),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19305C12  : S19305C10 , S19305C9 {
  int s19305c12f0;
  virtual  ~S19305C12(); // _ZN9S19305C12D2Ev
  virtual void  v28(); // _ZN9S19305C123v28Ev
  S19305C12(); // tgen
};
//SIG(-1 S19305C12) C1{ BC2{ v2 FC3{ v4 v5} Fp} BC4{ VBC2 v3} vd v1 Fi}


 S19305C12 ::~S19305C12(){ note_dtor("S19305C12", this);}
void  S19305C12 ::v28(){vfunc_called(this, "_ZN9S19305C123v28Ev");}
S19305C12 ::S19305C12(){ note_ctor("S19305C12", this);} // tgen

static void Test_S19305C12()
{
  extern Class_Descriptor cd_S19305C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19305C12, buf);
    S19305C12 *dp, &lv = *(dp=new (buf) S19305C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19305C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19305C12)");
    /*is_ambiguous_... S19305C12::S19305C10 */ AMB_check_base_class_offset(lv, (S19305C10*), 0, "S19305C12");
    check_base_class_offset(lv, (S19305C10*)(S19305C9*), ABISELECT(40,20), "S19305C12");
    check_base_class_offset(lv, (S19305C9*), ABISELECT(24,12), "S19305C12");
    check_field_offset(lv, s19305c12f0, ABISELECT(32,16), "S19305C12.s19305c12f0");
    test_class_info(&lv, &cd_S19305C12);
    dp->~S19305C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C12(Test_S19305C12, "S19305C12", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN9S19305C12C1Ev();
extern void _ZN9S19305C12D2Ev();
Name_Map name_map_S19305C12[] = {
  NSPAIR(_ZN9S19305C12C1Ev),
  NSPAIR(_ZN9S19305C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19305C10;
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
extern Class_Descriptor cd_S19305C10;
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
extern Class_Descriptor cd_S19305C9;
extern VTBL_ENTRY _ZTI8S19305C9[];
extern  VTBL_ENTRY _ZTV8S19305C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C9[];
static Base_Class bases_S19305C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19305C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S19305C10,    ABISELECT(40,20), //bcp->offset
    11, //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
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19305C9,    ABISELECT(24,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //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 _ZTI9S19305C12[];
extern void _ZN9S19305C103v17Ev();
extern void _ZN9S19305C12D1Ev();
extern void _ZN9S19305C12D0Ev();
extern void _ZN9S19305C123v28Ev();
extern void _ZN8S19305C93v18Ev();
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY vtc_S19305C12[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19305C12[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19305C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19305C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19305C123v28Ev,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19305C12[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19305C12[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern VTBL_ENTRY _ZTV9S19305C12[];
extern void _ZN8S19305C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C9__9S19305C12[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C9__9S19305C12[] = {
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
static  VTT_ENTRY vtt_S19305C12[] = {
  {&(_ZTV9S19305C12[3]),  3,15},
  {&(_tg__ZTV8S19305C9__9S19305C12[3]),  3,4},
  {&(_tg__ZTV9S19305C10__8S19305C9__9S19305C12[3]),  3,4},
  {&(_ZTV9S19305C12[10]),  10,15},
  {&(_ZTV9S19305C12[14]),  14,15},
};
extern VTBL_ENTRY _ZTI9S19305C12[];
extern  VTBL_ENTRY _ZTV9S19305C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19305C12[];
Class_Descriptor cd_S19305C12 = {  "S19305C12", // class name
  bases_S19305C12, 3,
  &(vtc_S19305C12[0]), // expected_vtbl_contents
  &(vtt_S19305C12[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI9S19305C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19305C12),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19305C12),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19305C1  : virtual S19305C2 , virtual S19305C12 {
  int s19305c1f0;
  virtual void  v1(); // _ZN8S19305C12v1Ev
  ~S19305C1(); // tgen
  S19305C1(); // tgen
};
//SIG(1 S19305C1) C1{ VBC2{ BC3{ vd v2 v3 v4 v5 v6 v7 v8 FL[9]} VBC4{ BC5{ BC6{ BC7{ v9 v10 Fp FD Fi} v11 v12} BC7 v13 v14 v15 v16} VBC8{ VBC9{ VBC10{ v17 FC11{ v29 v30} Fp} v18} v19 v20 v21} v22 v23 v24} v25 v26 v27 Fl FL FD Fs Fi} VBC12{ BC10 BC9 vd v28 Fi} v1 Fi}


void  S19305C1 ::v1(){vfunc_called(this, "_ZN8S19305C12v1Ev");}
S19305C1 ::~S19305C1(){ note_dtor("S19305C1", this);} // tgen
S19305C1 ::S19305C1(){ note_ctor("S19305C1", this);} // tgen

static void Test_S19305C1()
{
  extern Class_Descriptor cd_S19305C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,50)];
    init_test(&cd_S19305C1, buf);
    S19305C1 *dp, &lv = *(dp=new (buf) S19305C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,196), "sizeof(S19305C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19305C1)");
    check_base_class_offset(lv, (S19305C3*)(S19305C2*), ABISELECT(16,8), "S19305C1");
    check_base_class_offset(lv, (S19305C7*)(S19305C6*)(S19305C5*)(S19305C4*), ABISELECT(144,116), "S19305C1");
    check_base_class_offset(lv, (S19305C6*)(S19305C5*)(S19305C4*), ABISELECT(144,116), "S19305C1");
    /*is_ambiguous_... S19305C5::S19305C7 */ AMB_check_base_class_offset(lv, (S19305C7*)(S19305C5*)(S19305C4*), ABISELECT(192,140), "S19305C1");
    check_base_class_offset(lv, (S19305C5*)(S19305C4*), ABISELECT(144,116), "S19305C1");
    /*is_ambiguous_... S19305C1::S19305C9 */ AMB_check_base_class_offset(lv, (S19305C10*)(S19305C9*), ABISELECT(232,164), "S19305C1");
    check_base_class_offset(lv, (S19305C10*)(S19305C9*)(S19305C12*), ABISELECT(232,164), "S19305C1");
    check_base_class_offset(lv, (S19305C9*)(S19305C8*), 0, "S19305C1");
    check_base_class_offset(lv, (S19305C8*)(S19305C4*), 0, "S19305C1");
    check_base_class_offset(lv, (S19305C4*)(S19305C2*), ABISELECT(144,116), "S19305C1");
    check_base_class_offset(lv, (S19305C2*), ABISELECT(16,8), "S19305C1");
    /*is_ambiguous_... S19305C12::S19305C10 */ AMB_check_base_class_offset(lv, (S19305C10*)(S19305C12*), ABISELECT(256,176), "S19305C1");
    check_base_class_offset(lv, (S19305C9*)(S19305C12*), ABISELECT(280,188), "S19305C1");
    check_base_class_offset(lv, (S19305C12*), ABISELECT(256,176), "S19305C1");
    check_field_offset(lv, s19305c1f0, ABISELECT(8,4), "S19305C1.s19305c1f0");
    test_class_info(&lv, &cd_S19305C1);
    dp->~S19305C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19305C1(Test_S19305C1, "S19305C1", ABISELECT(304,196));

#else // __cplusplus

extern void _ZN8S19305C1C1Ev();
extern void _ZN8S19305C1D1Ev();
Name_Map name_map_S19305C1[] = {
  NSPAIR(_ZN8S19305C1C1Ev),
  NSPAIR(_ZN8S19305C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19305C3;
extern VTBL_ENTRY _ZTI8S19305C3[];
extern  VTBL_ENTRY _ZTV8S19305C3[];
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
extern Class_Descriptor cd_S19305C6;
extern VTBL_ENTRY _ZTI8S19305C6[];
extern  VTBL_ENTRY _ZTV8S19305C6[];
extern Class_Descriptor cd_S19305C7;
extern VTBL_ENTRY _ZTI8S19305C7[];
extern  VTBL_ENTRY _ZTV8S19305C7[];
extern Class_Descriptor cd_S19305C5;
extern VTBL_ENTRY _ZTI8S19305C5[];
extern  VTBL_ENTRY _ZTV8S19305C5[];
extern Class_Descriptor cd_S19305C10;
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
extern Class_Descriptor cd_S19305C9;
extern VTBL_ENTRY _ZTI8S19305C9[];
extern  VTBL_ENTRY _ZTV8S19305C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C9[];
extern Class_Descriptor cd_S19305C8;
extern VTBL_ENTRY _ZTI8S19305C8[];
extern  VTBL_ENTRY _ZTV8S19305C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C8[];
extern Class_Descriptor cd_S19305C4;
extern VTBL_ENTRY _ZTI8S19305C4[];
extern  VTBL_ENTRY _ZTV8S19305C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C4[];
extern Class_Descriptor cd_S19305C2;
extern VTBL_ENTRY _ZTI8S19305C2[];
extern  VTBL_ENTRY _ZTV8S19305C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C2[];
extern Class_Descriptor cd_S19305C10;
extern VTBL_ENTRY _ZTI9S19305C10[];
extern  VTBL_ENTRY _ZTV9S19305C10[];
extern Class_Descriptor cd_S19305C9;
extern VTBL_ENTRY _ZTI8S19305C9[];
extern  VTBL_ENTRY _ZTV8S19305C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C9[];
extern Class_Descriptor cd_S19305C12;
extern VTBL_ENTRY _ZTI9S19305C12[];
extern  VTBL_ENTRY _ZTV9S19305C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19305C12[];
static Base_Class bases_S19305C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19305C3,    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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19305C7,    ABISELECT(144,116), //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S19305C6,    ABISELECT(144,116), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S19305C7,    ABISELECT(192,140), //bcp->offset
    75, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19305C5,    ABISELECT(144,116), //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S19305C10,    ABISELECT(232,164), //bcp->offset
    79, //bcp->virtual_function_table_offset
    3, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19305C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19305C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19305C4,    ABISELECT(144,116), //bcp->offset
    48, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19305C2,    ABISELECT(16,8), //bcp->offset
    19, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19305C10,    ABISELECT(256,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
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19305C9,    ABISELECT(280,188), //bcp->offset
    94, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19305C12,    ABISELECT(256,176), //bcp->offset
    83, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19305C1[];
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
extern void _ZN8S19305C12v1Ev();
extern void _ZN8S19305C1D1Ev();
extern void _ZN8S19305C1D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S19305C1D1Ev,_ZTv0_n28_N8S19305C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19305C1D1Ev,_ZThn8_N8S19305C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19305C1D0Ev,_ZTv0_n28_N8S19305C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19305C1D0Ev,_ZThn8_N8S19305C1D0Ev)() __attribute__((weak));
extern void _ZN8S19305C32v2Ev();
extern void _ZN8S19305C32v3Ev();
extern void _ZN8S19305C32v4Ev();
extern void _ZN8S19305C32v5Ev();
extern void _ZN8S19305C32v6Ev();
extern void _ZN8S19305C32v7Ev();
extern void _ZN8S19305C32v8Ev();
extern void _ZN8S19305C23v25Ev();
extern void _ZN8S19305C23v26Ev();
extern void _ZN8S19305C23v27Ev();
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C63v11Ev();
extern void _ZN8S19305C63v12Ev();
extern void _ZN8S19305C53v13Ev();
extern void _ZN8S19305C53v14Ev();
extern void _ZN8S19305C53v15Ev();
extern void _ZN8S19305C53v16Ev();
extern void _ZN8S19305C43v22Ev();
extern void _ZN8S19305C43v23Ev();
extern void _ZN8S19305C43v24Ev();
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN9S19305C103v17Ev();
extern void _ZN9S19305C103v17Ev();
extern void ABISELECT(_ZTv0_n40_N8S19305C1D1Ev,_ZTv0_n20_N8S19305C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S19305C1D1Ev,_ZThn176_N8S19305C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19305C1D0Ev,_ZTv0_n20_N8S19305C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S19305C1D0Ev,_ZThn176_N8S19305C1D0Ev)() __attribute__((weak));
extern void _ZN9S19305C123v28Ev();
extern void _ZN8S19305C93v18Ev();
static  VTBL_ENTRY vtc_S19305C1[] = {
  ABISELECT(256,176),
  0,
  ABISELECT(144,116),
  ABISELECT(16,8),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C1[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19305C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19305C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19305C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(216,156),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(128,108),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19305C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19305C1D1Ev,_ZTv0_n28_N8S19305C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19305C1D0Ev,_ZTv0_n28_N8S19305C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19305C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v25Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v26Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v27Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  ABISELECT(-144,-116),
  ABISELECT(-144,-116),
  ABISELECT(-144,-116),
  (VTBL_ENTRY)&(_ZTI8S19305C1[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v24Ev,
  ABISELECT(-192,-140),
  (VTBL_ENTRY)&(_ZTI8S19305C1[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  0,
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI8S19305C1[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
  ABISELECT(24,12),
  0,
  ABISELECT(-256,-176),
  0,
  ABISELECT(-24,-12),
  ABISELECT(-256,-176),
  (VTBL_ENTRY)&(_ZTI8S19305C1[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19305C1D1Ev,_ZTv0_n20_N8S19305C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19305C1D0Ev,_ZTv0_n20_N8S19305C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19305C123v28Ev,
  ABISELECT(-48,-24),
  ABISELECT(-280,-188),
  (VTBL_ENTRY)&(_ZTI8S19305C1[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
};
extern VTBL_ENTRY _ZTV8S19305C1[];
extern void _ZN8S19305C2D1Ev();
extern void _ZN8S19305C2D0Ev();
extern void _ZN8S19305C32v2Ev();
extern void _ZN8S19305C32v3Ev();
extern void _ZN8S19305C32v4Ev();
extern void _ZN8S19305C32v5Ev();
extern void _ZN8S19305C32v6Ev();
extern void _ZN8S19305C32v7Ev();
extern void _ZN8S19305C32v8Ev();
extern void _ZN8S19305C23v25Ev();
extern void _ZN8S19305C23v26Ev();
extern void _ZN8S19305C23v27Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C2__8S19305C1[] = {
  ABISELECT(216,156),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(128,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN8S19305C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19305C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19305C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v25Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v26Ev,
  (VTBL_ENTRY)&_ZN8S19305C23v27Ev,
};
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C63v11Ev();
extern void _ZN8S19305C63v12Ev();
extern void _ZN8S19305C53v13Ev();
extern void _ZN8S19305C53v14Ev();
extern void _ZN8S19305C53v15Ev();
extern void _ZN8S19305C53v16Ev();
extern void _ZN8S19305C43v22Ev();
extern void _ZN8S19305C43v23Ev();
extern void _ZN8S19305C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C4__8S19305C2__8S19305C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(88,48),
  ABISELECT(-144,-116),
  ABISELECT(-144,-116),
  ABISELECT(-128,-108),
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v24Ev,
};
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C78S19305C58S19305C4__A1__8S19305C2__8S19305C1[] = {
  ABISELECT(-176,-132),
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
};
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C8__8S19305C2__8S19305C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(232,164),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C2__8S19305C1[] = {
  0,
  ABISELECT(-216,-156),
  (VTBL_ENTRY)&(_ZTI8S19305C2[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern void _ZN8S19305C72v9Ev();
extern void _ZN8S19305C73v10Ev();
extern void _ZN8S19305C63v11Ev();
extern void _ZN8S19305C63v12Ev();
extern void _ZN8S19305C53v13Ev();
extern void _ZN8S19305C53v14Ev();
extern void _ZN8S19305C53v15Ev();
extern void _ZN8S19305C53v16Ev();
extern void _ZN8S19305C43v22Ev();
extern void _ZN8S19305C43v23Ev();
extern void _ZN8S19305C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C4__8S19305C1[] = {
  ABISELECT(88,48),
  ABISELECT(-144,-116),
  ABISELECT(-144,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN8S19305C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19305C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19305C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19305C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19305C43v24Ev,
};
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C8__8S19305C4__8S19305C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(232,164),
  ABISELECT(144,116),
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C4__8S19305C1[] = {
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19305C4[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern void _ZN8S19305C93v18Ev();
extern void _ZN8S19305C83v19Ev();
extern void _ZN8S19305C83v20Ev();
extern void _ZN8S19305C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C8__8S19305C1[] = {
  0,
  0,
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C8[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19305C83v21Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C8__8S19305C1[] = {
  0,
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI8S19305C8[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern void _ZN8S19305C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C9__8S19305C1[] = {
  ABISELECT(232,164),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C9__8S19305C1[] = {
  0,
  ABISELECT(-232,-164),
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern void _ZN9S19305C103v17Ev();
extern void _ZN9S19305C12D1Ev();
extern void _ZN9S19305C12D0Ev();
extern void _ZN9S19305C123v28Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C12__8S19305C1[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19305C12[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19305C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19305C12D0Ev,
  (VTBL_ENTRY)&_ZN9S19305C123v28Ev,
};
extern void _ZN8S19305C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C99S19305C12__A1__8S19305C1[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__8S19305C99S19305C12__A1__8S19305C1[] = {
  0,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19305C9[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
extern void _ZN8S19305C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19305C9__9S19305C12__8S19305C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19305C12[0]),
  (VTBL_ENTRY)&_ZN8S19305C93v18Ev,
};
extern void _ZN9S19305C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19305C10__A1__9S19305C12__8S19305C1[] = {
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19305C12[0]),
  (VTBL_ENTRY)&_ZN9S19305C103v17Ev,
};
static  VTT_ENTRY vtt_S19305C1[] = {
  {&(_ZTV8S19305C1[12]),  12,98},
  {&(_ZTV8S19305C1[36]),  36,98},
  {&(_ZTV8S19305C1[64]),  64,98},
  {&(_ZTV8S19305C1[77]),  77,98},
  {&(_ZTV8S19305C1[12]),  12,98},
  {&(_ZTV8S19305C1[12]),  12,98},
  {&(_ZTV8S19305C1[82]),  82,98},
  {&(_ZTV8S19305C1[90]),  90,98},
  {&(_ZTV8S19305C1[97]),  97,98},
  {&(_tg__ZTV8S19305C2__8S19305C1[6]),  6,18},
  {&(_tg__ZTV8S19305C4__8S19305C2__8S19305C1[16]),  16,27},
  {&(_tg__ZTV8S19305C78S19305C58S19305C4__A1__8S19305C2__8S19305C1[2]),  2,4},
  {&(_tg__ZTV8S19305C8__8S19305C2__8S19305C1[8]),  8,12},
  {&(_tg__ZTV8S19305C8__8S19305C2__8S19305C1[8]),  8,12},
  {&(_tg__ZTV9S19305C10__8S19305C2__8S19305C1[3]),  3,4},
  {&(_tg__ZTV8S19305C4__8S19305C1[5]),  5,16},
  {&(_tg__ZTV8S19305C8__8S19305C4__8S19305C1[8]),  8,12},
  {&(_tg__ZTV8S19305C8__8S19305C4__8S19305C1[8]),  8,12},
  {&(_tg__ZTV9S19305C10__8S19305C4__8S19305C1[3]),  3,4},
  {&(_tg__ZTV8S19305C8__8S19305C1[5]),  5,9},
  {&(_tg__ZTV8S19305C8__8S19305C1[5]),  5,9},
  {&(_tg__ZTV9S19305C10__8S19305C8__8S19305C1[3]),  3,4},
  {&(_tg__ZTV8S19305C9__8S19305C1[3]),  3,4},
  {&(_tg__ZTV9S19305C10__8S19305C9__8S19305C1[3]),  3,4},
  {&(_tg__ZTV9S19305C12__8S19305C1[3]),  3,7},
  {&(_tg__ZTV8S19305C99S19305C12__A1__8S19305C1[3]),  3,4},
  {&(_tg__ZTV9S19305C10__8S19305C99S19305C12__A1__8S19305C1[3]),  3,4},
  {&(_tg__ZTV8S19305C9__9S19305C12__8S19305C1[3]),  3,4},
  {&(_tg__ZTV9S19305C10__A1__9S19305C12__8S19305C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19305C1[];
extern  VTBL_ENTRY _ZTV8S19305C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19305C1[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19305C1D0Ev,_ZTv0_n20_N8S19305C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19305C1D0Ev,_ZThn176_N8S19305C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19305C1D1Ev,_ZTv0_n20_N8S19305C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19305C1D1Ev,_ZThn176_N8S19305C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19305C1D0Ev,_ZTv0_n28_N8S19305C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19305C1D0Ev,_ZThn8_N8S19305C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19305C1D1Ev,_ZTv0_n28_N8S19305C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19305C1D1Ev,_ZThn8_N8S19305C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19305C1 = {  "S19305C1", // class name
  bases_S19305C1, 13,
  &(vtc_S19305C1[0]), // expected_vtbl_contents
  &(vtt_S19305C1[0]), // expected_vtt_contents
  ABISELECT(304,196), // object size
  NSPAIRA(_ZTI8S19305C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19305C1),98, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19305C1),29, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S378C6  {
  ::S4473C12_nt s378c6f0;
  int s378c6f1[2];
  char s378c6f2;
  virtual  ~S378C6(); // _ZN6S378C6D1Ev
  virtual void  v5(); // _ZN6S378C62v5Ev
  virtual void  v6(); // _ZN6S378C62v6Ev
  virtual void  v7(); // _ZN6S378C62v7Ev
  S378C6(); // tgen
};
//SIG(-1 S378C6) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S378C6 ::~S378C6(){ note_dtor("S378C6", this);}
void  S378C6 ::v5(){vfunc_called(this, "_ZN6S378C62v5Ev");}
void  S378C6 ::v6(){vfunc_called(this, "_ZN6S378C62v6Ev");}
void  S378C6 ::v7(){vfunc_called(this, "_ZN6S378C62v7Ev");}
S378C6 ::S378C6(){ note_ctor("S378C6", this);} // tgen

static void Test_S378C6()
{
  extern Class_Descriptor cd_S378C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S378C6, buf);
    S378C6 *dp, &lv = *(dp=new (buf) S378C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S378C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S378C6)");
    check_field_offset(lv, s378c6f0, ABISELECT(8,4), "S378C6.s378c6f0");
    check_field_offset(lv, s378c6f1, ABISELECT(24,16), "S378C6.s378c6f1");
    check_field_offset(lv, s378c6f2, ABISELECT(32,24), "S378C6.s378c6f2");
    test_class_info(&lv, &cd_S378C6);
    dp->~S378C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS378C6(Test_S378C6, "S378C6", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S378C6C1Ev();
extern void _ZN6S378C6D1Ev();
Name_Map name_map_S378C6[] = {
  NSPAIR(_ZN6S378C6C1Ev),
  NSPAIR(_ZN6S378C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S378C6[];
extern void _ZN6S378C6D1Ev();
extern void _ZN6S378C6D0Ev();
extern void _ZN6S378C62v5Ev();
extern void _ZN6S378C62v6Ev();
extern void _ZN6S378C62v7Ev();
static  VTBL_ENTRY vtc_S378C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S378C6[0]),
  (VTBL_ENTRY)&_ZN6S378C6D1Ev,
  (VTBL_ENTRY)&_ZN6S378C6D0Ev,
  (VTBL_ENTRY)&_ZN6S378C62v5Ev,
  (VTBL_ENTRY)&_ZN6S378C62v6Ev,
  (VTBL_ENTRY)&_ZN6S378C62v7Ev,
};
extern VTBL_ENTRY _ZTI6S378C6[];
extern  VTBL_ENTRY _ZTV6S378C6[];
Class_Descriptor cd_S378C6 = {  "S378C6", // class name
  0,0,//no base classes
  &(vtc_S378C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S378C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S378C6),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  S378C5  : S378C6 {
  void *s378c5f0;
  virtual void  v8(); // _ZN6S378C52v8Ev
  virtual void  v9(); // _ZN6S378C52v9Ev
  ~S378C5(); // tgen
  S378C5(); // tgen
};
//SIG(-1 S378C5) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S378C5 ::v8(){vfunc_called(this, "_ZN6S378C52v8Ev");}
void  S378C5 ::v9(){vfunc_called(this, "_ZN6S378C52v9Ev");}
S378C5 ::~S378C5(){ note_dtor("S378C5", this);} // tgen
S378C5 ::S378C5(){ note_ctor("S378C5", this);} // tgen

static void Test_S378C5()
{
  extern Class_Descriptor cd_S378C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S378C5, buf);
    S378C5 *dp, &lv = *(dp=new (buf) S378C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S378C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S378C5)");
    check_base_class_offset(lv, (S378C6*), 0, "S378C5");
    check_field_offset(lv, s378c5f0, ABISELECT(40,28), "S378C5.s378c5f0");
    test_class_info(&lv, &cd_S378C5);
    dp->~S378C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS378C5(Test_S378C5, "S378C5", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S378C5C1Ev();
extern void _ZN6S378C5D1Ev();
Name_Map name_map_S378C5[] = {
  NSPAIR(_ZN6S378C5C1Ev),
  NSPAIR(_ZN6S378C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S378C6;
extern VTBL_ENTRY _ZTI6S378C6[];
extern  VTBL_ENTRY _ZTV6S378C6[];
static Base_Class bases_S378C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S378C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI6S378C5[];
extern void _ZN6S378C5D1Ev();
extern void _ZN6S378C5D0Ev();
extern void _ZN6S378C62v5Ev();
extern void _ZN6S378C62v6Ev();
extern void _ZN6S378C62v7Ev();
extern void _ZN6S378C52v8Ev();
extern void _ZN6S378C52v9Ev();
static  VTBL_ENTRY vtc_S378C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S378C5[0]),
  (VTBL_ENTRY)&_ZN6S378C5D1Ev,
  (VTBL_ENTRY)&_ZN6S378C5D0Ev,
  (VTBL_ENTRY)&_ZN6S378C62v5Ev,
  (VTBL_ENTRY)&_ZN6S378C62v6Ev,
  (VTBL_ENTRY)&_ZN6S378C62v7Ev,
  (VTBL_ENTRY)&_ZN6S378C52v8Ev,
  (VTBL_ENTRY)&_ZN6S378C52v9Ev,
};
extern VTBL_ENTRY _ZTI6S378C5[];
extern  VTBL_ENTRY _ZTV6S378C5[];
Class_Descriptor cd_S378C5 = {  "S378C5", // class name
  bases_S378C5, 1,
  &(vtc_S378C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S378C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S378C5),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  S378C4  : S378C5 {
  void *s378c4f0;
  char s378c4f1;
  ::S2366C14_nt s378c4f2;
  virtual  ~S378C4(); // _ZN6S378C4D1Ev
  virtual void  v10(); // _ZN6S378C43v10Ev
  S378C4(); // tgen
};
//SIG(-1 S378C4) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S378C4 ::~S378C4(){ note_dtor("S378C4", this);}
void  S378C4 ::v10(){vfunc_called(this, "_ZN6S378C43v10Ev");}
S378C4 ::S378C4(){ note_ctor("S378C4", this);} // tgen

static void Test_S378C4()
{
  extern Class_Descriptor cd_S378C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S378C4, buf);
    S378C4 *dp, &lv = *(dp=new (buf) S378C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S378C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S378C4)");
    check_base_class_offset(lv, (S378C6*)(S378C5*), 0, "S378C4");
    check_base_class_offset(lv, (S378C5*), 0, "S378C4");
    check_field_offset(lv, s378c4f0, ABISELECT(48,32), "S378C4.s378c4f0");
    check_field_offset(lv, s378c4f1, ABISELECT(56,36), "S378C4.s378c4f1");
    check_field_offset(lv, s378c4f2, ABISELECT(60,40), "S378C4.s378c4f2");
    test_class_info(&lv, &cd_S378C4);
    dp->~S378C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS378C4(Test_S378C4, "S378C4", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S378C4C1Ev();
extern void _ZN6S378C4D1Ev();
Name_Map name_map_S378C4[] = {
  NSPAIR(_ZN6S378C4C1Ev),
  NSPAIR(_ZN6S378C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S378C6;
extern VTBL_ENTRY _ZTI6S378C6[];
extern  VTBL_ENTRY _ZTV6S378C6[];
extern Class_Descriptor cd_S378C5;
extern VTBL_ENTRY _ZTI6S378C5[];
extern  VTBL_ENTRY _ZTV6S378C5[];
static Base_Class bases_S378C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S378C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S378C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S378C4[];
extern void _ZN6S378C4D1Ev();
extern void _ZN6S378C4D0Ev();
extern void _ZN6S378C62v5Ev();
extern void _ZN6S378C62v6Ev();
extern void _ZN6S378C62v7Ev();
extern void _ZN6S378C52v8Ev();
extern void _ZN6S378C52v9Ev();
extern void _ZN6S378C43v10Ev();
static  VTBL_ENTRY vtc_S378C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S378C4[0]),
  (VTBL_ENTRY)&_ZN6S378C4D1Ev,
  (VTBL_ENTRY)&_ZN6S378C4D0Ev,
  (VTBL_ENTRY)&_ZN6S378C62v5Ev,
  (VTBL_ENTRY)&_ZN6S378C62v6Ev,
  (VTBL_ENTRY)&_ZN6S378C62v7Ev,
  (VTBL_ENTRY)&_ZN6S378C52v8Ev,
  (VTBL_ENTRY)&_ZN6S378C52v9Ev,
  (VTBL_ENTRY)&_ZN6S378C43v10Ev,
};
extern VTBL_ENTRY _ZTI6S378C4[];
extern  VTBL_ENTRY _ZTV6S378C4[];
Class_Descriptor cd_S378C4 = {  "S378C4", // class name
  bases_S378C4, 2,
  &(vtc_S378C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S378C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S378C4),10, //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  S378C3  : S378C4 {
  void *s378c3f0;
  __tsi64 s378c3f1[2];
  ::S130C11_nt s378c3f2;
  __tsi64 s378c3f3;
  ::S130C12_nt s378c3f4;
  char s378c3f5;
  void *s378c3f6[2];
  virtual  ~S378C3(); // _ZN6S378C3D1Ev
  virtual void  v11(); // _ZN6S378C33v11Ev
  virtual void  v12(); // _ZN6S378C33v12Ev
  virtual void  v13(); // _ZN6S378C33v13Ev
  virtual void  v14(); // _ZN6S378C33v14Ev
  S378C3(); // tgen
};
//SIG(-1 S378C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v8 v9 Fp} vd v10 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 v4 Fp FL[2] FC8{ m Fp[2]} FL FC9{ Fp Fi Fp} Fc Fp[2]}


 S378C3 ::~S378C3(){ note_dtor("S378C3", this);}
void  S378C3 ::v11(){vfunc_called(this, "_ZN6S378C33v11Ev");}
void  S378C3 ::v12(){vfunc_called(this, "_ZN6S378C33v12Ev");}
void  S378C3 ::v13(){vfunc_called(this, "_ZN6S378C33v13Ev");}
void  S378C3 ::v14(){vfunc_called(this, "_ZN6S378C33v14Ev");}
S378C3 ::S378C3(){ note_ctor("S378C3", this);} // tgen

static void Test_S378C3()
{
  extern Class_Descriptor cd_S378C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,28)];
    init_test(&cd_S378C3, buf);
    S378C3 *dp, &lv = *(dp=new (buf) S378C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,108), "sizeof(S378C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S378C3)");
    check_base_class_offset(lv, (S378C6*)(S378C5*)(S378C4*), 0, "S378C3");
    check_base_class_offset(lv, (S378C5*)(S378C4*), 0, "S378C3");
    check_base_class_offset(lv, (S378C4*), 0, "S378C3");
    check_field_offset(lv, s378c3f0, ABISELECT(72,48), "S378C3.s378c3f0");
    check_field_offset(lv, s378c3f1, ABISELECT(80,52), "S378C3.s378c3f1");
    check_field_offset(lv, s378c3f2, ABISELECT(96,68), "S378C3.s378c3f2");
    check_field_offset(lv, s378c3f3, ABISELECT(112,76), "S378C3.s378c3f3");
    check_field_offset(lv, s378c3f4, ABISELECT(120,84), "S378C3.s378c3f4");
    check_field_offset(lv, s378c3f5, ABISELECT(144,96), "S378C3.s378c3f5");
    check_field_offset(lv, s378c3f6, ABISELECT(152,100), "S378C3.s378c3f6");
    test_class_info(&lv, &cd_S378C3);
    dp->~S378C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS378C3(Test_S378C3, "S378C3", ABISELECT(168,108));

#else // __cplusplus

extern void _ZN6S378C3C1Ev();
extern void _ZN6S378C3D1Ev();
Name_Map name_map_S378C3[] = {
  NSPAIR(_ZN6S378C3C1Ev),
  NSPAIR(_ZN6S378C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S378C6;
extern VTBL_ENTRY _ZTI6S378C6[];
extern  VTBL_ENTRY _ZTV6S378C6[];
extern Class_Descriptor cd_S378C5;
extern VTBL_ENTRY _ZTI6S378C5[];
extern  VTBL_ENTRY _ZTV6S378C5[];
extern Class_Descriptor cd_S378C4;
extern VTBL_ENTRY _ZTI6S378C4[];
extern  VTBL_ENTRY _ZTV6S378C4[];
static Base_Class bases_S378C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S378C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S378C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S378C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S378C3[];
extern void _ZN6S378C3D1Ev();
extern void _ZN6S378C3D0Ev();
extern void _ZN6S378C62v5Ev();
extern void _ZN6S378C62v6Ev();
extern void _ZN6S378C62v7Ev();
extern void _ZN6S378C52v8Ev();
extern void _ZN6S378C52v9Ev();
extern void _ZN6S378C43v10Ev();
extern void _ZN6S378C33v11Ev();
extern void _ZN6S378C33v12Ev();
extern void _ZN6S378C33v13Ev();
extern void _ZN6S378C33v14Ev();
static  VTBL_ENTRY vtc_S378C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S378C3[0]),
  (VTBL_ENTRY)&_ZN6S378C3D1Ev,
  (VTBL_ENTRY)&_ZN6S378C3D0Ev,
  (VTBL_ENTRY)&_ZN6S378C62v5Ev,
  (VTBL_ENTRY)&_ZN6S378C62v6Ev,
  (VTBL_ENTRY)&_ZN6S378C62v7Ev,
  (VTBL_ENTRY)&_ZN6S378C52v8Ev,
  (VTBL_ENTRY)&_ZN6S378C52v9Ev,
  (VTBL_ENTRY)&_ZN6S378C43v10Ev,
  (VTBL_ENTRY)&_ZN6S378C33v11Ev,
  (VTBL_ENTRY)&_ZN6S378C33v12Ev,
  (VTBL_ENTRY)&_ZN6S378C33v13Ev,
  (VTBL_ENTRY)&_ZN6S378C33v14Ev,
};
extern VTBL_ENTRY _ZTI6S378C3[];
extern  VTBL_ENTRY _ZTV6S378C3[];
Class_Descriptor cd_S378C3 = {  "S378C3", // class name
  bases_S378C3, 3,
  &(vtc_S378C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,108), // object size
  NSPAIRA(_ZTI6S378C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S378C3),14, //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  S378C2  : S378C3 {
  char s378c2f0;
  void *s378c2f1[2];
  virtual  ~S378C2(); // _ZN6S378C2D1Ev
  virtual void  v15(); // _ZN6S378C23v15Ev
  virtual void  v16(); // _ZN6S378C23v16Ev
  virtual void  v17(); // _ZN6S378C23v17Ev
  virtual void  v18(); // _ZN6S378C23v18Ev
  virtual void  v19(); // _ZN6S378C23v19Ev
  virtual void  v20(); // _ZN6S378C23v20Ev
  virtual void  v21(); // _ZN6S378C23v21Ev
  virtual void  v22(); // _ZN6S378C23v22Ev
  S378C2(); // tgen
};
//SIG(-1 S378C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v12 v13 Fp} vd v14 Fp Fc FC8{ m Fi[2]}} vd v15 v16 v17 v18 Fp FL[2] FC9{ m Fp[2]} FL FC10{ Fp Fi Fp} Fc Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 Fc Fp[2]}


 S378C2 ::~S378C2(){ note_dtor("S378C2", this);}
void  S378C2 ::v15(){vfunc_called(this, "_ZN6S378C23v15Ev");}
void  S378C2 ::v16(){vfunc_called(this, "_ZN6S378C23v16Ev");}
void  S378C2 ::v17(){vfunc_called(this, "_ZN6S378C23v17Ev");}
void  S378C2 ::v18(){vfunc_called(this, "_ZN6S378C23v18Ev");}
void  S378C2 ::v19(){vfunc_called(this, "_ZN6S378C23v19Ev");}
void  S378C2 ::v20(){vfunc_called(this, "_ZN6S378C23v20Ev");}
void  S378C2 ::v21(){vfunc_called(this, "_ZN6S378C23v21Ev");}
void  S378C2 ::v22(){vfunc_called(this, "_ZN6S378C23v22Ev");}
S378C2 ::S378C2(){ note_ctor("S378C2", this);} // tgen

static void Test_S378C2()
{
  extern Class_Descriptor cd_S378C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,31)];
    init_test(&cd_S378C2, buf);
    S378C2 *dp, &lv = *(dp=new (buf) S378C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,120), "sizeof(S378C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S378C2)");
    check_base_class_offset(lv, (S378C6*)(S378C5*)(S378C4*)(S378C3*), 0, "S378C2");
    check_base_class_offset(lv, (S378C5*)(S378C4*)(S378C3*), 0, "S378C2");
    check_base_class_offset(lv, (S378C4*)(S378C3*), 0, "S378C2");
    check_base_class_offset(lv, (S378C3*), 0, "S378C2");
    check_field_offset(lv, s378c2f0, ABISELECT(168,108), "S378C2.s378c2f0");
    check_field_offset(lv, s378c2f1, ABISELECT(176,112), "S378C2.s378c2f1");
    test_class_info(&lv, &cd_S378C2);
    dp->~S378C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS378C2(Test_S378C2, "S378C2", ABISELECT(192,120));

#else // __cplusplus

extern void _ZN6S378C2C1Ev();
extern void _ZN6S378C2D1Ev();
Name_Map name_map_S378C2[] = {
  NSPAIR(_ZN6S378C2C1Ev),
  NSPAIR(_ZN6S378C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S378C6;
extern VTBL_ENTRY _ZTI6S378C6[];
extern  VTBL_ENTRY _ZTV6S378C6[];
extern Class_Descriptor cd_S378C5;
extern VTBL_ENTRY _ZTI6S378C5[];
extern  VTBL_ENTRY _ZTV6S378C5[];
extern Class_Descriptor cd_S378C4;
extern VTBL_ENTRY _ZTI6S378C4[];
extern  VTBL_ENTRY _ZTV6S378C4[];
extern Class_Descriptor cd_S378C3;
extern VTBL_ENTRY _ZTI6S378C3[];
extern  VTBL_ENTRY _ZTV6S378C3[];
static Base_Class bases_S378C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S378C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S378C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S378C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S378C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S378C2[];
extern void _ZN6S378C2D1Ev();
extern void _ZN6S378C2D0Ev();
extern void _ZN6S378C62v5Ev();
extern void _ZN6S378C62v6Ev();
extern void _ZN6S378C62v7Ev();
extern void _ZN6S378C52v8Ev();
extern void _ZN6S378C52v9Ev();
extern void _ZN6S378C43v10Ev();
extern void _ZN6S378C33v11Ev();
extern void _ZN6S378C33v12Ev();
extern void _ZN6S378C33v13Ev();
extern void _ZN6S378C33v14Ev();
extern void _ZN6S378C23v15Ev();
extern void _ZN6S378C23v16Ev();
extern void _ZN6S378C23v17Ev();
extern void _ZN6S378C23v18Ev();
extern void _ZN6S378C23v19Ev();
extern void _ZN6S378C23v20Ev();
extern void _ZN6S378C23v21Ev();
extern void _ZN6S378C23v22Ev();
static  VTBL_ENTRY vtc_S378C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S378C2[0]),
  (VTBL_ENTRY)&_ZN6S378C2D1Ev,
  (VTBL_ENTRY)&_ZN6S378C2D0Ev,
  (VTBL_ENTRY)&_ZN6S378C62v5Ev,
  (VTBL_ENTRY)&_ZN6S378C62v6Ev,
  (VTBL_ENTRY)&_ZN6S378C62v7Ev,
  (VTBL_ENTRY)&_ZN6S378C52v8Ev,
  (VTBL_ENTRY)&_ZN6S378C52v9Ev,
  (VTBL_ENTRY)&_ZN6S378C43v10Ev,
  (VTBL_ENTRY)&_ZN6S378C33v11Ev,
  (VTBL_ENTRY)&_ZN6S378C33v12Ev,
  (VTBL_ENTRY)&_ZN6S378C33v13Ev,
  (VTBL_ENTRY)&_ZN6S378C33v14Ev,
  (VTBL_ENTRY)&_ZN6S378C23v15Ev,
  (VTBL_ENTRY)&_ZN6S378C23v16Ev,
  (VTBL_ENTRY)&_ZN6S378C23v17Ev,
  (VTBL_ENTRY)&_ZN6S378C23v18Ev,
  (VTBL_ENTRY)&_ZN6S378C23v19Ev,
  (VTBL_ENTRY)&_ZN6S378C23v20Ev,
  (VTBL_ENTRY)&_ZN6S378C23v21Ev,
  (VTBL_ENTRY)&_ZN6S378C23v22Ev,
};
extern VTBL_ENTRY _ZTI6S378C2[];
extern  VTBL_ENTRY _ZTV6S378C2[];
Class_Descriptor cd_S378C2 = {  "S378C2", // class name
  bases_S378C2, 4,
  &(vtc_S378C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,120), // object size
  NSPAIRA(_ZTI6S378C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S378C2),22, //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  S378C1  : S378C2 {
  virtual  ~S378C1(); // _ZN6S378C1D1Ev
  virtual void  v1(); // _ZN6S378C12v1Ev
  virtual void  v2(); // _ZN6S378C12v2Ev
  virtual void  v3(); // _ZN6S378C12v3Ev
  virtual void  v4(); // _ZN6S378C12v4Ev
  S378C1(); // tgen
};
//SIG(1 S378C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v5 v6 v7 FC7{ m Fp Fi FC8{ m}} Fi[2] Fc} v8 v9 Fp} vd v10 Fp Fc FC9{ m Fi[2]}} vd v11 v12 v13 v14 Fp FL[2] FC10{ m Fp[2]} FL FC11{ Fp Fi Fp} Fc Fp[2]} vd v15 v16 v17 v18 v19 v20 v21 v22 Fc Fp[2]} vd v1 v2 v3 v4}


 S378C1 ::~S378C1(){ note_dtor("S378C1", this);}
void  S378C1 ::v1(){vfunc_called(this, "_ZN6S378C12v1Ev");}
void  S378C1 ::v2(){vfunc_called(this, "_ZN6S378C12v2Ev");}
void  S378C1 ::v3(){vfunc_called(this, "_ZN6S378C12v3Ev");}
void  S378C1 ::v4(){vfunc_called(this, "_ZN6S378C12v4Ev");}
S378C1 ::S378C1(){ note_ctor("S378C1", this);} // tgen

static void Test_S378C1()
{
  extern Class_Descriptor cd_S378C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,31)];
    init_test(&cd_S378C1, buf);
    S378C1 *dp, &lv = *(dp=new (buf) S378C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,120), "sizeof(S378C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S378C1)");
    check_base_class_offset(lv, (S378C6*)(S378C5*)(S378C4*)(S378C3*)(S378C2*), 0, "S378C1");
    check_base_class_offset(lv, (S378C5*)(S378C4*)(S378C3*)(S378C2*), 0, "S378C1");
    check_base_class_offset(lv, (S378C4*)(S378C3*)(S378C2*), 0, "S378C1");
    check_base_class_offset(lv, (S378C3*)(S378C2*), 0, "S378C1");
    check_base_class_offset(lv, (S378C2*), 0, "S378C1");
    test_class_info(&lv, &cd_S378C1);
    dp->~S378C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS378C1(Test_S378C1, "S378C1", ABISELECT(192,120));

#else // __cplusplus

extern void _ZN6S378C1C1Ev();
extern void _ZN6S378C1D1Ev();
Name_Map name_map_S378C1[] = {
  NSPAIR(_ZN6S378C1C1Ev),
  NSPAIR(_ZN6S378C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S378C6;
extern VTBL_ENTRY _ZTI6S378C6[];
extern  VTBL_ENTRY _ZTV6S378C6[];
extern Class_Descriptor cd_S378C5;
extern VTBL_ENTRY _ZTI6S378C5[];
extern  VTBL_ENTRY _ZTV6S378C5[];
extern Class_Descriptor cd_S378C4;
extern VTBL_ENTRY _ZTI6S378C4[];
extern  VTBL_ENTRY _ZTV6S378C4[];
extern Class_Descriptor cd_S378C3;
extern VTBL_ENTRY _ZTI6S378C3[];
extern  VTBL_ENTRY _ZTV6S378C3[];
extern Class_Descriptor cd_S378C2;
extern VTBL_ENTRY _ZTI6S378C2[];
extern  VTBL_ENTRY _ZTV6S378C2[];
static Base_Class bases_S378C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S378C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S378C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S378C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S378C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S378C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S378C1[];
extern void _ZN6S378C1D1Ev();
extern void _ZN6S378C1D0Ev();
extern void _ZN6S378C62v5Ev();
extern void _ZN6S378C62v6Ev();
extern void _ZN6S378C62v7Ev();
extern void _ZN6S378C52v8Ev();
extern void _ZN6S378C52v9Ev();
extern void _ZN6S378C43v10Ev();
extern void _ZN6S378C33v11Ev();
extern void _ZN6S378C33v12Ev();
extern void _ZN6S378C33v13Ev();
extern void _ZN6S378C33v14Ev();
extern void _ZN6S378C23v15Ev();
extern void _ZN6S378C23v16Ev();
extern void _ZN6S378C23v17Ev();
extern void _ZN6S378C23v18Ev();
extern void _ZN6S378C23v19Ev();
extern void _ZN6S378C23v20Ev();
extern void _ZN6S378C23v21Ev();
extern void _ZN6S378C23v22Ev();
extern void _ZN6S378C12v1Ev();
extern void _ZN6S378C12v2Ev();
extern void _ZN6S378C12v3Ev();
extern void _ZN6S378C12v4Ev();
static  VTBL_ENTRY vtc_S378C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S378C1[0]),
  (VTBL_ENTRY)&_ZN6S378C1D1Ev,
  (VTBL_ENTRY)&_ZN6S378C1D0Ev,
  (VTBL_ENTRY)&_ZN6S378C62v5Ev,
  (VTBL_ENTRY)&_ZN6S378C62v6Ev,
  (VTBL_ENTRY)&_ZN6S378C62v7Ev,
  (VTBL_ENTRY)&_ZN6S378C52v8Ev,
  (VTBL_ENTRY)&_ZN6S378C52v9Ev,
  (VTBL_ENTRY)&_ZN6S378C43v10Ev,
  (VTBL_ENTRY)&_ZN6S378C33v11Ev,
  (VTBL_ENTRY)&_ZN6S378C33v12Ev,
  (VTBL_ENTRY)&_ZN6S378C33v13Ev,
  (VTBL_ENTRY)&_ZN6S378C33v14Ev,
  (VTBL_ENTRY)&_ZN6S378C23v15Ev,
  (VTBL_ENTRY)&_ZN6S378C23v16Ev,
  (VTBL_ENTRY)&_ZN6S378C23v17Ev,
  (VTBL_ENTRY)&_ZN6S378C23v18Ev,
  (VTBL_ENTRY)&_ZN6S378C23v19Ev,
  (VTBL_ENTRY)&_ZN6S378C23v20Ev,
  (VTBL_ENTRY)&_ZN6S378C23v21Ev,
  (VTBL_ENTRY)&_ZN6S378C23v22Ev,
  (VTBL_ENTRY)&_ZN6S378C12v1Ev,
  (VTBL_ENTRY)&_ZN6S378C12v2Ev,
  (VTBL_ENTRY)&_ZN6S378C12v3Ev,
  (VTBL_ENTRY)&_ZN6S378C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S378C1[];
extern  VTBL_ENTRY _ZTV6S378C1[];
Class_Descriptor cd_S378C1 = {  "S378C1", // class name
  bases_S378C1, 5,
  &(vtc_S378C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,120), // object size
  NSPAIRA(_ZTI6S378C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S378C1),26, //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  S19317C3  {
  virtual void  v2(); // _ZN8S19317C32v2Ev
  ~S19317C3(); // tgen
  S19317C3(); // tgen
};
//SIG(-1 S19317C3) C1{ v1}


void  S19317C3 ::v2(){vfunc_called(this, "_ZN8S19317C32v2Ev");}
S19317C3 ::~S19317C3(){ note_dtor("S19317C3", this);} // tgen
S19317C3 ::S19317C3(){ note_ctor("S19317C3", this);} // tgen

static void Test_S19317C3()
{
  extern Class_Descriptor cd_S19317C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19317C3, buf);
    S19317C3 *dp, &lv = *(dp=new (buf) S19317C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19317C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C3)");
    test_class_info(&lv, &cd_S19317C3);
    dp->~S19317C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C3(Test_S19317C3, "S19317C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19317C3C1Ev();
extern void _ZN8S19317C3D1Ev();
Name_Map name_map_S19317C3[] = {
  NSPAIR(_ZN8S19317C3C1Ev),
  NSPAIR(_ZN8S19317C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19317C3[];
extern void _ZN8S19317C32v2Ev();
static  VTBL_ENTRY vtc_S19317C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C3[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
};
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
Class_Descriptor cd_S19317C3 = {  "S19317C3", // class name
  0,0,//no base classes
  &(vtc_S19317C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19317C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19317C3),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  S19317C5  {
  void *s19317c5f0[4];
  virtual void  v3(); // _ZN8S19317C52v3Ev
  virtual void  v4(); // _ZN8S19317C52v4Ev
  virtual void  v5(); // _ZN8S19317C52v5Ev
  virtual void  v6(); // _ZN8S19317C52v6Ev
  virtual void  v7(); // _ZN8S19317C52v7Ev
  virtual void  v8(); // _ZN8S19317C52v8Ev
  ~S19317C5(); // tgen
  S19317C5(); // tgen
};
//SIG(-1 S19317C5) C1{ v1 v2 v3 v4 v5 v6 Fp[4]}


void  S19317C5 ::v3(){vfunc_called(this, "_ZN8S19317C52v3Ev");}
void  S19317C5 ::v4(){vfunc_called(this, "_ZN8S19317C52v4Ev");}
void  S19317C5 ::v5(){vfunc_called(this, "_ZN8S19317C52v5Ev");}
void  S19317C5 ::v6(){vfunc_called(this, "_ZN8S19317C52v6Ev");}
void  S19317C5 ::v7(){vfunc_called(this, "_ZN8S19317C52v7Ev");}
void  S19317C5 ::v8(){vfunc_called(this, "_ZN8S19317C52v8Ev");}
S19317C5 ::~S19317C5(){ note_dtor("S19317C5", this);} // tgen
S19317C5 ::S19317C5(){ note_ctor("S19317C5", this);} // tgen

static void Test_S19317C5()
{
  extern Class_Descriptor cd_S19317C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19317C5, buf);
    S19317C5 *dp, &lv = *(dp=new (buf) S19317C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19317C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C5)");
    check_field_offset(lv, s19317c5f0, ABISELECT(8,4), "S19317C5.s19317c5f0");
    test_class_info(&lv, &cd_S19317C5);
    dp->~S19317C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C5(Test_S19317C5, "S19317C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19317C5C1Ev();
extern void _ZN8S19317C5D1Ev();
Name_Map name_map_S19317C5[] = {
  NSPAIR(_ZN8S19317C5C1Ev),
  NSPAIR(_ZN8S19317C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19317C5[];
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
static  VTBL_ENTRY vtc_S19317C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C5[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
};
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
Class_Descriptor cd_S19317C5 = {  "S19317C5", // class name
  0,0,//no base classes
  &(vtc_S19317C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19317C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19317C5),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  S19317C4  : S19317C5 {
  __tsi64 s19317c4f0;
  virtual  ~S19317C4(); // _ZN8S19317C4D1Ev
  virtual void  v9(); // _ZN8S19317C42v9Ev
  virtual void  v10(); // _ZN8S19317C43v10Ev
  S19317C4(); // tgen
};
//SIG(-1 S19317C4) C1{ BC2{ v3 v4 v5 v6 v7 v8 Fp[4]} vd v1 v2 FL}


 S19317C4 ::~S19317C4(){ note_dtor("S19317C4", this);}
void  S19317C4 ::v9(){vfunc_called(this, "_ZN8S19317C42v9Ev");}
void  S19317C4 ::v10(){vfunc_called(this, "_ZN8S19317C43v10Ev");}
S19317C4 ::S19317C4(){ note_ctor("S19317C4", this);} // tgen

static void Test_S19317C4()
{
  extern Class_Descriptor cd_S19317C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S19317C4, buf);
    S19317C4 *dp, &lv = *(dp=new (buf) S19317C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S19317C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C4)");
    check_base_class_offset(lv, (S19317C5*), 0, "S19317C4");
    check_field_offset(lv, s19317c4f0, ABISELECT(40,20), "S19317C4.s19317c4f0");
    test_class_info(&lv, &cd_S19317C4);
    dp->~S19317C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C4(Test_S19317C4, "S19317C4", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S19317C4C1Ev();
extern void _ZN8S19317C4D1Ev();
Name_Map name_map_S19317C4[] = {
  NSPAIR(_ZN8S19317C4C1Ev),
  NSPAIR(_ZN8S19317C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
static Base_Class bases_S19317C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19317C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19317C4[];
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void _ZN8S19317C4D1Ev();
extern void _ZN8S19317C4D0Ev();
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
static  VTBL_ENTRY vtc_S19317C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C4[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19317C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19317C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
};
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
Class_Descriptor cd_S19317C4 = {  "S19317C4", // class name
  bases_S19317C4, 1,
  &(vtc_S19317C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S19317C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19317C4),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  S19317C6  {
  int s19317c6f0;
  virtual void  v11(); // _ZN8S19317C63v11Ev
  ~S19317C6(); // tgen
  S19317C6(); // tgen
};
//SIG(-1 S19317C6) C1{ v1 Fi}


void  S19317C6 ::v11(){vfunc_called(this, "_ZN8S19317C63v11Ev");}
S19317C6 ::~S19317C6(){ note_dtor("S19317C6", this);} // tgen
S19317C6 ::S19317C6(){ note_ctor("S19317C6", this);} // tgen

static void Test_S19317C6()
{
  extern Class_Descriptor cd_S19317C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19317C6, buf);
    S19317C6 *dp, &lv = *(dp=new (buf) S19317C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19317C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C6)");
    check_field_offset(lv, s19317c6f0, ABISELECT(8,4), "S19317C6.s19317c6f0");
    test_class_info(&lv, &cd_S19317C6);
    dp->~S19317C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C6(Test_S19317C6, "S19317C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19317C6C1Ev();
extern void _ZN8S19317C6D1Ev();
Name_Map name_map_S19317C6[] = {
  NSPAIR(_ZN8S19317C6C1Ev),
  NSPAIR(_ZN8S19317C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19317C6[];
extern void _ZN8S19317C63v11Ev();
static  VTBL_ENTRY vtc_S19317C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C6[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
};
extern VTBL_ENTRY _ZTI8S19317C6[];
extern  VTBL_ENTRY _ZTV8S19317C6[];
Class_Descriptor cd_S19317C6 = {  "S19317C6", // class name
  0,0,//no base classes
  &(vtc_S19317C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19317C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19317C6),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  S19317C2  : S19317C3 , S19317C4 , virtual S19317C6 {
  int s19317c2f0;
  ::S20677C6_nt s19317c2f1;
  virtual void  v12(); // _ZN8S19317C23v12Ev
  virtual void  v13(); // _ZN8S19317C23v13Ev
  ~S19317C2(); // tgen
  S19317C2(); // tgen
};
//SIG(-1 S19317C2) C1{ BC2{ v3} BC3{ BC4{ v4 v5 v6 v7 v8 v9 Fp[4]} vd v10 v11 FL} VBC5{ v12 Fi} v1 v2 Fi FC6{}}


void  S19317C2 ::v12(){vfunc_called(this, "_ZN8S19317C23v12Ev");}
void  S19317C2 ::v13(){vfunc_called(this, "_ZN8S19317C23v13Ev");}
S19317C2 ::~S19317C2(){ note_dtor("S19317C2", this);} // tgen
S19317C2 ::S19317C2(){ note_ctor("S19317C2", this);} // tgen

static void Test_S19317C2()
{
  extern Class_Descriptor cd_S19317C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S19317C2, buf);
    S19317C2 *dp, &lv = *(dp=new (buf) S19317C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S19317C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C2)");
    check_base_class_offset(lv, (S19317C3*), 0, "S19317C2");
    check_base_class_offset(lv, (S19317C5*)(S19317C4*), ABISELECT(8,4), "S19317C2");
    check_base_class_offset(lv, (S19317C4*), ABISELECT(8,4), "S19317C2");
    check_base_class_offset(lv, (S19317C6*), ABISELECT(64,40), "S19317C2");
    check_field_offset(lv, s19317c2f0, ABISELECT(56,32), "S19317C2.s19317c2f0");
    check_field_offset(lv, s19317c2f1, ABISELECT(60,36), "S19317C2.s19317c2f1");
    test_class_info(&lv, &cd_S19317C2);
    dp->~S19317C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C2(Test_S19317C2, "S19317C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN8S19317C2C1Ev();
extern void _ZN8S19317C2D1Ev();
Name_Map name_map_S19317C2[] = {
  NSPAIR(_ZN8S19317C2C1Ev),
  NSPAIR(_ZN8S19317C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19317C3;
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C4;
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
extern Class_Descriptor cd_S19317C6;
extern VTBL_ENTRY _ZTI8S19317C6[];
extern  VTBL_ENTRY _ZTV8S19317C6[];
static Base_Class bases_S19317C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19317C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S19317C5,    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
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19317C4,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_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_S19317C6,    ABISELECT(64,40), //bcp->offset
    20, //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 _ZTI8S19317C2[];
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C23v12Ev();
extern void _ZN8S19317C23v13Ev();
extern void _ZN8S19317C2D1Ev();
extern void _ZN8S19317C2D0Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZThn8_N8S19317C2D1Ev,_ZThn4_N8S19317C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S19317C2D0Ev,_ZThn4_N8S19317C2D0Ev)();
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
extern void _ZN8S19317C63v11Ev();
static  VTBL_ENTRY vtc_S19317C2[] = {
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C2[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19317C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19317C2D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19317C2[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19317C2D1Ev,_ZThn4_N8S19317C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19317C2D0Ev,_ZThn4_N8S19317C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19317C2[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
};
extern VTBL_ENTRY _ZTV8S19317C2[];
static  VTT_ENTRY vtt_S19317C2[] = {
  {&(_ZTV8S19317C2[3]),  3,24},
  {&(_ZTV8S19317C2[23]),  23,24},
};
extern VTBL_ENTRY _ZTI8S19317C2[];
extern  VTBL_ENTRY _ZTV8S19317C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19317C2[];
Class_Descriptor cd_S19317C2 = {  "S19317C2", // class name
  bases_S19317C2, 4,
  &(vtc_S19317C2[0]), // expected_vtbl_contents
  &(vtt_S19317C2[0]), // expected_vtt_contents
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI8S19317C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19317C2),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19317C2),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

struct  S19317C9  {
  short s19317c9f0:16;
  __tsi64 s19317c9f1;
  void *s19317c9f2[8];
  virtual void  v14(); // _ZN8S19317C93v14Ev
  virtual void  v15(); // _ZN8S19317C93v15Ev
  ~S19317C9(); // tgen
  S19317C9(); // tgen
};
//SIG(-1 S19317C9) C1{ v1 v2 Fs:16 FL Fp[8]}


void  S19317C9 ::v14(){vfunc_called(this, "_ZN8S19317C93v14Ev");}
void  S19317C9 ::v15(){vfunc_called(this, "_ZN8S19317C93v15Ev");}
S19317C9 ::~S19317C9(){ note_dtor("S19317C9", this);} // tgen
S19317C9 ::S19317C9(){ note_ctor("S19317C9", this);} // tgen

static void Test_S19317C9()
{
  extern Class_Descriptor cd_S19317C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S19317C9, buf);
    S19317C9 *dp, &lv = *(dp=new (buf) S19317C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S19317C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C9)");
    set_bf_and_test(lv, s19317c9f0, ABISELECT(8,4), 0, 16, 1, "S19317C9");
    set_bf_and_test(lv, s19317c9f0, ABISELECT(8,4), 0, 16, hide_sll(1LL<<15), "S19317C9");
    check_field_offset(lv, s19317c9f1, ABISELECT(16,8), "S19317C9.s19317c9f1");
    check_field_offset(lv, s19317c9f2, ABISELECT(24,16), "S19317C9.s19317c9f2");
    test_class_info(&lv, &cd_S19317C9);
    dp->~S19317C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C9(Test_S19317C9, "S19317C9", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN8S19317C9C1Ev();
extern void _ZN8S19317C9D1Ev();
Name_Map name_map_S19317C9[] = {
  NSPAIR(_ZN8S19317C9C1Ev),
  NSPAIR(_ZN8S19317C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19317C9[];
extern void _ZN8S19317C93v14Ev();
extern void _ZN8S19317C93v15Ev();
static  VTBL_ENTRY vtc_S19317C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C9[0]),
  (VTBL_ENTRY)&_ZN8S19317C93v14Ev,
  (VTBL_ENTRY)&_ZN8S19317C93v15Ev,
};
extern VTBL_ENTRY _ZTI8S19317C9[];
extern  VTBL_ENTRY _ZTV8S19317C9[];
Class_Descriptor cd_S19317C9 = {  "S19317C9", // class name
  0,0,//no base classes
  &(vtc_S19317C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI8S19317C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19317C9),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  S19317C10  : S19317C6 , S19317C9 , S19317C3 , virtual S19317C4 , S19317C5 {
  int s19317c10f0;
  virtual  ~S19317C10(); // _ZN9S19317C10D2Ev
  virtual void  v16(); // _ZN9S19317C103v16Ev
  virtual void  v17(); // _ZN9S19317C103v17Ev
  virtual void  v18(); // _ZN9S19317C103v18Ev
  S19317C10(); // tgen
};
//SIG(-1 S19317C10) C1{ BC2{ v4 Fi} BC3{ v5 v6 Fs:16 FL Fp[8]} BC4{ v7} VBC5{ BC6{ v8 v9 v10 v11 v12 v13 Fp[4]} vd v14 v15 FL} BC6 vd v1 v2 v3 Fi}


 S19317C10 ::~S19317C10(){ note_dtor("S19317C10", this);}
void  S19317C10 ::v16(){vfunc_called(this, "_ZN9S19317C103v16Ev");}
void  S19317C10 ::v17(){vfunc_called(this, "_ZN9S19317C103v17Ev");}
void  S19317C10 ::v18(){vfunc_called(this, "_ZN9S19317C103v18Ev");}
S19317C10 ::S19317C10(){ note_ctor("S19317C10", this);} // tgen

static void Test_S19317C10()
{
  extern Class_Descriptor cd_S19317C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,29)];
    init_test(&cd_S19317C10, buf);
    S19317C10 *dp, &lv = *(dp=new (buf) S19317C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,112), "sizeof(S19317C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C10)");
    check_base_class_offset(lv, (S19317C6*), 0, "S19317C10");
    check_base_class_offset(lv, (S19317C9*), ABISELECT(16,8), "S19317C10");
    check_base_class_offset(lv, (S19317C3*), ABISELECT(104,56), "S19317C10");
    check_base_class_offset(lv, (S19317C5*)(S19317C4*), ABISELECT(160,84), "S19317C10");
    check_base_class_offset(lv, (S19317C4*), ABISELECT(160,84), "S19317C10");
    /*is_ambiguous_... S19317C10::S19317C5 */ AMB_check_base_class_offset(lv, (S19317C5*), ABISELECT(112,60), "S19317C10");
    check_field_offset(lv, s19317c10f0, ABISELECT(152,80), "S19317C10.s19317c10f0");
    test_class_info(&lv, &cd_S19317C10);
    dp->~S19317C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C10(Test_S19317C10, "S19317C10", ABISELECT(208,112));

#else // __cplusplus

extern void _ZN9S19317C10C1Ev();
extern void _ZN9S19317C10D2Ev();
Name_Map name_map_S19317C10[] = {
  NSPAIR(_ZN9S19317C10C1Ev),
  NSPAIR(_ZN9S19317C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19317C6;
extern VTBL_ENTRY _ZTI8S19317C6[];
extern  VTBL_ENTRY _ZTV8S19317C6[];
extern Class_Descriptor cd_S19317C9;
extern VTBL_ENTRY _ZTI8S19317C9[];
extern  VTBL_ENTRY _ZTV8S19317C9[];
extern Class_Descriptor cd_S19317C3;
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C4;
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
static Base_Class bases_S19317C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19317C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19317C9,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_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_S19317C3,    ABISELECT(104,56), //bcp->offset
    13, //bcp->virtual_function_table_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_S19317C5,    ABISELECT(160,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19317C4,    ABISELECT(160,84), //bcp->offset
    24, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19317C5,    ABISELECT(112,60), //bcp->offset
    16, //bcp->virtual_function_table_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 _ZTI9S19317C10[];
extern void _ZN8S19317C63v11Ev();
extern void _ZN9S19317C10D1Ev();
extern void _ZN9S19317C10D0Ev();
extern void _ZN9S19317C103v16Ev();
extern void _ZN9S19317C103v17Ev();
extern void _ZN9S19317C103v18Ev();
extern void _ZN8S19317C93v14Ev();
extern void _ZN8S19317C93v15Ev();
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev)();
extern void ABISELECT(_ZThn160_N9S19317C10D1Ev,_ZThn84_N9S19317C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev)();
extern void ABISELECT(_ZThn160_N9S19317C10D0Ev,_ZThn84_N9S19317C10D0Ev)() __attribute__((weak));
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
static  VTBL_ENTRY vtc_S19317C10[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
  (VTBL_ENTRY)&_ZN9S19317C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19317C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v16Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v18Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C93v14Ev,
  (VTBL_ENTRY)&_ZN8S19317C93v15Ev,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
};
extern VTBL_ENTRY _ZTV9S19317C10[];
static  VTT_ENTRY vtt_S19317C10[] = {
  {&(_ZTV9S19317C10[3]),  3,45},
  {&(_ZTV9S19317C10[35]),  35,45},
};
extern VTBL_ENTRY _ZTI9S19317C10[];
extern  VTBL_ENTRY _ZTV9S19317C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19317C10[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19317C10D0Ev,_ZThn84_N9S19317C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S19317C10D1Ev,_ZThn84_N9S19317C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19317C10 = {  "S19317C10", // class name
  bases_S19317C10, 6,
  &(vtc_S19317C10[0]), // expected_vtbl_contents
  &(vtt_S19317C10[0]), // expected_vtt_contents
  ABISELECT(208,112), // object size
  NSPAIRA(_ZTI9S19317C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19317C10),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19317C10),2, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19317C8  : virtual S19317C2 , S19317C3 , S19317C4 , virtual S19317C9 , S19317C10 {
  char s19317c8f0;
  virtual  ~S19317C8(); // _ZN8S19317C8D2Ev
  virtual void  v19(); // _ZN8S19317C83v19Ev
  virtual void  v20(); // _ZN8S19317C83v20Ev
  virtual void  v21(); // _ZN8S19317C83v21Ev
  virtual void  v22(); // _ZN8S19317C83v22Ev
  virtual void  v23(); // _ZN8S19317C83v23Ev
  virtual void  v24(); // _ZN8S19317C83v24Ev
  virtual void  v25(); // _ZN8S19317C83v25Ev
  S19317C8(); // tgen
};
//SIG(-1 S19317C8) C1{ VBC2{ BC3{ v8} BC4{ BC5{ v9 v10 v11 v12 v13 v14 Fp[4]} vd v15 v16 FL} VBC6{ v17 Fi} v18 v19 Fi FC7{}} BC3 BC4 VBC8{ v20 v21 Fs:16 FL Fp[8]} BC9{ BC6 BC8 BC3 VBC4 BC5 vd v22 v23 v24 Fi} vd v1 v2 v3 v4 v5 v6 v7 Fc}


 S19317C8 ::~S19317C8(){ note_dtor("S19317C8", this);}
void  S19317C8 ::v19(){vfunc_called(this, "_ZN8S19317C83v19Ev");}
void  S19317C8 ::v20(){vfunc_called(this, "_ZN8S19317C83v20Ev");}
void  S19317C8 ::v21(){vfunc_called(this, "_ZN8S19317C83v21Ev");}
void  S19317C8 ::v22(){vfunc_called(this, "_ZN8S19317C83v22Ev");}
void  S19317C8 ::v23(){vfunc_called(this, "_ZN8S19317C83v23Ev");}
void  S19317C8 ::v24(){vfunc_called(this, "_ZN8S19317C83v24Ev");}
void  S19317C8 ::v25(){vfunc_called(this, "_ZN8S19317C83v25Ev");}
S19317C8 ::S19317C8(){ note_ctor("S19317C8", this);} // tgen

static void Test_S19317C8()
{
  extern Class_Descriptor cd_S19317C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(55,62)];
    init_test(&cd_S19317C8, buf);
    S19317C8 *dp, &lv = *(dp=new (buf) S19317C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,244), "sizeof(S19317C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C8)");
    check_base_class_offset(lv, (S19317C3*)(S19317C2*), ABISELECT(216,120), "S19317C8");
    check_base_class_offset(lv, (S19317C5*)(S19317C4*)(S19317C2*), ABISELECT(224,124), "S19317C8");
    check_base_class_offset(lv, (S19317C4*)(S19317C2*), ABISELECT(224,124), "S19317C8");
    check_base_class_offset(lv, (S19317C6*)(S19317C2*), ABISELECT(280,160), "S19317C8");
    check_base_class_offset(lv, (S19317C2*), ABISELECT(216,120), "S19317C8");
    /*is_ambiguous_... S19317C8::S19317C3 */ AMB_check_base_class_offset(lv, (S19317C3*), 0, "S19317C8");
    /*is_ambiguous_... S19317C8::S19317C4 */ AMB_check_base_class_offset(lv, (S19317C5*)(S19317C4*), ABISELECT(8,4), "S19317C8");
    /*is_ambiguous_... S19317C8::S19317C4 */ AMB_check_base_class_offset(lv, (S19317C4*), ABISELECT(8,4), "S19317C8");
    /*is_ambiguous_... S19317C8::S19317C9 */ AMB_check_base_class_offset(lv, (S19317C9*), ABISELECT(296,168), "S19317C8");
    check_base_class_offset(lv, (S19317C6*)(S19317C10*), ABISELECT(56,32), "S19317C8");
    check_base_class_offset(lv, (S19317C9*)(S19317C10*), ABISELECT(72,40), "S19317C8");
    check_base_class_offset(lv, (S19317C3*)(S19317C10*), ABISELECT(160,88), "S19317C8");
    /*is_ambiguous_... S19317C8::S19317C4 */ AMB_check_base_class_offset(lv, (S19317C5*)(S19317C4*), ABISELECT(384,216), "S19317C8");
    check_base_class_offset(lv, (S19317C4*)(S19317C10*), ABISELECT(384,216), "S19317C8");
    /*is_ambiguous_... S19317C10::S19317C5 */ AMB_check_base_class_offset(lv, (S19317C5*)(S19317C10*), ABISELECT(168,92), "S19317C8");
    check_base_class_offset(lv, (S19317C10*), ABISELECT(56,32), "S19317C8");
    check_field_offset(lv, s19317c8f0, ABISELECT(212,116), "S19317C8.s19317c8f0");
    test_class_info(&lv, &cd_S19317C8);
    dp->~S19317C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C8(Test_S19317C8, "S19317C8", ABISELECT(432,244));

#else // __cplusplus

extern void _ZN8S19317C8C1Ev();
extern void _ZN8S19317C8D2Ev();
Name_Map name_map_S19317C8[] = {
  NSPAIR(_ZN8S19317C8C1Ev),
  NSPAIR(_ZN8S19317C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19317C3;
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C4;
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
extern Class_Descriptor cd_S19317C6;
extern VTBL_ENTRY _ZTI8S19317C6[];
extern  VTBL_ENTRY _ZTV8S19317C6[];
extern Class_Descriptor cd_S19317C2;
extern VTBL_ENTRY _ZTI8S19317C2[];
extern  VTBL_ENTRY _ZTV8S19317C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19317C2[];
extern Class_Descriptor cd_S19317C3;
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C4;
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
extern Class_Descriptor cd_S19317C9;
extern VTBL_ENTRY _ZTI8S19317C9[];
extern  VTBL_ENTRY _ZTV8S19317C9[];
extern Class_Descriptor cd_S19317C6;
extern VTBL_ENTRY _ZTI8S19317C6[];
extern  VTBL_ENTRY _ZTV8S19317C6[];
extern Class_Descriptor cd_S19317C9;
extern VTBL_ENTRY _ZTI8S19317C9[];
extern  VTBL_ENTRY _ZTV8S19317C9[];
extern Class_Descriptor cd_S19317C3;
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C4;
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C10;
extern VTBL_ENTRY _ZTI9S19317C10[];
extern  VTBL_ENTRY _ZTV9S19317C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19317C10[];
static Base_Class bases_S19317C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19317C3,    ABISELECT(216,120), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S19317C5,    ABISELECT(224,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
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19317C4,    ABISELECT(224,124), //bcp->offset
    72, //bcp->virtual_function_table_offset
    2, //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
    4, //immediately_derived
  0, 0},
  {&cd_S19317C6,    ABISELECT(280,160), //bcp->offset
    84, //bcp->virtual_function_table_offset
    3, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19317C2,    ABISELECT(216,120), //bcp->offset
    52, //bcp->virtual_function_table_offset
    15, //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_S19317C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19317C5,    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
    7, //immediately_derived
  0, 0},
  {&cd_S19317C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_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_S19317C9,    ABISELECT(296,168), //bcp->offset
    88, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19317C6,    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
    12, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19317C9,    ABISELECT(72,40), //bcp->offset
    37, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S19317C3,    ABISELECT(160,88), //bcp->offset
    41, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S19317C5,    ABISELECT(384,216), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19317C4,    ABISELECT(384,216), //bcp->offset
    94, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19317C5,    ABISELECT(168,92), //bcp->offset
    44, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S19317C10,    ABISELECT(56,32), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19317C8[];
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C8D1Ev();
extern void _ZN8S19317C8D0Ev();
extern void _ZN8S19317C83v19Ev();
extern void _ZN8S19317C83v20Ev();
extern void _ZN8S19317C83v21Ev();
extern void _ZN8S19317C83v22Ev();
extern void _ZN8S19317C83v23Ev();
extern void _ZN8S19317C83v24Ev();
extern void _ZN8S19317C83v25Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZThn8_N8S19317C8D1Ev,_ZThn4_N8S19317C8D1Ev)();
extern void ABISELECT(_ZThn8_N8S19317C8D0Ev,_ZThn4_N8S19317C8D0Ev)();
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
extern void _ZN8S19317C63v11Ev();
extern void ABISELECT(_ZThn56_N8S19317C8D1Ev,_ZThn32_N8S19317C8D1Ev)();
extern void ABISELECT(_ZThn56_N8S19317C8D0Ev,_ZThn32_N8S19317C8D0Ev)();
extern void _ZN9S19317C103v16Ev();
extern void _ZN9S19317C103v17Ev();
extern void _ZN9S19317C103v18Ev();
extern void _ZN8S19317C93v14Ev();
extern void _ZN8S19317C93v15Ev();
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C23v12Ev();
extern void _ZN8S19317C23v13Ev();
extern void ABISELECT(_ZTv0_n56_N8S19317C8D1Ev,_ZTv0_n28_N8S19317C8D1Ev)();
extern void ABISELECT(_ZThn216_N8S19317C8D1Ev,_ZThn120_N8S19317C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19317C8D0Ev,_ZTv0_n28_N8S19317C8D0Ev)();
extern void ABISELECT(_ZThn216_N8S19317C8D0Ev,_ZThn120_N8S19317C8D0Ev)() __attribute__((weak));
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTvn8_n56_N8S19317C8D1Ev,_ZTvn4_n28_N8S19317C8D1Ev)();
extern void ABISELECT(_ZTvn8_n56_N8S19317C8D0Ev,_ZTvn4_n28_N8S19317C8D0Ev)();
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
extern void _ZN8S19317C63v11Ev();
extern void _ZN8S19317C93v14Ev();
extern void _ZN8S19317C93v15Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTv0_n72_N8S19317C8D1Ev,_ZTv0_n36_N8S19317C8D1Ev)();
extern void ABISELECT(_ZThn384_N8S19317C8D1Ev,_ZThn216_N8S19317C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19317C8D0Ev,_ZTv0_n36_N8S19317C8D0Ev)();
extern void ABISELECT(_ZThn384_N8S19317C8D0Ev,_ZThn216_N8S19317C8D0Ev)() __attribute__((weak));
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
static  VTBL_ENTRY vtc_S19317C8[] = {
  ABISELECT(384,216),
  ABISELECT(296,168),
  ABISELECT(280,160),
  ABISELECT(216,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19317C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v25Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19317C8D1Ev,_ZThn4_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19317C8D0Ev,_ZThn4_N8S19317C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
  ABISELECT(328,184),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19317C8D1Ev,_ZThn32_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19317C8D0Ev,_ZThn32_N8S19317C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19317C103v16Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v18Ev,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C93v14Ev,
  (VTBL_ENTRY)&_ZN8S19317C93v15Ev,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(-216,-120),
  0,
  0,
  0,
  ABISELECT(64,40),
  ABISELECT(-216,-120),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19317C8D1Ev,_ZTv0_n28_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19317C8D0Ev,_ZTv0_n28_N8S19317C8D0Ev),
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n56_N8S19317C8D1Ev,_ZTvn4_n28_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n56_N8S19317C8D0Ev,_ZTvn4_n28_N8S19317C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
  0,
  ABISELECT(-280,-160),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
  0,
  0,
  ABISELECT(-296,-168),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C93v14Ev,
  (VTBL_ENTRY)&_ZN8S19317C93v15Ev,
  0,
  0,
  ABISELECT(-384,-216),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-216),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19317C8D1Ev,_ZTv0_n36_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19317C8D0Ev,_ZTv0_n36_N8S19317C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
};
extern VTBL_ENTRY _ZTV8S19317C8[];
extern void _ZN8S19317C63v11Ev();
extern void _ZN9S19317C10D1Ev();
extern void _ZN9S19317C10D0Ev();
extern void _ZN9S19317C103v16Ev();
extern void _ZN9S19317C103v17Ev();
extern void _ZN9S19317C103v18Ev();
static  VTBL_ENTRY _tg__ZTV9S19317C10__8S19317C8[] = {
  ABISELECT(328,184),
  0,
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
  (VTBL_ENTRY)&_ZN9S19317C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19317C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v16Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v18Ev,
};
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev)();
extern void ABISELECT(_ZThn328_N9S19317C10D1Ev,_ZThn184_N9S19317C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev)();
extern void ABISELECT(_ZThn328_N9S19317C10D0Ev,_ZThn184_N9S19317C10D0Ev)() __attribute__((weak));
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C4__9S19317C10__8S19317C8[] = {
  0,
  0,
  ABISELECT(-328,-184),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-184),
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
};
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C23v12Ev();
extern void _ZN8S19317C23v13Ev();
extern void _ZN8S19317C2D1Ev();
extern void _ZN8S19317C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C2__8S19317C8[] = {
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C2[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19317C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19317C2D0Ev,
};
extern void _ZN8S19317C63v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C6__8S19317C2__8S19317C8[] = {
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19317C2[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
};
static  VTT_ENTRY vtt_S19317C8[] = {
  {&(_ZTV8S19317C8[6]),  6,115},
  {&(_tg__ZTV9S19317C10__8S19317C8[3]),  3,9},
  {&(_tg__ZTV8S19317C4__9S19317C10__8S19317C8[11]),  11,21},
  {&(_ZTV8S19317C8[67]),  67,115},
  {&(_ZTV8S19317C8[74]),  74,115},
  {&(_ZTV8S19317C8[87]),  87,115},
  {&(_ZTV8S19317C8[92]),  92,115},
  {&(_ZTV8S19317C8[31]),  31,115},
  {&(_ZTV8S19317C8[105]),  105,115},
  {&(_tg__ZTV8S19317C2__8S19317C8[3]),  3,8},
  {&(_tg__ZTV8S19317C6__8S19317C2__8S19317C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19317C8[];
extern  VTBL_ENTRY _ZTV8S19317C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19317C8[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N9S19317C10D0Ev,_ZThn184_N9S19317C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N9S19317C10D1Ev,_ZThn184_N9S19317C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19317C8D0Ev,_ZTv0_n36_N8S19317C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19317C8D0Ev,_ZThn216_N8S19317C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19317C8D1Ev,_ZTv0_n36_N8S19317C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19317C8D1Ev,_ZThn216_N8S19317C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19317C8D0Ev,_ZTv0_n28_N8S19317C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19317C8D0Ev,_ZThn120_N8S19317C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19317C8D1Ev,_ZTv0_n28_N8S19317C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19317C8D1Ev,_ZThn120_N8S19317C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19317C8 = {  "S19317C8", // class name
  bases_S19317C8, 16,
  &(vtc_S19317C8[0]), // expected_vtbl_contents
  &(vtt_S19317C8[0]), // expected_vtt_contents
  ABISELECT(432,244), // object size
  NSPAIRA(_ZTI8S19317C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19317C8),115, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19317C8),11, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19317C1  : virtual S19317C2 , S19317C8 {
  virtual  ~S19317C1(); // _ZN8S19317C1D2Ev
  virtual void  v1(); // _ZN8S19317C12v1Ev
  S19317C1(); // tgen
};
//SIG(1 S19317C1) C1{ VBC2{ BC3{ v2} BC4{ BC5{ v3 v4 v5 v6 v7 v8 Fp[4]} vd v9 v10 FL} VBC6{ v11 Fi} v12 v13 Fi FC7{}} BC8{ VBC2 BC3 BC4 VBC9{ v14 v15 Fs:16 FL Fp[8]} BC10{ BC6 BC9 BC3 VBC4 BC5 vd v16 v17 v18 Fi} vd v19 v20 v21 v22 v23 v24 v25 Fc} vd v1}


 S19317C1 ::~S19317C1(){ note_dtor("S19317C1", this);}
void  S19317C1 ::v1(){vfunc_called(this, "_ZN8S19317C12v1Ev");}
S19317C1 ::S19317C1(){ note_ctor("S19317C1", this);} // tgen

static void Test_S19317C1()
{
  extern Class_Descriptor cd_S19317C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(55,62)];
    init_test(&cd_S19317C1, buf);
    S19317C1 *dp, &lv = *(dp=new (buf) S19317C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,244), "sizeof(S19317C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19317C1)");
    check_base_class_offset(lv, (S19317C3*)(S19317C2*), ABISELECT(216,120), "S19317C1");
    check_base_class_offset(lv, (S19317C5*)(S19317C4*)(S19317C2*), ABISELECT(224,124), "S19317C1");
    check_base_class_offset(lv, (S19317C4*)(S19317C2*), ABISELECT(224,124), "S19317C1");
    check_base_class_offset(lv, (S19317C6*)(S19317C2*), ABISELECT(280,160), "S19317C1");
    check_base_class_offset(lv, (S19317C2*), ABISELECT(216,120), "S19317C1");
    check_base_class_offset(lv, (S19317C2*)(S19317C8*), ABISELECT(216,120), "S19317C1");
    /*is_ambiguous_... S19317C8::S19317C3 */ AMB_check_base_class_offset(lv, (S19317C3*)(S19317C8*), 0, "S19317C1");
    /*is_ambiguous_... S19317C8::S19317C4 */ AMB_check_base_class_offset(lv, (S19317C5*)(S19317C4*)(S19317C8*), ABISELECT(8,4), "S19317C1");
    /*is_ambiguous_... S19317C8::S19317C4 */ AMB_check_base_class_offset(lv, (S19317C4*)(S19317C8*), ABISELECT(8,4), "S19317C1");
    /*is_ambiguous_... S19317C8::S19317C9 */ AMB_check_base_class_offset(lv, (S19317C9*)(S19317C8*), ABISELECT(296,168), "S19317C1");
    check_base_class_offset(lv, (S19317C6*)(S19317C10*)(S19317C8*), ABISELECT(56,32), "S19317C1");
    check_base_class_offset(lv, (S19317C9*)(S19317C10*)(S19317C8*), ABISELECT(72,40), "S19317C1");
    check_base_class_offset(lv, (S19317C3*)(S19317C10*)(S19317C8*), ABISELECT(160,88), "S19317C1");
    /*is_ambiguous_... S19317C1::S19317C4 */ AMB_check_base_class_offset(lv, (S19317C5*)(S19317C4*), ABISELECT(384,216), "S19317C1");
    check_base_class_offset(lv, (S19317C4*)(S19317C10*)(S19317C8*), ABISELECT(384,216), "S19317C1");
    /*is_ambiguous_... S19317C10::S19317C5 */ AMB_check_base_class_offset(lv, (S19317C5*)(S19317C10*)(S19317C8*), ABISELECT(168,92), "S19317C1");
    check_base_class_offset(lv, (S19317C10*)(S19317C8*), ABISELECT(56,32), "S19317C1");
    check_base_class_offset(lv, (S19317C8*), 0, "S19317C1");
    test_class_info(&lv, &cd_S19317C1);
    dp->~S19317C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19317C1(Test_S19317C1, "S19317C1", ABISELECT(432,244));

#else // __cplusplus

extern void _ZN8S19317C1C1Ev();
extern void _ZN8S19317C1D2Ev();
Name_Map name_map_S19317C1[] = {
  NSPAIR(_ZN8S19317C1C1Ev),
  NSPAIR(_ZN8S19317C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19317C3;
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C4;
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
extern Class_Descriptor cd_S19317C6;
extern VTBL_ENTRY _ZTI8S19317C6[];
extern  VTBL_ENTRY _ZTV8S19317C6[];
extern Class_Descriptor cd_S19317C2;
extern VTBL_ENTRY _ZTI8S19317C2[];
extern  VTBL_ENTRY _ZTV8S19317C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19317C2[];
extern Class_Descriptor cd_S19317C3;
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C4;
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
extern Class_Descriptor cd_S19317C9;
extern VTBL_ENTRY _ZTI8S19317C9[];
extern  VTBL_ENTRY _ZTV8S19317C9[];
extern Class_Descriptor cd_S19317C6;
extern VTBL_ENTRY _ZTI8S19317C6[];
extern  VTBL_ENTRY _ZTV8S19317C6[];
extern Class_Descriptor cd_S19317C9;
extern VTBL_ENTRY _ZTI8S19317C9[];
extern  VTBL_ENTRY _ZTV8S19317C9[];
extern Class_Descriptor cd_S19317C3;
extern VTBL_ENTRY _ZTI8S19317C3[];
extern  VTBL_ENTRY _ZTV8S19317C3[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C4;
extern VTBL_ENTRY _ZTI8S19317C4[];
extern  VTBL_ENTRY _ZTV8S19317C4[];
extern Class_Descriptor cd_S19317C5;
extern VTBL_ENTRY _ZTI8S19317C5[];
extern  VTBL_ENTRY _ZTV8S19317C5[];
extern Class_Descriptor cd_S19317C10;
extern VTBL_ENTRY _ZTI9S19317C10[];
extern  VTBL_ENTRY _ZTV9S19317C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19317C10[];
extern Class_Descriptor cd_S19317C8;
extern VTBL_ENTRY _ZTI8S19317C8[];
extern  VTBL_ENTRY _ZTV8S19317C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19317C8[];
static Base_Class bases_S19317C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19317C3,    ABISELECT(216,120), //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S19317C5,    ABISELECT(224,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
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19317C4,    ABISELECT(224,124), //bcp->offset
    73, //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19317C6,    ABISELECT(280,160), //bcp->offset
    85, //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
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19317C2,    ABISELECT(216,120), //bcp->offset
    53, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19317C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19317C5,    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
    7, //immediately_derived
  0, 0},
  {&cd_S19317C4,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 0},
  {&cd_S19317C9,    ABISELECT(296,168), //bcp->offset
    89, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19317C6,    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
    12, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19317C9,    ABISELECT(72,40), //bcp->offset
    38, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S19317C3,    ABISELECT(160,88), //bcp->offset
    42, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S19317C5,    ABISELECT(384,216), //bcp->offset
    -1, //bcp->virtual_function_table_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_S19317C4,    ABISELECT(384,216), //bcp->offset
    95, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19317C5,    ABISELECT(168,92), //bcp->offset
    45, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S19317C10,    ABISELECT(56,32), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19317C8,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19317C1[];
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C1D1Ev();
extern void _ZN8S19317C1D0Ev();
extern void _ZN8S19317C83v19Ev();
extern void _ZN8S19317C83v20Ev();
extern void _ZN8S19317C83v21Ev();
extern void _ZN8S19317C83v22Ev();
extern void _ZN8S19317C83v23Ev();
extern void _ZN8S19317C83v24Ev();
extern void _ZN8S19317C83v25Ev();
extern void _ZN8S19317C12v1Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZThn8_N8S19317C1D1Ev,_ZThn4_N8S19317C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19317C1D0Ev,_ZThn4_N8S19317C1D0Ev)();
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
extern void _ZN8S19317C63v11Ev();
extern void ABISELECT(_ZThn56_N8S19317C1D1Ev,_ZThn32_N8S19317C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S19317C1D0Ev,_ZThn32_N8S19317C1D0Ev)();
extern void _ZN9S19317C103v16Ev();
extern void _ZN9S19317C103v17Ev();
extern void _ZN9S19317C103v18Ev();
extern void _ZN8S19317C93v14Ev();
extern void _ZN8S19317C93v15Ev();
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C23v12Ev();
extern void _ZN8S19317C23v13Ev();
extern void ABISELECT(_ZTv0_n56_N8S19317C1D1Ev,_ZTv0_n28_N8S19317C1D1Ev)();
extern void ABISELECT(_ZThn216_N8S19317C1D1Ev,_ZThn120_N8S19317C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19317C1D0Ev,_ZTv0_n28_N8S19317C1D0Ev)();
extern void ABISELECT(_ZThn216_N8S19317C1D0Ev,_ZThn120_N8S19317C1D0Ev)() __attribute__((weak));
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTvn8_n56_N8S19317C1D1Ev,_ZTvn4_n28_N8S19317C1D1Ev)();
extern void ABISELECT(_ZTvn8_n56_N8S19317C1D0Ev,_ZTvn4_n28_N8S19317C1D0Ev)();
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
extern void _ZN8S19317C63v11Ev();
extern void _ZN8S19317C93v14Ev();
extern void _ZN8S19317C93v15Ev();
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTv0_n72_N8S19317C1D1Ev,_ZTv0_n36_N8S19317C1D1Ev)();
extern void ABISELECT(_ZThn384_N8S19317C1D1Ev,_ZThn216_N8S19317C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19317C1D0Ev,_ZTv0_n36_N8S19317C1D0Ev)();
extern void ABISELECT(_ZThn384_N8S19317C1D0Ev,_ZThn216_N8S19317C1D0Ev)() __attribute__((weak));
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
static  VTBL_ENTRY vtc_S19317C1[] = {
  ABISELECT(384,216),
  ABISELECT(296,168),
  ABISELECT(280,160),
  ABISELECT(216,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19317C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v25Ev,
  (VTBL_ENTRY)&_ZN8S19317C12v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19317C1D1Ev,_ZThn4_N8S19317C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S19317C1D0Ev,_ZThn4_N8S19317C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
  ABISELECT(328,184),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19317C1D1Ev,_ZThn32_N8S19317C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19317C1D0Ev,_ZThn32_N8S19317C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19317C103v16Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v18Ev,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C93v14Ev,
  (VTBL_ENTRY)&_ZN8S19317C93v15Ev,
  ABISELECT(-160,-88),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(-216,-120),
  0,
  0,
  0,
  ABISELECT(64,40),
  ABISELECT(-216,-120),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19317C1D1Ev,_ZTv0_n28_N8S19317C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19317C1D0Ev,_ZTv0_n28_N8S19317C1D0Ev),
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n56_N8S19317C1D1Ev,_ZTvn4_n28_N8S19317C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n56_N8S19317C1D0Ev,_ZTvn4_n28_N8S19317C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
  0,
  ABISELECT(-280,-160),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
  0,
  0,
  ABISELECT(-296,-168),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C93v14Ev,
  (VTBL_ENTRY)&_ZN8S19317C93v15Ev,
  0,
  0,
  ABISELECT(-384,-216),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-216),
  (VTBL_ENTRY)&(_ZTI8S19317C1[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19317C1D1Ev,_ZTv0_n36_N8S19317C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19317C1D0Ev,_ZTv0_n36_N8S19317C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
};
extern VTBL_ENTRY _ZTV8S19317C1[];
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C8D1Ev();
extern void _ZN8S19317C8D0Ev();
extern void _ZN8S19317C83v19Ev();
extern void _ZN8S19317C83v20Ev();
extern void _ZN8S19317C83v21Ev();
extern void _ZN8S19317C83v22Ev();
extern void _ZN8S19317C83v23Ev();
extern void _ZN8S19317C83v24Ev();
extern void _ZN8S19317C83v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C8__8S19317C1[] = {
  ABISELECT(384,216),
  ABISELECT(296,168),
  ABISELECT(280,160),
  ABISELECT(216,120),
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19317C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v21Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v22Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v23Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v24Ev,
  (VTBL_ENTRY)&_ZN8S19317C83v25Ev,
};
extern void _ZN8S19317C63v11Ev();
extern void _ZN9S19317C10D1Ev();
extern void _ZN9S19317C10D0Ev();
extern void _ZN9S19317C103v16Ev();
extern void _ZN9S19317C103v17Ev();
extern void _ZN9S19317C103v18Ev();
static  VTBL_ENTRY _tg__ZTV9S19317C108S19317C8__8S19317C1[] = {
  ABISELECT(328,184),
  0,
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
  (VTBL_ENTRY)&_ZN9S19317C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19317C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v16Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v18Ev,
};
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev)();
extern void ABISELECT(_ZThn328_N9S19317C10D1Ev,_ZThn184_N9S19317C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev)();
extern void ABISELECT(_ZThn328_N9S19317C10D0Ev,_ZThn184_N9S19317C10D0Ev)() __attribute__((weak));
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C4__9S19317C108S19317C8__8S19317C1[] = {
  0,
  0,
  ABISELECT(-328,-184),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-328,-184),
  (VTBL_ENTRY)&(_ZTI9S19317C10[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
};
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C23v12Ev();
extern void _ZN8S19317C23v13Ev();
extern void ABISELECT(_ZTv0_n56_N8S19317C8D1Ev,_ZTv0_n28_N8S19317C8D1Ev)();
extern void ABISELECT(_ZThn216_N8S19317C8D1Ev,_ZThn120_N8S19317C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19317C8D0Ev,_ZTv0_n28_N8S19317C8D0Ev)();
extern void ABISELECT(_ZThn216_N8S19317C8D0Ev,_ZThn120_N8S19317C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19317C2__8S19317C8__8S19317C1[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(8,4),
  ABISELECT(-216,-120),
  0,
  0,
  0,
  ABISELECT(64,40),
  ABISELECT(-216,-120),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19317C8D1Ev,_ZTv0_n28_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19317C8D0Ev,_ZTv0_n28_N8S19317C8D0Ev),
};
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTvn8_n56_N8S19317C8D1Ev,_ZTvn4_n28_N8S19317C8D1Ev)();
extern void ABISELECT(_ZTvn8_n56_N8S19317C8D0Ev,_ZTvn4_n28_N8S19317C8D0Ev)();
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C48S19317C2__8S19317C8__8S19317C1[] = {
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n56_N8S19317C8D1Ev,_ZTvn4_n28_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n56_N8S19317C8D0Ev,_ZTvn4_n28_N8S19317C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
};
extern void _ZN8S19317C63v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C6__8S19317C8__8S19317C1[] = {
  0,
  ABISELECT(-280,-160),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
};
extern void _ZN8S19317C93v14Ev();
extern void _ZN8S19317C93v15Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C9__8S19317C8__8S19317C1[] = {
  0,
  0,
  ABISELECT(-296,-168),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C93v14Ev,
  (VTBL_ENTRY)&_ZN8S19317C93v15Ev,
};
extern void _ZN8S19317C63v11Ev();
extern void ABISELECT(_ZThn56_N8S19317C8D1Ev,_ZThn32_N8S19317C8D1Ev)();
extern void ABISELECT(_ZThn56_N8S19317C8D0Ev,_ZThn32_N8S19317C8D0Ev)();
extern void _ZN9S19317C103v16Ev();
extern void _ZN9S19317C103v17Ev();
extern void _ZN9S19317C103v18Ev();
static  VTBL_ENTRY _tg__ZTV9S19317C10__8S19317C8__8S19317C1[] = {
  ABISELECT(328,184),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19317C8D1Ev,_ZThn32_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S19317C8D0Ev,_ZThn32_N8S19317C8D0Ev),
  (VTBL_ENTRY)&_ZN9S19317C103v16Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v17Ev,
  (VTBL_ENTRY)&_ZN9S19317C103v18Ev,
};
extern void _ZN8S19317C52v3Ev();
extern void _ZN8S19317C52v4Ev();
extern void _ZN8S19317C52v5Ev();
extern void _ZN8S19317C52v6Ev();
extern void _ZN8S19317C52v7Ev();
extern void _ZN8S19317C52v8Ev();
extern void ABISELECT(_ZTv0_n72_N8S19317C8D1Ev,_ZTv0_n36_N8S19317C8D1Ev)();
extern void ABISELECT(_ZThn384_N8S19317C8D1Ev,_ZThn216_N8S19317C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19317C8D0Ev,_ZTv0_n36_N8S19317C8D0Ev)();
extern void ABISELECT(_ZThn384_N8S19317C8D0Ev,_ZThn216_N8S19317C8D0Ev)() __attribute__((weak));
extern void _ZN8S19317C42v9Ev();
extern void _ZN8S19317C43v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C4__A2__8S19317C8__8S19317C1[] = {
  0,
  0,
  ABISELECT(-384,-216),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-384,-216),
  (VTBL_ENTRY)&(_ZTI8S19317C8[0]),
  (VTBL_ENTRY)&_ZN8S19317C52v3Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v4Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19317C52v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19317C8D1Ev,_ZTv0_n36_N8S19317C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19317C8D0Ev,_ZTv0_n36_N8S19317C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19317C42v9Ev,
  (VTBL_ENTRY)&_ZN8S19317C43v10Ev,
};
extern void _ZN8S19317C32v2Ev();
extern void _ZN8S19317C23v12Ev();
extern void _ZN8S19317C23v13Ev();
extern void _ZN8S19317C2D1Ev();
extern void _ZN8S19317C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C2__8S19317C1[] = {
  ABISELECT(64,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19317C2[0]),
  (VTBL_ENTRY)&_ZN8S19317C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v12Ev,
  (VTBL_ENTRY)&_ZN8S19317C23v13Ev,
  (VTBL_ENTRY)&_ZN8S19317C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19317C2D0Ev,
};
extern void _ZN8S19317C63v11Ev();
static  VTBL_ENTRY _tg__ZTV8S19317C6__8S19317C2__8S19317C1[] = {
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S19317C2[0]),
  (VTBL_ENTRY)&_ZN8S19317C63v11Ev,
};
static  VTT_ENTRY vtt_S19317C1[] = {
  {&(_ZTV8S19317C1[6]),  6,116},
  {&(_tg__ZTV8S19317C8__8S19317C1[6]),  6,16},
  {&(_tg__ZTV9S19317C108S19317C8__8S19317C1[3]),  3,9},
  {&(_tg__ZTV8S19317C4__9S19317C108S19317C8__8S19317C1[11]),  11,21},
  {&(_tg__ZTV8S19317C2__8S19317C8__8S19317C1[15]),  15,20},
  {&(_tg__ZTV8S19317C48S19317C2__8S19317C8__8S19317C1[2]),  2,12},
  {&(_tg__ZTV8S19317C6__8S19317C8__8S19317C1[3]),  3,4},
  {&(_tg__ZTV8S19317C9__8S19317C8__8S19317C1[4]),  4,6},
  {&(_tg__ZTV9S19317C10__8S19317C8__8S19317C1[3]),  3,9},
  {&(_tg__ZTV8S19317C4__A2__8S19317C8__8S19317C1[11]),  11,21},
  {&(_ZTV8S19317C1[68]),  68,116},
  {&(_ZTV8S19317C1[75]),  75,116},
  {&(_ZTV8S19317C1[88]),  88,116},
  {&(_ZTV8S19317C1[93]),  93,116},
  {&(_ZTV8S19317C1[32]),  32,116},
  {&(_ZTV8S19317C1[106]),  106,116},
  {&(_tg__ZTV8S19317C2__8S19317C1[3]),  3,8},
  {&(_tg__ZTV8S19317C6__8S19317C2__8S19317C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19317C1[];
extern  VTBL_ENTRY _ZTV8S19317C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19317C1[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19317C8D0Ev,_ZTv0_n36_N8S19317C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19317C8D0Ev,_ZThn216_N8S19317C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19317C8D1Ev,_ZTv0_n36_N8S19317C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19317C8D1Ev,_ZThn216_N8S19317C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19317C8D0Ev,_ZTv0_n28_N8S19317C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19317C8D0Ev,_ZThn120_N8S19317C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19317C8D1Ev,_ZTv0_n28_N8S19317C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19317C8D1Ev,_ZThn120_N8S19317C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19317C10D0Ev,_ZTv0_n36_N9S19317C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N9S19317C10D0Ev,_ZThn184_N9S19317C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S19317C10D1Ev,_ZTv0_n36_N9S19317C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N9S19317C10D1Ev,_ZThn184_N9S19317C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19317C1D0Ev,_ZTv0_n36_N8S19317C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19317C1D0Ev,_ZThn216_N8S19317C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19317C1D1Ev,_ZTv0_n36_N8S19317C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S19317C1D1Ev,_ZThn216_N8S19317C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19317C1D0Ev,_ZTv0_n28_N8S19317C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19317C1D0Ev,_ZThn120_N8S19317C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19317C1D1Ev,_ZTv0_n28_N8S19317C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S19317C1D1Ev,_ZThn120_N8S19317C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19317C1 = {  "S19317C1", // class name
  bases_S19317C1, 17,
  &(vtc_S19317C1[0]), // expected_vtbl_contents
  &(vtt_S19317C1[0]), // expected_vtt_contents
  ABISELECT(432,244), // object size
  NSPAIRA(_ZTI8S19317C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19317C1),116, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19317C1),18, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S350C6  {
  ::S4473C12_nt s350c6f0;
  int s350c6f1[2];
  char s350c6f2;
  virtual  ~S350C6(); // _ZN6S350C6D1Ev
  virtual void  v3(); // _ZN6S350C62v3Ev
  virtual void  v4(); // _ZN6S350C62v4Ev
  virtual void  v5(); // _ZN6S350C62v5Ev
  S350C6(); // tgen
};
//SIG(-1 S350C6) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S350C6 ::~S350C6(){ note_dtor("S350C6", this);}
void  S350C6 ::v3(){vfunc_called(this, "_ZN6S350C62v3Ev");}
void  S350C6 ::v4(){vfunc_called(this, "_ZN6S350C62v4Ev");}
void  S350C6 ::v5(){vfunc_called(this, "_ZN6S350C62v5Ev");}
S350C6 ::S350C6(){ note_ctor("S350C6", this);} // tgen

static void Test_S350C6()
{
  extern Class_Descriptor cd_S350C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S350C6, buf);
    S350C6 *dp, &lv = *(dp=new (buf) S350C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S350C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S350C6)");
    check_field_offset(lv, s350c6f0, ABISELECT(8,4), "S350C6.s350c6f0");
    check_field_offset(lv, s350c6f1, ABISELECT(24,16), "S350C6.s350c6f1");
    check_field_offset(lv, s350c6f2, ABISELECT(32,24), "S350C6.s350c6f2");
    test_class_info(&lv, &cd_S350C6);
    dp->~S350C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS350C6(Test_S350C6, "S350C6", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S350C6C1Ev();
extern void _ZN6S350C6D1Ev();
Name_Map name_map_S350C6[] = {
  NSPAIR(_ZN6S350C6C1Ev),
  NSPAIR(_ZN6S350C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S350C6[];
extern void _ZN6S350C6D1Ev();
extern void _ZN6S350C6D0Ev();
extern void _ZN6S350C62v3Ev();
extern void _ZN6S350C62v4Ev();
extern void _ZN6S350C62v5Ev();
static  VTBL_ENTRY vtc_S350C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S350C6[0]),
  (VTBL_ENTRY)&_ZN6S350C6D1Ev,
  (VTBL_ENTRY)&_ZN6S350C6D0Ev,
  (VTBL_ENTRY)&_ZN6S350C62v3Ev,
  (VTBL_ENTRY)&_ZN6S350C62v4Ev,
  (VTBL_ENTRY)&_ZN6S350C62v5Ev,
};
extern VTBL_ENTRY _ZTI6S350C6[];
extern  VTBL_ENTRY _ZTV6S350C6[];
Class_Descriptor cd_S350C6 = {  "S350C6", // class name
  0,0,//no base classes
  &(vtc_S350C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S350C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S350C6),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  S350C5  : S350C6 {
  void *s350c5f0;
  virtual void  v6(); // _ZN6S350C52v6Ev
  virtual void  v7(); // _ZN6S350C52v7Ev
  ~S350C5(); // tgen
  S350C5(); // tgen
};
//SIG(-1 S350C5) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S350C5 ::v6(){vfunc_called(this, "_ZN6S350C52v6Ev");}
void  S350C5 ::v7(){vfunc_called(this, "_ZN6S350C52v7Ev");}
S350C5 ::~S350C5(){ note_dtor("S350C5", this);} // tgen
S350C5 ::S350C5(){ note_ctor("S350C5", this);} // tgen

static void Test_S350C5()
{
  extern Class_Descriptor cd_S350C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S350C5, buf);
    S350C5 *dp, &lv = *(dp=new (buf) S350C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S350C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S350C5)");
    check_base_class_offset(lv, (S350C6*), 0, "S350C5");
    check_field_offset(lv, s350c5f0, ABISELECT(40,28), "S350C5.s350c5f0");
    test_class_info(&lv, &cd_S350C5);
    dp->~S350C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS350C5(Test_S350C5, "S350C5", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S350C5C1Ev();
extern void _ZN6S350C5D1Ev();
Name_Map name_map_S350C5[] = {
  NSPAIR(_ZN6S350C5C1Ev),
  NSPAIR(_ZN6S350C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S350C6;
extern VTBL_ENTRY _ZTI6S350C6[];
extern  VTBL_ENTRY _ZTV6S350C6[];
static Base_Class bases_S350C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S350C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI6S350C5[];
extern void _ZN6S350C5D1Ev();
extern void _ZN6S350C5D0Ev();
extern void _ZN6S350C62v3Ev();
extern void _ZN6S350C62v4Ev();
extern void _ZN6S350C62v5Ev();
extern void _ZN6S350C52v6Ev();
extern void _ZN6S350C52v7Ev();
static  VTBL_ENTRY vtc_S350C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S350C5[0]),
  (VTBL_ENTRY)&_ZN6S350C5D1Ev,
  (VTBL_ENTRY)&_ZN6S350C5D0Ev,
  (VTBL_ENTRY)&_ZN6S350C62v3Ev,
  (VTBL_ENTRY)&_ZN6S350C62v4Ev,
  (VTBL_ENTRY)&_ZN6S350C62v5Ev,
  (VTBL_ENTRY)&_ZN6S350C52v6Ev,
  (VTBL_ENTRY)&_ZN6S350C52v7Ev,
};
extern VTBL_ENTRY _ZTI6S350C5[];
extern  VTBL_ENTRY _ZTV6S350C5[];
Class_Descriptor cd_S350C5 = {  "S350C5", // class name
  bases_S350C5, 1,
  &(vtc_S350C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S350C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S350C5),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  S350C4  : S350C5 {
  void *s350c4f0;
  char s350c4f1;
  ::S2366C14_nt s350c4f2;
  virtual  ~S350C4(); // _ZN6S350C4D1Ev
  virtual void  v8(); // _ZN6S350C42v8Ev
  S350C4(); // tgen
};
//SIG(-1 S350C4) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S350C4 ::~S350C4(){ note_dtor("S350C4", this);}
void  S350C4 ::v8(){vfunc_called(this, "_ZN6S350C42v8Ev");}
S350C4 ::S350C4(){ note_ctor("S350C4", this);} // tgen

static void Test_S350C4()
{
  extern Class_Descriptor cd_S350C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S350C4, buf);
    S350C4 *dp, &lv = *(dp=new (buf) S350C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S350C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S350C4)");
    check_base_class_offset(lv, (S350C6*)(S350C5*), 0, "S350C4");
    check_base_class_offset(lv, (S350C5*), 0, "S350C4");
    check_field_offset(lv, s350c4f0, ABISELECT(48,32), "S350C4.s350c4f0");
    check_field_offset(lv, s350c4f1, ABISELECT(56,36), "S350C4.s350c4f1");
    check_field_offset(lv, s350c4f2, ABISELECT(60,40), "S350C4.s350c4f2");
    test_class_info(&lv, &cd_S350C4);
    dp->~S350C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS350C4(Test_S350C4, "S350C4", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S350C4C1Ev();
extern void _ZN6S350C4D1Ev();
Name_Map name_map_S350C4[] = {
  NSPAIR(_ZN6S350C4C1Ev),
  NSPAIR(_ZN6S350C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S350C6;
extern VTBL_ENTRY _ZTI6S350C6[];
extern  VTBL_ENTRY _ZTV6S350C6[];
extern Class_Descriptor cd_S350C5;
extern VTBL_ENTRY _ZTI6S350C5[];
extern  VTBL_ENTRY _ZTV6S350C5[];
static Base_Class bases_S350C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S350C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S350C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S350C4[];
extern void _ZN6S350C4D1Ev();
extern void _ZN6S350C4D0Ev();
extern void _ZN6S350C62v3Ev();
extern void _ZN6S350C62v4Ev();
extern void _ZN6S350C62v5Ev();
extern void _ZN6S350C52v6Ev();
extern void _ZN6S350C52v7Ev();
extern void _ZN6S350C42v8Ev();
static  VTBL_ENTRY vtc_S350C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S350C4[0]),
  (VTBL_ENTRY)&_ZN6S350C4D1Ev,
  (VTBL_ENTRY)&_ZN6S350C4D0Ev,
  (VTBL_ENTRY)&_ZN6S350C62v3Ev,
  (VTBL_ENTRY)&_ZN6S350C62v4Ev,
  (VTBL_ENTRY)&_ZN6S350C62v5Ev,
  (VTBL_ENTRY)&_ZN6S350C52v6Ev,
  (VTBL_ENTRY)&_ZN6S350C52v7Ev,
  (VTBL_ENTRY)&_ZN6S350C42v8Ev,
};
extern VTBL_ENTRY _ZTI6S350C4[];
extern  VTBL_ENTRY _ZTV6S350C4[];
Class_Descriptor cd_S350C4 = {  "S350C4", // class name
  bases_S350C4, 2,
  &(vtc_S350C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S350C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S350C4),10, //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  S350C3  : S350C4 {
  void *s350c3f0;
  __tsi64 s350c3f1[2];
  ::S130C11_nt s350c3f2;
  __tsi64 s350c3f3;
  ::S130C12_nt s350c3f4;
  char s350c3f5;
  void *s350c3f6[2];
  virtual  ~S350C3(); // _ZN6S350C3D1Ev
  virtual void  v9(); // _ZN6S350C32v9Ev
  virtual void  v10(); // _ZN6S350C33v10Ev
  virtual void  v11(); // _ZN6S350C33v11Ev
  virtual void  v12(); // _ZN6S350C33v12Ev
  S350C3(); // tgen
};
//SIG(-1 S350C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v8 v9 Fp} vd v10 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 v4 Fp FL[2] FC8{ m Fp[2]} FL FC9{ Fp Fi Fp} Fc Fp[2]}


 S350C3 ::~S350C3(){ note_dtor("S350C3", this);}
void  S350C3 ::v9(){vfunc_called(this, "_ZN6S350C32v9Ev");}
void  S350C3 ::v10(){vfunc_called(this, "_ZN6S350C33v10Ev");}
void  S350C3 ::v11(){vfunc_called(this, "_ZN6S350C33v11Ev");}
void  S350C3 ::v12(){vfunc_called(this, "_ZN6S350C33v12Ev");}
S350C3 ::S350C3(){ note_ctor("S350C3", this);} // tgen

static void Test_S350C3()
{
  extern Class_Descriptor cd_S350C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,28)];
    init_test(&cd_S350C3, buf);
    S350C3 *dp, &lv = *(dp=new (buf) S350C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,108), "sizeof(S350C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S350C3)");
    check_base_class_offset(lv, (S350C6*)(S350C5*)(S350C4*), 0, "S350C3");
    check_base_class_offset(lv, (S350C5*)(S350C4*), 0, "S350C3");
    check_base_class_offset(lv, (S350C4*), 0, "S350C3");
    check_field_offset(lv, s350c3f0, ABISELECT(72,48), "S350C3.s350c3f0");
    check_field_offset(lv, s350c3f1, ABISELECT(80,52), "S350C3.s350c3f1");
    check_field_offset(lv, s350c3f2, ABISELECT(96,68), "S350C3.s350c3f2");
    check_field_offset(lv, s350c3f3, ABISELECT(112,76), "S350C3.s350c3f3");
    check_field_offset(lv, s350c3f4, ABISELECT(120,84), "S350C3.s350c3f4");
    check_field_offset(lv, s350c3f5, ABISELECT(144,96), "S350C3.s350c3f5");
    check_field_offset(lv, s350c3f6, ABISELECT(152,100), "S350C3.s350c3f6");
    test_class_info(&lv, &cd_S350C3);
    dp->~S350C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS350C3(Test_S350C3, "S350C3", ABISELECT(168,108));

#else // __cplusplus

extern void _ZN6S350C3C1Ev();
extern void _ZN6S350C3D1Ev();
Name_Map name_map_S350C3[] = {
  NSPAIR(_ZN6S350C3C1Ev),
  NSPAIR(_ZN6S350C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S350C6;
extern VTBL_ENTRY _ZTI6S350C6[];
extern  VTBL_ENTRY _ZTV6S350C6[];
extern Class_Descriptor cd_S350C5;
extern VTBL_ENTRY _ZTI6S350C5[];
extern  VTBL_ENTRY _ZTV6S350C5[];
extern Class_Descriptor cd_S350C4;
extern VTBL_ENTRY _ZTI6S350C4[];
extern  VTBL_ENTRY _ZTV6S350C4[];
static Base_Class bases_S350C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S350C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S350C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S350C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S350C3[];
extern void _ZN6S350C3D1Ev();
extern void _ZN6S350C3D0Ev();
extern void _ZN6S350C62v3Ev();
extern void _ZN6S350C62v4Ev();
extern void _ZN6S350C62v5Ev();
extern void _ZN6S350C52v6Ev();
extern void _ZN6S350C52v7Ev();
extern void _ZN6S350C42v8Ev();
extern void _ZN6S350C32v9Ev();
extern void _ZN6S350C33v10Ev();
extern void _ZN6S350C33v11Ev();
extern void _ZN6S350C33v12Ev();
static  VTBL_ENTRY vtc_S350C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S350C3[0]),
  (VTBL_ENTRY)&_ZN6S350C3D1Ev,
  (VTBL_ENTRY)&_ZN6S350C3D0Ev,
  (VTBL_ENTRY)&_ZN6S350C62v3Ev,
  (VTBL_ENTRY)&_ZN6S350C62v4Ev,
  (VTBL_ENTRY)&_ZN6S350C62v5Ev,
  (VTBL_ENTRY)&_ZN6S350C52v6Ev,
  (VTBL_ENTRY)&_ZN6S350C52v7Ev,
  (VTBL_ENTRY)&_ZN6S350C42v8Ev,
  (VTBL_ENTRY)&_ZN6S350C32v9Ev,
  (VTBL_ENTRY)&_ZN6S350C33v10Ev,
  (VTBL_ENTRY)&_ZN6S350C33v11Ev,
  (VTBL_ENTRY)&_ZN6S350C33v12Ev,
};
extern VTBL_ENTRY _ZTI6S350C3[];
extern  VTBL_ENTRY _ZTV6S350C3[];
Class_Descriptor cd_S350C3 = {  "S350C3", // class name
  bases_S350C3, 3,
  &(vtc_S350C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,108), // object size
  NSPAIRA(_ZTI6S350C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S350C3),14, //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  S350C2  : S350C3 {
  char s350c2f0;
  void *s350c2f1[2];
  virtual  ~S350C2(); // _ZN6S350C2D1Ev
  virtual void  v13(); // _ZN6S350C23v13Ev
  virtual void  v14(); // _ZN6S350C23v14Ev
  virtual void  v15(); // _ZN6S350C23v15Ev
  virtual void  v16(); // _ZN6S350C23v16Ev
  virtual void  v17(); // _ZN6S350C23v17Ev
  virtual void  v18(); // _ZN6S350C23v18Ev
  virtual void  v19(); // _ZN6S350C23v19Ev
  virtual void  v20(); // _ZN6S350C23v20Ev
  S350C2(); // tgen
};
//SIG(-1 S350C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v12 v13 Fp} vd v14 Fp Fc FC8{ m Fi[2]}} vd v15 v16 v17 v18 Fp FL[2] FC9{ m Fp[2]} FL FC10{ Fp Fi Fp} Fc Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 Fc Fp[2]}


 S350C2 ::~S350C2(){ note_dtor("S350C2", this);}
void  S350C2 ::v13(){vfunc_called(this, "_ZN6S350C23v13Ev");}
void  S350C2 ::v14(){vfunc_called(this, "_ZN6S350C23v14Ev");}
void  S350C2 ::v15(){vfunc_called(this, "_ZN6S350C23v15Ev");}
void  S350C2 ::v16(){vfunc_called(this, "_ZN6S350C23v16Ev");}
void  S350C2 ::v17(){vfunc_called(this, "_ZN6S350C23v17Ev");}
void  S350C2 ::v18(){vfunc_called(this, "_ZN6S350C23v18Ev");}
void  S350C2 ::v19(){vfunc_called(this, "_ZN6S350C23v19Ev");}
void  S350C2 ::v20(){vfunc_called(this, "_ZN6S350C23v20Ev");}
S350C2 ::S350C2(){ note_ctor("S350C2", this);} // tgen

static void Test_S350C2()
{
  extern Class_Descriptor cd_S350C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,31)];
    init_test(&cd_S350C2, buf);
    S350C2 *dp, &lv = *(dp=new (buf) S350C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,120), "sizeof(S350C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S350C2)");
    check_base_class_offset(lv, (S350C6*)(S350C5*)(S350C4*)(S350C3*), 0, "S350C2");
    check_base_class_offset(lv, (S350C5*)(S350C4*)(S350C3*), 0, "S350C2");
    check_base_class_offset(lv, (S350C4*)(S350C3*), 0, "S350C2");
    check_base_class_offset(lv, (S350C3*), 0, "S350C2");
    check_field_offset(lv, s350c2f0, ABISELECT(168,108), "S350C2.s350c2f0");
    check_field_offset(lv, s350c2f1, ABISELECT(176,112), "S350C2.s350c2f1");
    test_class_info(&lv, &cd_S350C2);
    dp->~S350C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS350C2(Test_S350C2, "S350C2", ABISELECT(192,120));

#else // __cplusplus

extern void _ZN6S350C2C1Ev();
extern void _ZN6S350C2D1Ev();
Name_Map name_map_S350C2[] = {
  NSPAIR(_ZN6S350C2C1Ev),
  NSPAIR(_ZN6S350C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S350C6;
extern VTBL_ENTRY _ZTI6S350C6[];
extern  VTBL_ENTRY _ZTV6S350C6[];
extern Class_Descriptor cd_S350C5;
extern VTBL_ENTRY _ZTI6S350C5[];
extern  VTBL_ENTRY _ZTV6S350C5[];
extern Class_Descriptor cd_S350C4;
extern VTBL_ENTRY _ZTI6S350C4[];
extern  VTBL_ENTRY _ZTV6S350C4[];
extern Class_Descriptor cd_S350C3;
extern VTBL_ENTRY _ZTI6S350C3[];
extern  VTBL_ENTRY _ZTV6S350C3[];
static Base_Class bases_S350C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S350C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S350C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S350C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S350C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S350C2[];
extern void _ZN6S350C2D1Ev();
extern void _ZN6S350C2D0Ev();
extern void _ZN6S350C62v3Ev();
extern void _ZN6S350C62v4Ev();
extern void _ZN6S350C62v5Ev();
extern void _ZN6S350C52v6Ev();
extern void _ZN6S350C52v7Ev();
extern void _ZN6S350C42v8Ev();
extern void _ZN6S350C32v9Ev();
extern void _ZN6S350C33v10Ev();
extern void _ZN6S350C33v11Ev();
extern void _ZN6S350C33v12Ev();
extern void _ZN6S350C23v13Ev();
extern void _ZN6S350C23v14Ev();
extern void _ZN6S350C23v15Ev();
extern void _ZN6S350C23v16Ev();
extern void _ZN6S350C23v17Ev();
extern void _ZN6S350C23v18Ev();
extern void _ZN6S350C23v19Ev();
extern void _ZN6S350C23v20Ev();
static  VTBL_ENTRY vtc_S350C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S350C2[0]),
  (VTBL_ENTRY)&_ZN6S350C2D1Ev,
  (VTBL_ENTRY)&_ZN6S350C2D0Ev,
  (VTBL_ENTRY)&_ZN6S350C62v3Ev,
  (VTBL_ENTRY)&_ZN6S350C62v4Ev,
  (VTBL_ENTRY)&_ZN6S350C62v5Ev,
  (VTBL_ENTRY)&_ZN6S350C52v6Ev,
  (VTBL_ENTRY)&_ZN6S350C52v7Ev,
  (VTBL_ENTRY)&_ZN6S350C42v8Ev,
  (VTBL_ENTRY)&_ZN6S350C32v9Ev,
  (VTBL_ENTRY)&_ZN6S350C33v10Ev,
  (VTBL_ENTRY)&_ZN6S350C33v11Ev,
  (VTBL_ENTRY)&_ZN6S350C33v12Ev,
  (VTBL_ENTRY)&_ZN6S350C23v13Ev,
  (VTBL_ENTRY)&_ZN6S350C23v14Ev,
  (VTBL_ENTRY)&_ZN6S350C23v15Ev,
  (VTBL_ENTRY)&_ZN6S350C23v16Ev,
  (VTBL_ENTRY)&_ZN6S350C23v17Ev,
  (VTBL_ENTRY)&_ZN6S350C23v18Ev,
  (VTBL_ENTRY)&_ZN6S350C23v19Ev,
  (VTBL_ENTRY)&_ZN6S350C23v20Ev,
};
extern VTBL_ENTRY _ZTI6S350C2[];
extern  VTBL_ENTRY _ZTV6S350C2[];
Class_Descriptor cd_S350C2 = {  "S350C2", // class name
  bases_S350C2, 4,
  &(vtc_S350C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,120), // object size
  NSPAIRA(_ZTI6S350C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S350C2),22, //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  S350C1  : S350C2 {
  virtual  ~S350C1(); // _ZN6S350C1D1Ev
  virtual void  v1(); // _ZN6S350C12v1Ev
  virtual void  v2(); // _ZN6S350C12v2Ev
  S350C1(); // tgen
};
//SIG(1 S350C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v3 v4 v5 FC7{ m Fp Fi FC8{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 Fp Fc FC9{ m Fi[2]}} vd v9 v10 v11 v12 Fp FL[2] FC10{ m Fp[2]} FL FC11{ Fp Fi Fp} Fc Fp[2]} vd v13 v14 v15 v16 v17 v18 v19 v20 Fc Fp[2]} vd v1 v2}


 S350C1 ::~S350C1(){ note_dtor("S350C1", this);}
void  S350C1 ::v1(){vfunc_called(this, "_ZN6S350C12v1Ev");}
void  S350C1 ::v2(){vfunc_called(this, "_ZN6S350C12v2Ev");}
S350C1 ::S350C1(){ note_ctor("S350C1", this);} // tgen

static void Test_S350C1()
{
  extern Class_Descriptor cd_S350C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,31)];
    init_test(&cd_S350C1, buf);
    S350C1 *dp, &lv = *(dp=new (buf) S350C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,120), "sizeof(S350C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S350C1)");
    check_base_class_offset(lv, (S350C6*)(S350C5*)(S350C4*)(S350C3*)(S350C2*), 0, "S350C1");
    check_base_class_offset(lv, (S350C5*)(S350C4*)(S350C3*)(S350C2*), 0, "S350C1");
    check_base_class_offset(lv, (S350C4*)(S350C3*)(S350C2*), 0, "S350C1");
    check_base_class_offset(lv, (S350C3*)(S350C2*), 0, "S350C1");
    check_base_class_offset(lv, (S350C2*), 0, "S350C1");
    test_class_info(&lv, &cd_S350C1);
    dp->~S350C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS350C1(Test_S350C1, "S350C1", ABISELECT(192,120));

#else // __cplusplus

extern void _ZN6S350C1C1Ev();
extern void _ZN6S350C1D1Ev();
Name_Map name_map_S350C1[] = {
  NSPAIR(_ZN6S350C1C1Ev),
  NSPAIR(_ZN6S350C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S350C6;
extern VTBL_ENTRY _ZTI6S350C6[];
extern  VTBL_ENTRY _ZTV6S350C6[];
extern Class_Descriptor cd_S350C5;
extern VTBL_ENTRY _ZTI6S350C5[];
extern  VTBL_ENTRY _ZTV6S350C5[];
extern Class_Descriptor cd_S350C4;
extern VTBL_ENTRY _ZTI6S350C4[];
extern  VTBL_ENTRY _ZTV6S350C4[];
extern Class_Descriptor cd_S350C3;
extern VTBL_ENTRY _ZTI6S350C3[];
extern  VTBL_ENTRY _ZTV6S350C3[];
extern Class_Descriptor cd_S350C2;
extern VTBL_ENTRY _ZTI6S350C2[];
extern  VTBL_ENTRY _ZTV6S350C2[];
static Base_Class bases_S350C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S350C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S350C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S350C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S350C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S350C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S350C1[];
extern void _ZN6S350C1D1Ev();
extern void _ZN6S350C1D0Ev();
extern void _ZN6S350C62v3Ev();
extern void _ZN6S350C62v4Ev();
extern void _ZN6S350C62v5Ev();
extern void _ZN6S350C52v6Ev();
extern void _ZN6S350C52v7Ev();
extern void _ZN6S350C42v8Ev();
extern void _ZN6S350C32v9Ev();
extern void _ZN6S350C33v10Ev();
extern void _ZN6S350C33v11Ev();
extern void _ZN6S350C33v12Ev();
extern void _ZN6S350C23v13Ev();
extern void _ZN6S350C23v14Ev();
extern void _ZN6S350C23v15Ev();
extern void _ZN6S350C23v16Ev();
extern void _ZN6S350C23v17Ev();
extern void _ZN6S350C23v18Ev();
extern void _ZN6S350C23v19Ev();
extern void _ZN6S350C23v20Ev();
extern void _ZN6S350C12v1Ev();
extern void _ZN6S350C12v2Ev();
static  VTBL_ENTRY vtc_S350C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S350C1[0]),
  (VTBL_ENTRY)&_ZN6S350C1D1Ev,
  (VTBL_ENTRY)&_ZN6S350C1D0Ev,
  (VTBL_ENTRY)&_ZN6S350C62v3Ev,
  (VTBL_ENTRY)&_ZN6S350C62v4Ev,
  (VTBL_ENTRY)&_ZN6S350C62v5Ev,
  (VTBL_ENTRY)&_ZN6S350C52v6Ev,
  (VTBL_ENTRY)&_ZN6S350C52v7Ev,
  (VTBL_ENTRY)&_ZN6S350C42v8Ev,
  (VTBL_ENTRY)&_ZN6S350C32v9Ev,
  (VTBL_ENTRY)&_ZN6S350C33v10Ev,
  (VTBL_ENTRY)&_ZN6S350C33v11Ev,
  (VTBL_ENTRY)&_ZN6S350C33v12Ev,
  (VTBL_ENTRY)&_ZN6S350C23v13Ev,
  (VTBL_ENTRY)&_ZN6S350C23v14Ev,
  (VTBL_ENTRY)&_ZN6S350C23v15Ev,
  (VTBL_ENTRY)&_ZN6S350C23v16Ev,
  (VTBL_ENTRY)&_ZN6S350C23v17Ev,
  (VTBL_ENTRY)&_ZN6S350C23v18Ev,
  (VTBL_ENTRY)&_ZN6S350C23v19Ev,
  (VTBL_ENTRY)&_ZN6S350C23v20Ev,
  (VTBL_ENTRY)&_ZN6S350C12v1Ev,
  (VTBL_ENTRY)&_ZN6S350C12v2Ev,
};
extern VTBL_ENTRY _ZTI6S350C1[];
extern  VTBL_ENTRY _ZTV6S350C1[];
Class_Descriptor cd_S350C1 = {  "S350C1", // class name
  bases_S350C1, 5,
  &(vtc_S350C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,120), // object size
  NSPAIRA(_ZTI6S350C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S350C1),24, //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  S19332C3  {
  virtual void  v3(); // _ZN8S19332C32v3Ev
  virtual void  v4(); // _ZN8S19332C32v4Ev
  virtual void  v5(); // _ZN8S19332C32v5Ev
  virtual void  v6(); // _ZN8S19332C32v6Ev
  virtual void  v7(); // _ZN8S19332C32v7Ev
  virtual void  v8(); // _ZN8S19332C32v8Ev
  ~S19332C3(); // tgen
  S19332C3(); // tgen
};
//SIG(-1 S19332C3) C1{ v1 v2 v3 v4 v5 v6}


void  S19332C3 ::v3(){vfunc_called(this, "_ZN8S19332C32v3Ev");}
void  S19332C3 ::v4(){vfunc_called(this, "_ZN8S19332C32v4Ev");}
void  S19332C3 ::v5(){vfunc_called(this, "_ZN8S19332C32v5Ev");}
void  S19332C3 ::v6(){vfunc_called(this, "_ZN8S19332C32v6Ev");}
void  S19332C3 ::v7(){vfunc_called(this, "_ZN8S19332C32v7Ev");}
void  S19332C3 ::v8(){vfunc_called(this, "_ZN8S19332C32v8Ev");}
S19332C3 ::~S19332C3(){ note_dtor("S19332C3", this);} // tgen
S19332C3 ::S19332C3(){ note_ctor("S19332C3", this);} // tgen

static void Test_S19332C3()
{
  extern Class_Descriptor cd_S19332C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19332C3, buf);
    S19332C3 *dp, &lv = *(dp=new (buf) S19332C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19332C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19332C3)");
    test_class_info(&lv, &cd_S19332C3);
    dp->~S19332C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C3(Test_S19332C3, "S19332C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19332C3C1Ev();
extern void _ZN8S19332C3D1Ev();
Name_Map name_map_S19332C3[] = {
  NSPAIR(_ZN8S19332C3C1Ev),
  NSPAIR(_ZN8S19332C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19332C3[];
extern void _ZN8S19332C32v3Ev();
extern void _ZN8S19332C32v4Ev();
extern void _ZN8S19332C32v5Ev();
extern void _ZN8S19332C32v6Ev();
extern void _ZN8S19332C32v7Ev();
extern void _ZN8S19332C32v8Ev();
static  VTBL_ENTRY vtc_S19332C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C3[0]),
  (VTBL_ENTRY)&_ZN8S19332C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S19332C3[];
extern  VTBL_ENTRY _ZTV8S19332C3[];
Class_Descriptor cd_S19332C3 = {  "S19332C3", // class name
  0,0,//no base classes
  &(vtc_S19332C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19332C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19332C3),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  S19332C7  {
  void *s19332c7f0;
  long double s19332c7f1;
  int s19332c7f2;
  virtual void  v9(); // _ZN8S19332C72v9Ev
  virtual void  v10(); // _ZN8S19332C73v10Ev
  ~S19332C7(); // tgen
  S19332C7(); // tgen
};
//SIG(-1 S19332C7) C1{ v1 v2 Fp FD Fi}


void  S19332C7 ::v9(){vfunc_called(this, "_ZN8S19332C72v9Ev");}
void  S19332C7 ::v10(){vfunc_called(this, "_ZN8S19332C73v10Ev");}
S19332C7 ::~S19332C7(){ note_dtor("S19332C7", this);} // tgen
S19332C7 ::S19332C7(){ note_ctor("S19332C7", this);} // tgen

static void Test_S19332C7()
{
  extern Class_Descriptor cd_S19332C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19332C7, buf);
    S19332C7 *dp, &lv = *(dp=new (buf) S19332C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19332C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19332C7)");
    check_field_offset(lv, s19332c7f0, ABISELECT(8,4), "S19332C7.s19332c7f0");
    check_field_offset(lv, s19332c7f1, ABISELECT(16,8), "S19332C7.s19332c7f1");
    check_field_offset(lv, s19332c7f2, ABISELECT(32,20), "S19332C7.s19332c7f2");
    test_class_info(&lv, &cd_S19332C7);
    dp->~S19332C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C7(Test_S19332C7, "S19332C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19332C7C1Ev();
extern void _ZN8S19332C7D1Ev();
Name_Map name_map_S19332C7[] = {
  NSPAIR(_ZN8S19332C7C1Ev),
  NSPAIR(_ZN8S19332C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19332C7[];
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
static  VTBL_ENTRY vtc_S19332C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C7[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
};
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
Class_Descriptor cd_S19332C7 = {  "S19332C7", // class name
  0,0,//no base classes
  &(vtc_S19332C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19332C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19332C7),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  S19332C6  : S19332C7 {
  virtual void  v11(); // _ZN8S19332C63v11Ev
  virtual void  v12(); // _ZN8S19332C63v12Ev
  ~S19332C6(); // tgen
  S19332C6(); // tgen
};
//SIG(-1 S19332C6) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S19332C6 ::v11(){vfunc_called(this, "_ZN8S19332C63v11Ev");}
void  S19332C6 ::v12(){vfunc_called(this, "_ZN8S19332C63v12Ev");}
S19332C6 ::~S19332C6(){ note_dtor("S19332C6", this);} // tgen
S19332C6 ::S19332C6(){ note_ctor("S19332C6", this);} // tgen

static void Test_S19332C6()
{
  extern Class_Descriptor cd_S19332C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S19332C6, buf);
    S19332C6 *dp, &lv = *(dp=new (buf) S19332C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19332C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19332C6)");
    check_base_class_offset(lv, (S19332C7*), 0, "S19332C6");
    test_class_info(&lv, &cd_S19332C6);
    dp->~S19332C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C6(Test_S19332C6, "S19332C6", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19332C6C1Ev();
extern void _ZN8S19332C6D1Ev();
Name_Map name_map_S19332C6[] = {
  NSPAIR(_ZN8S19332C6C1Ev),
  NSPAIR(_ZN8S19332C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
static Base_Class bases_S19332C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19332C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19332C6[];
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C63v11Ev();
extern void _ZN8S19332C63v12Ev();
static  VTBL_ENTRY vtc_S19332C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C6[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v12Ev,
};
extern VTBL_ENTRY _ZTI8S19332C6[];
extern  VTBL_ENTRY _ZTV8S19332C6[];
Class_Descriptor cd_S19332C6 = {  "S19332C6", // class name
  bases_S19332C6, 1,
  &(vtc_S19332C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19332C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19332C6),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  S19332C5  : S19332C6 , S19332C7 {
  virtual void  v13(); // _ZN8S19332C53v13Ev
  virtual void  v14(); // _ZN8S19332C53v14Ev
  virtual void  v15(); // _ZN8S19332C53v15Ev
  virtual void  v16(); // _ZN8S19332C53v16Ev
  ~S19332C5(); // tgen
  S19332C5(); // tgen
};
//SIG(-1 S19332C5) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S19332C5 ::v13(){vfunc_called(this, "_ZN8S19332C53v13Ev");}
void  S19332C5 ::v14(){vfunc_called(this, "_ZN8S19332C53v14Ev");}
void  S19332C5 ::v15(){vfunc_called(this, "_ZN8S19332C53v15Ev");}
void  S19332C5 ::v16(){vfunc_called(this, "_ZN8S19332C53v16Ev");}
S19332C5 ::~S19332C5(){ note_dtor("S19332C5", this);} // tgen
S19332C5 ::S19332C5(){ note_ctor("S19332C5", this);} // tgen

static void Test_S19332C5()
{
  extern Class_Descriptor cd_S19332C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S19332C5, buf);
    S19332C5 *dp, &lv = *(dp=new (buf) S19332C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S19332C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19332C5)");
    check_base_class_offset(lv, (S19332C7*)(S19332C6*), 0, "S19332C5");
    check_base_class_offset(lv, (S19332C6*), 0, "S19332C5");
    /*is_ambiguous_... S19332C5::S19332C7 */ AMB_check_base_class_offset(lv, (S19332C7*), ABISELECT(48,24), "S19332C5");
    test_class_info(&lv, &cd_S19332C5);
    dp->~S19332C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C5(Test_S19332C5, "S19332C5", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S19332C5C1Ev();
extern void _ZN8S19332C5D1Ev();
Name_Map name_map_S19332C5[] = {
  NSPAIR(_ZN8S19332C5C1Ev),
  NSPAIR(_ZN8S19332C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
extern Class_Descriptor cd_S19332C6;
extern VTBL_ENTRY _ZTI8S19332C6[];
extern  VTBL_ENTRY _ZTV8S19332C6[];
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
static Base_Class bases_S19332C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19332C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19332C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S19332C7,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_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 _ZTI8S19332C5[];
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C63v11Ev();
extern void _ZN8S19332C63v12Ev();
extern void _ZN8S19332C53v13Ev();
extern void _ZN8S19332C53v14Ev();
extern void _ZN8S19332C53v15Ev();
extern void _ZN8S19332C53v16Ev();
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
static  VTBL_ENTRY vtc_S19332C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C5[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v16Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19332C5[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
};
extern VTBL_ENTRY _ZTI8S19332C5[];
extern  VTBL_ENTRY _ZTV8S19332C5[];
Class_Descriptor cd_S19332C5 = {  "S19332C5", // class name
  bases_S19332C5, 3,
  &(vtc_S19332C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S19332C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19332C5),14, //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  S19332C10  {
  ::S1400C17_nt s19332c10f0;
  void *s19332c10f1;
  virtual void  v17(); // _ZN9S19332C103v17Ev
  ~S19332C10(); // tgen
  S19332C10(); // tgen
};
//SIG(-1 S19332C10) C1{ v1 FC2{ v2 v3} Fp}


void  S19332C10 ::v17(){vfunc_called(this, "_ZN9S19332C103v17Ev");}
S19332C10 ::~S19332C10(){ note_dtor("S19332C10", this);} // tgen
S19332C10 ::S19332C10(){ note_ctor("S19332C10", this);} // tgen

static void Test_S19332C10()
{
  extern Class_Descriptor cd_S19332C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19332C10, buf);
    S19332C10 *dp, &lv = *(dp=new (buf) S19332C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19332C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19332C10)");
    check_field_offset(lv, s19332c10f0, ABISELECT(8,4), "S19332C10.s19332c10f0");
    check_field_offset(lv, s19332c10f1, ABISELECT(16,8), "S19332C10.s19332c10f1");
    test_class_info(&lv, &cd_S19332C10);
    dp->~S19332C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C10(Test_S19332C10, "S19332C10", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19332C10C1Ev();
extern void _ZN9S19332C10D1Ev();
Name_Map name_map_S19332C10[] = {
  NSPAIR(_ZN9S19332C10C1Ev),
  NSPAIR(_ZN9S19332C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19332C10[];
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY vtc_S19332C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19332C10[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern VTBL_ENTRY _ZTI9S19332C10[];
extern  VTBL_ENTRY _ZTV9S19332C10[];
Class_Descriptor cd_S19332C10 = {  "S19332C10", // class name
  0,0,//no base classes
  &(vtc_S19332C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19332C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19332C10),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19332C9  : virtual S19332C10 {
  virtual void  v18(); // _ZN8S19332C93v18Ev
  ~S19332C9(); // tgen
  S19332C9(); // tgen
};
//SIG(-1 S19332C9) C1{ VBC2{ v2 FC3{ v3 v4} Fp} v1}


void  S19332C9 ::v18(){vfunc_called(this, "_ZN8S19332C93v18Ev");}
S19332C9 ::~S19332C9(){ note_dtor("S19332C9", this);} // tgen
S19332C9 ::S19332C9(){ note_ctor("S19332C9", this);} // tgen

static void Test_S19332C9()
{
  extern Class_Descriptor cd_S19332C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19332C9, buf);
    S19332C9 *dp, &lv = *(dp=new (buf) S19332C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19332C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19332C9)");
    check_base_class_offset(lv, (S19332C10*), ABISELECT(8,4), "S19332C9");
    test_class_info(&lv, &cd_S19332C9);
    dp->~S19332C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C9(Test_S19332C9, "S19332C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19332C9C1Ev();
extern void _ZN8S19332C9D1Ev();
Name_Map name_map_S19332C9[] = {
  NSPAIR(_ZN8S19332C9C1Ev),
  NSPAIR(_ZN8S19332C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19332C10;
extern VTBL_ENTRY _ZTI9S19332C10[];
extern  VTBL_ENTRY _ZTV9S19332C10[];
static Base_Class bases_S19332C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19332C10,    ABISELECT(8,4), //bcp->offset
    4, //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 _ZTI8S19332C9[];
extern void _ZN8S19332C93v18Ev();
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY vtc_S19332C9[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19332C9[];
static  VTT_ENTRY vtt_S19332C9[] = {
  {&(_ZTV8S19332C9[3]),  3,8},
  {&(_ZTV8S19332C9[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S19332C9[];
extern  VTBL_ENTRY _ZTV8S19332C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C9[];
Class_Descriptor cd_S19332C9 = {  "S19332C9", // class name
  bases_S19332C9, 1,
  &(vtc_S19332C9[0]), // expected_vtbl_contents
  &(vtt_S19332C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19332C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19332C9),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19332C9),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  S19332C8  : virtual S19332C9 {
  virtual void  v19(); // _ZN8S19332C83v19Ev
  virtual void  v20(); // _ZN8S19332C83v20Ev
  virtual void  v21(); // _ZN8S19332C83v21Ev
  ~S19332C8(); // tgen
  S19332C8(); // tgen
};
//SIG(-1 S19332C8) C1{ VBC2{ VBC3{ v4 FC4{ v6 v7} Fp} v5} v1 v2 v3}


void  S19332C8 ::v19(){vfunc_called(this, "_ZN8S19332C83v19Ev");}
void  S19332C8 ::v20(){vfunc_called(this, "_ZN8S19332C83v20Ev");}
void  S19332C8 ::v21(){vfunc_called(this, "_ZN8S19332C83v21Ev");}
S19332C8 ::~S19332C8(){ note_dtor("S19332C8", this);} // tgen
S19332C8 ::S19332C8(){ note_ctor("S19332C8", this);} // tgen

static void Test_S19332C8()
{
  extern Class_Descriptor cd_S19332C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19332C8, buf);
    S19332C8 *dp, &lv = *(dp=new (buf) S19332C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19332C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19332C8)");
    check_base_class_offset(lv, (S19332C10*)(S19332C9*), ABISELECT(8,4), "S19332C8");
    check_base_class_offset(lv, (S19332C9*), 0, "S19332C8");
    test_class_info(&lv, &cd_S19332C8);
    dp->~S19332C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C8(Test_S19332C8, "S19332C8", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19332C8C1Ev();
extern void _ZN8S19332C8D1Ev();
Name_Map name_map_S19332C8[] = {
  NSPAIR(_ZN8S19332C8C1Ev),
  NSPAIR(_ZN8S19332C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19332C10;
extern VTBL_ENTRY _ZTI9S19332C10[];
extern  VTBL_ENTRY _ZTV9S19332C10[];
extern Class_Descriptor cd_S19332C9;
extern VTBL_ENTRY _ZTI8S19332C9[];
extern  VTBL_ENTRY _ZTV8S19332C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C9[];
static Base_Class bases_S19332C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19332C10,    ABISELECT(8,4), //bcp->offset
    9, //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
    1, //immediately_derived
  0, 1},
  {&cd_S19332C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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 _ZTI8S19332C8[];
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY vtc_S19332C8[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C8[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C8[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19332C8[];
extern void _ZN8S19332C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C9__8S19332C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C9__8S19332C8[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
static  VTT_ENTRY vtt_S19332C8[] = {
  {&(_ZTV8S19332C8[5]),  5,13},
  {&(_ZTV8S19332C8[5]),  5,13},
  {&(_ZTV8S19332C8[12]),  12,13},
  {&(_tg__ZTV8S19332C9__8S19332C8[3]),  3,4},
  {&(_tg__ZTV9S19332C10__8S19332C9__8S19332C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19332C8[];
extern  VTBL_ENTRY _ZTV8S19332C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C8[];
Class_Descriptor cd_S19332C8 = {  "S19332C8", // class name
  bases_S19332C8, 2,
  &(vtc_S19332C8[0]), // expected_vtbl_contents
  &(vtt_S19332C8[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19332C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19332C8),13, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19332C8),5, //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  S19332C4  : S19332C5 , virtual S19332C8 {
  virtual void  v22(); // _ZN8S19332C43v22Ev
  virtual void  v23(); // _ZN8S19332C43v23Ev
  virtual void  v24(); // _ZN8S19332C43v24Ev
  ~S19332C4(); // tgen
  S19332C4(); // tgen
};
//SIG(-1 S19332C4) C1{ BC2{ BC3{ BC4{ v4 v5 Fp FD Fi} v6 v7} BC4 v8 v9 v10 v11} VBC5{ VBC6{ VBC7{ v12 FC8{ v17 v18} Fp} v13} v14 v15 v16} v1 v2 v3}


void  S19332C4 ::v22(){vfunc_called(this, "_ZN8S19332C43v22Ev");}
void  S19332C4 ::v23(){vfunc_called(this, "_ZN8S19332C43v23Ev");}
void  S19332C4 ::v24(){vfunc_called(this, "_ZN8S19332C43v24Ev");}
S19332C4 ::~S19332C4(){ note_dtor("S19332C4", this);} // tgen
S19332C4 ::S19332C4(){ note_ctor("S19332C4", this);} // tgen

static void Test_S19332C4()
{
  extern Class_Descriptor cd_S19332C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,17)];
    init_test(&cd_S19332C4, buf);
    S19332C4 *dp, &lv = *(dp=new (buf) S19332C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S19332C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19332C4)");
    check_base_class_offset(lv, (S19332C7*)(S19332C6*)(S19332C5*), 0, "S19332C4");
    check_base_class_offset(lv, (S19332C6*)(S19332C5*), 0, "S19332C4");
    /*is_ambiguous_... S19332C5::S19332C7 */ AMB_check_base_class_offset(lv, (S19332C7*)(S19332C5*), ABISELECT(48,24), "S19332C4");
    check_base_class_offset(lv, (S19332C5*), 0, "S19332C4");
    check_base_class_offset(lv, (S19332C10*)(S19332C9*), ABISELECT(96,52), "S19332C4");
    check_base_class_offset(lv, (S19332C9*)(S19332C8*), ABISELECT(88,48), "S19332C4");
    check_base_class_offset(lv, (S19332C8*), ABISELECT(88,48), "S19332C4");
    test_class_info(&lv, &cd_S19332C4);
    dp->~S19332C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C4(Test_S19332C4, "S19332C4", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S19332C4C1Ev();
extern void _ZN8S19332C4D1Ev();
Name_Map name_map_S19332C4[] = {
  NSPAIR(_ZN8S19332C4C1Ev),
  NSPAIR(_ZN8S19332C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
extern Class_Descriptor cd_S19332C6;
extern VTBL_ENTRY _ZTI8S19332C6[];
extern  VTBL_ENTRY _ZTV8S19332C6[];
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
extern Class_Descriptor cd_S19332C5;
extern VTBL_ENTRY _ZTI8S19332C5[];
extern  VTBL_ENTRY _ZTV8S19332C5[];
extern Class_Descriptor cd_S19332C10;
extern VTBL_ENTRY _ZTI9S19332C10[];
extern  VTBL_ENTRY _ZTV9S19332C10[];
extern Class_Descriptor cd_S19332C9;
extern VTBL_ENTRY _ZTI8S19332C9[];
extern  VTBL_ENTRY _ZTV8S19332C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C9[];
extern Class_Descriptor cd_S19332C8;
extern VTBL_ENTRY _ZTI8S19332C8[];
extern  VTBL_ENTRY _ZTV8S19332C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C8[];
static Base_Class bases_S19332C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19332C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S19332C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19332C7,    ABISELECT(48,24), //bcp->offset
    16, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S19332C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S19332C10,    ABISELECT(96,52), //bcp->offset
    32, //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
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19332C9,    ABISELECT(88,48), //bcp->offset
    -1, //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
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19332C8,    ABISELECT(88,48), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //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 _ZTI8S19332C4[];
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C63v11Ev();
extern void _ZN8S19332C63v12Ev();
extern void _ZN8S19332C53v13Ev();
extern void _ZN8S19332C53v14Ev();
extern void _ZN8S19332C53v15Ev();
extern void _ZN8S19332C53v16Ev();
extern void _ZN8S19332C43v22Ev();
extern void _ZN8S19332C43v23Ev();
extern void _ZN8S19332C43v24Ev();
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY vtc_S19332C4[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v24Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19332C4[];
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C8__8S19332C4[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C8[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C8__8S19332C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C8[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern void _ZN8S19332C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C9__8S19332C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C9__8S19332C4[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
static  VTT_ENTRY vtt_S19332C4[] = {
  {&(_ZTV8S19332C4[5]),  5,36},
  {&(_ZTV8S19332C4[28]),  28,36},
  {&(_ZTV8S19332C4[28]),  28,36},
  {&(_ZTV8S19332C4[35]),  35,36},
  {&(_tg__ZTV8S19332C8__8S19332C4[5]),  5,9},
  {&(_tg__ZTV8S19332C8__8S19332C4[5]),  5,9},
  {&(_tg__ZTV9S19332C10__8S19332C8__8S19332C4[3]),  3,4},
  {&(_tg__ZTV8S19332C9__8S19332C4[3]),  3,4},
  {&(_tg__ZTV9S19332C10__8S19332C9__8S19332C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19332C4[];
extern  VTBL_ENTRY _ZTV8S19332C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C4[];
Class_Descriptor cd_S19332C4 = {  "S19332C4", // class name
  bases_S19332C4, 7,
  &(vtc_S19332C4[0]), // expected_vtbl_contents
  &(vtt_S19332C4[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S19332C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19332C4),36, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19332C4),9, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19332C2  : S19332C3 , virtual S19332C4 {
  void *s19332c2f0;
  __tsi64 s19332c2f1:5;
  virtual  ~S19332C2(); // _ZN8S19332C2D2Ev
  virtual void  v25(); // _ZN8S19332C23v25Ev
  S19332C2(); // tgen
};
//SIG(-1 S19332C2) C1{ BC2{ v2 v3 v4 v5 v6 v7} VBC3{ BC4{ BC5{ BC6{ v8 v9 Fp FD Fi} v10 v11} BC6 v12 v13 v14 v15} VBC7{ VBC8{ VBC9{ v16 FC10{ v24 v25} Fp} v17} v18 v19 v20} v21 v22 v23} vd v1 Fp FL:5}


 S19332C2 ::~S19332C2(){ note_dtor("S19332C2", this);}
void  S19332C2 ::v25(){vfunc_called(this, "_ZN8S19332C23v25Ev");}
S19332C2 ::S19332C2(){ note_ctor("S19332C2", this);} // tgen

static void Test_S19332C2()
{
  extern Class_Descriptor cd_S19332C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,20)];
    init_test(&cd_S19332C2, buf);
    S19332C2 *dp, &lv = *(dp=new (buf) S19332C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,76), "sizeof(S19332C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19332C2)");
    check_base_class_offset(lv, (S19332C3*), 0, "S19332C2");
    check_base_class_offset(lv, (S19332C7*)(S19332C6*)(S19332C5*)(S19332C4*), ABISELECT(32,12), "S19332C2");
    check_base_class_offset(lv, (S19332C6*)(S19332C5*)(S19332C4*), ABISELECT(32,12), "S19332C2");
    /*is_ambiguous_... S19332C5::S19332C7 */ AMB_check_base_class_offset(lv, (S19332C7*)(S19332C5*)(S19332C4*), ABISELECT(80,36), "S19332C2");
    check_base_class_offset(lv, (S19332C5*)(S19332C4*), ABISELECT(32,12), "S19332C2");
    check_base_class_offset(lv, (S19332C10*)(S19332C9*), ABISELECT(128,64), "S19332C2");
    check_base_class_offset(lv, (S19332C9*)(S19332C8*), ABISELECT(120,60), "S19332C2");
    check_base_class_offset(lv, (S19332C8*)(S19332C4*), ABISELECT(120,60), "S19332C2");
    check_base_class_offset(lv, (S19332C4*), ABISELECT(32,12), "S19332C2");
    check_field_offset(lv, s19332c2f0, ABISELECT(8,4), "S19332C2.s19332c2f0");
    set_bf_and_test(lv, s19332c2f1, ABISELECT(16,8), 0, 5, 1, "S19332C2");
    set_bf_and_test(lv, s19332c2f1, ABISELECT(16,8), 0, 5, hide_sll(1LL<<4), "S19332C2");
    test_class_info(&lv, &cd_S19332C2);
    dp->~S19332C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C2(Test_S19332C2, "S19332C2", ABISELECT(160,76));

#else // __cplusplus

extern void _ZN8S19332C2C1Ev();
extern void _ZN8S19332C2D2Ev();
Name_Map name_map_S19332C2[] = {
  NSPAIR(_ZN8S19332C2C1Ev),
  NSPAIR(_ZN8S19332C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19332C3;
extern VTBL_ENTRY _ZTI8S19332C3[];
extern  VTBL_ENTRY _ZTV8S19332C3[];
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
extern Class_Descriptor cd_S19332C6;
extern VTBL_ENTRY _ZTI8S19332C6[];
extern  VTBL_ENTRY _ZTV8S19332C6[];
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
extern Class_Descriptor cd_S19332C5;
extern VTBL_ENTRY _ZTI8S19332C5[];
extern  VTBL_ENTRY _ZTV8S19332C5[];
extern Class_Descriptor cd_S19332C10;
extern VTBL_ENTRY _ZTI9S19332C10[];
extern  VTBL_ENTRY _ZTV9S19332C10[];
extern Class_Descriptor cd_S19332C9;
extern VTBL_ENTRY _ZTI8S19332C9[];
extern  VTBL_ENTRY _ZTV8S19332C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C9[];
extern Class_Descriptor cd_S19332C8;
extern VTBL_ENTRY _ZTI8S19332C8[];
extern  VTBL_ENTRY _ZTV8S19332C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C8[];
extern Class_Descriptor cd_S19332C4;
extern VTBL_ENTRY _ZTI8S19332C4[];
extern  VTBL_ENTRY _ZTV8S19332C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C4[];
static Base_Class bases_S19332C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19332C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19332C7,    ABISELECT(32,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
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19332C6,    ABISELECT(32,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
    4, //immediately_derived
  0, 0},
  {&cd_S19332C7,    ABISELECT(80,36), //bcp->offset
    42, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19332C5,    ABISELECT(32,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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19332C10,    ABISELECT(128,64), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19332C9,    ABISELECT(120,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19332C8,    ABISELECT(120,60), //bcp->offset
    46, //bcp->virtual_function_table_offset
    8, //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
    8, //immediately_derived
  0, 1},
  {&cd_S19332C4,    ABISELECT(32,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19332C2[];
extern void _ZN8S19332C32v3Ev();
extern void _ZN8S19332C32v4Ev();
extern void _ZN8S19332C32v5Ev();
extern void _ZN8S19332C32v6Ev();
extern void _ZN8S19332C32v7Ev();
extern void _ZN8S19332C32v8Ev();
extern void _ZN8S19332C2D1Ev();
extern void _ZN8S19332C2D0Ev();
extern void _ZN8S19332C23v25Ev();
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C63v11Ev();
extern void _ZN8S19332C63v12Ev();
extern void _ZN8S19332C53v13Ev();
extern void _ZN8S19332C53v14Ev();
extern void _ZN8S19332C53v15Ev();
extern void _ZN8S19332C53v16Ev();
extern void _ZN8S19332C43v22Ev();
extern void _ZN8S19332C43v23Ev();
extern void _ZN8S19332C43v24Ev();
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY vtc_S19332C2[] = {
  ABISELECT(128,64),
  ABISELECT(120,60),
  ABISELECT(120,60),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN8S19332C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19332C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19332C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19332C23v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v24Ev,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19332C2[];
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C63v11Ev();
extern void _ZN8S19332C63v12Ev();
extern void _ZN8S19332C53v13Ev();
extern void _ZN8S19332C53v14Ev();
extern void _ZN8S19332C53v15Ev();
extern void _ZN8S19332C53v16Ev();
extern void _ZN8S19332C43v22Ev();
extern void _ZN8S19332C43v23Ev();
extern void _ZN8S19332C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C4__8S19332C2[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v24Ev,
};
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C8__8S19332C4__8S19332C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C4__8S19332C2[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C8__8S19332C2[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C8[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C8__8S19332C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C8[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern void _ZN8S19332C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C9__8S19332C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C9__8S19332C2[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
static  VTT_ENTRY vtt_S19332C2[] = {
  {&(_ZTV8S19332C2[6]),  6,62},
  {&(_ZTV8S19332C2[31]),  31,62},
  {&(_ZTV8S19332C2[44]),  44,62},
  {&(_ZTV8S19332C2[54]),  54,62},
  {&(_ZTV8S19332C2[54]),  54,62},
  {&(_ZTV8S19332C2[61]),  61,62},
  {&(_tg__ZTV8S19332C4__8S19332C2[5]),  5,16},
  {&(_tg__ZTV8S19332C8__8S19332C4__8S19332C2[8]),  8,12},
  {&(_tg__ZTV8S19332C8__8S19332C4__8S19332C2[8]),  8,12},
  {&(_tg__ZTV9S19332C10__8S19332C4__8S19332C2[3]),  3,4},
  {&(_tg__ZTV8S19332C8__8S19332C2[5]),  5,9},
  {&(_tg__ZTV8S19332C8__8S19332C2[5]),  5,9},
  {&(_tg__ZTV9S19332C10__8S19332C8__8S19332C2[3]),  3,4},
  {&(_tg__ZTV8S19332C9__8S19332C2[3]),  3,4},
  {&(_tg__ZTV9S19332C10__8S19332C9__8S19332C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19332C2[];
extern  VTBL_ENTRY _ZTV8S19332C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C2[];
Class_Descriptor cd_S19332C2 = {  "S19332C2", // class name
  bases_S19332C2, 9,
  &(vtc_S19332C2[0]), // expected_vtbl_contents
  &(vtt_S19332C2[0]), // expected_vtt_contents
  ABISELECT(160,76), // object size
  NSPAIRA(_ZTI8S19332C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19332C2),62, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19332C2),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19332C12  {
  void *s19332c12f0[8];
  virtual void  v26(); // _ZN9S19332C123v26Ev
  ~S19332C12(); // tgen
  S19332C12(); // tgen
};
//SIG(-1 S19332C12) C1{ v1 Fp[8]}


void  S19332C12 ::v26(){vfunc_called(this, "_ZN9S19332C123v26Ev");}
S19332C12 ::~S19332C12(){ note_dtor("S19332C12", this);} // tgen
S19332C12 ::S19332C12(){ note_ctor("S19332C12", this);} // tgen

static void Test_S19332C12()
{
  extern Class_Descriptor cd_S19332C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S19332C12, buf);
    S19332C12 *dp, &lv = *(dp=new (buf) S19332C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S19332C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19332C12)");
    check_field_offset(lv, s19332c12f0, ABISELECT(8,4), "S19332C12.s19332c12f0");
    test_class_info(&lv, &cd_S19332C12);
    dp->~S19332C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C12(Test_S19332C12, "S19332C12", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S19332C12C1Ev();
extern void _ZN9S19332C12D1Ev();
Name_Map name_map_S19332C12[] = {
  NSPAIR(_ZN9S19332C12C1Ev),
  NSPAIR(_ZN9S19332C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19332C12[];
extern void _ZN9S19332C123v26Ev();
static  VTBL_ENTRY vtc_S19332C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19332C12[0]),
  (VTBL_ENTRY)&_ZN9S19332C123v26Ev,
};
extern VTBL_ENTRY _ZTI9S19332C12[];
extern  VTBL_ENTRY _ZTV9S19332C12[];
Class_Descriptor cd_S19332C12 = {  "S19332C12", // class name
  0,0,//no base classes
  &(vtc_S19332C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S19332C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19332C12),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  S19332C1  : virtual S19332C2 , S19332C12 {
  virtual  ~S19332C1(); // _ZN8S19332C1D2Ev
  virtual void  v1(); // _ZN8S19332C12v1Ev
  virtual void  v2(); // _ZN8S19332C12v2Ev
  S19332C1(); // tgen
};
//SIG(1 S19332C1) C1{ VBC2{ BC3{ v3 v4 v5 v6 v7 v8} VBC4{ BC5{ BC6{ BC7{ v9 v10 Fp FD Fi} v11 v12} BC7 v13 v14 v15 v16} VBC8{ VBC9{ VBC10{ v17 FC11{ v27 v28} Fp} v18} v19 v20 v21} v22 v23 v24} vd v25 Fp FL:5} BC12{ v26 Fp[8]} vd v1 v2}


 S19332C1 ::~S19332C1(){ note_dtor("S19332C1", this);}
void  S19332C1 ::v1(){vfunc_called(this, "_ZN8S19332C12v1Ev");}
void  S19332C1 ::v2(){vfunc_called(this, "_ZN8S19332C12v2Ev");}
S19332C1 ::S19332C1(){ note_ctor("S19332C1", this);} // tgen

static void Test_S19332C1()
{
  extern Class_Descriptor cd_S19332C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(15,29)];
    init_test(&cd_S19332C1, buf);
    S19332C1 *dp, &lv = *(dp=new (buf) S19332C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,112), "sizeof(S19332C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19332C1)");
    check_base_class_offset(lv, (S19332C3*)(S19332C2*), ABISELECT(72,36), "S19332C1");
    check_base_class_offset(lv, (S19332C7*)(S19332C6*)(S19332C5*)(S19332C4*), ABISELECT(96,48), "S19332C1");
    check_base_class_offset(lv, (S19332C6*)(S19332C5*)(S19332C4*), ABISELECT(96,48), "S19332C1");
    /*is_ambiguous_... S19332C5::S19332C7 */ AMB_check_base_class_offset(lv, (S19332C7*)(S19332C5*)(S19332C4*), ABISELECT(144,72), "S19332C1");
    check_base_class_offset(lv, (S19332C5*)(S19332C4*), ABISELECT(96,48), "S19332C1");
    check_base_class_offset(lv, (S19332C10*)(S19332C9*), ABISELECT(192,100), "S19332C1");
    check_base_class_offset(lv, (S19332C9*)(S19332C8*), ABISELECT(184,96), "S19332C1");
    check_base_class_offset(lv, (S19332C8*)(S19332C4*), ABISELECT(184,96), "S19332C1");
    check_base_class_offset(lv, (S19332C4*)(S19332C2*), ABISELECT(96,48), "S19332C1");
    check_base_class_offset(lv, (S19332C2*), ABISELECT(72,36), "S19332C1");
    check_base_class_offset(lv, (S19332C12*), 0, "S19332C1");
    test_class_info(&lv, &cd_S19332C1);
    dp->~S19332C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19332C1(Test_S19332C1, "S19332C1", ABISELECT(224,112));

#else // __cplusplus

extern void _ZN8S19332C1C1Ev();
extern void _ZN8S19332C1D2Ev();
Name_Map name_map_S19332C1[] = {
  NSPAIR(_ZN8S19332C1C1Ev),
  NSPAIR(_ZN8S19332C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19332C3;
extern VTBL_ENTRY _ZTI8S19332C3[];
extern  VTBL_ENTRY _ZTV8S19332C3[];
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
extern Class_Descriptor cd_S19332C6;
extern VTBL_ENTRY _ZTI8S19332C6[];
extern  VTBL_ENTRY _ZTV8S19332C6[];
extern Class_Descriptor cd_S19332C7;
extern VTBL_ENTRY _ZTI8S19332C7[];
extern  VTBL_ENTRY _ZTV8S19332C7[];
extern Class_Descriptor cd_S19332C5;
extern VTBL_ENTRY _ZTI8S19332C5[];
extern  VTBL_ENTRY _ZTV8S19332C5[];
extern Class_Descriptor cd_S19332C10;
extern VTBL_ENTRY _ZTI9S19332C10[];
extern  VTBL_ENTRY _ZTV9S19332C10[];
extern Class_Descriptor cd_S19332C9;
extern VTBL_ENTRY _ZTI8S19332C9[];
extern  VTBL_ENTRY _ZTV8S19332C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C9[];
extern Class_Descriptor cd_S19332C8;
extern VTBL_ENTRY _ZTI8S19332C8[];
extern  VTBL_ENTRY _ZTV8S19332C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C8[];
extern Class_Descriptor cd_S19332C4;
extern VTBL_ENTRY _ZTI8S19332C4[];
extern  VTBL_ENTRY _ZTV8S19332C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C4[];
extern Class_Descriptor cd_S19332C2;
extern VTBL_ENTRY _ZTI8S19332C2[];
extern  VTBL_ENTRY _ZTV8S19332C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C2[];
extern Class_Descriptor cd_S19332C12;
extern VTBL_ENTRY _ZTI9S19332C12[];
extern  VTBL_ENTRY _ZTV9S19332C12[];
static Base_Class bases_S19332C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19332C3,    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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19332C7,    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
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19332C6,    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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19332C7,    ABISELECT(144,72), //bcp->offset
    62, //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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19332C5,    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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19332C10,    ABISELECT(192,100), //bcp->offset
    78, //bcp->virtual_function_table_offset
    3, //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
    6, //immediately_derived
  0, 1},
  {&cd_S19332C9,    ABISELECT(184,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19332C8,    ABISELECT(184,96), //bcp->offset
    66, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S19332C4,    ABISELECT(96,48), //bcp->offset
    35, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19332C2,    ABISELECT(72,36), //bcp->offset
    12, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19332C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {0}};
extern VTBL_ENTRY _ZTI8S19332C1[];
extern void _ZN9S19332C123v26Ev();
extern void _ZN8S19332C1D1Ev();
extern void _ZN8S19332C1D0Ev();
extern void _ZN8S19332C12v1Ev();
extern void _ZN8S19332C12v2Ev();
extern void _ZN8S19332C32v3Ev();
extern void _ZN8S19332C32v4Ev();
extern void _ZN8S19332C32v5Ev();
extern void _ZN8S19332C32v6Ev();
extern void _ZN8S19332C32v7Ev();
extern void _ZN8S19332C32v8Ev();
extern void ABISELECT(_ZTv0_n104_N8S19332C1D1Ev,_ZTv0_n52_N8S19332C1D1Ev)();
extern void ABISELECT(_ZThn72_N8S19332C1D1Ev,_ZThn36_N8S19332C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S19332C1D0Ev,_ZTv0_n52_N8S19332C1D0Ev)();
extern void ABISELECT(_ZThn72_N8S19332C1D0Ev,_ZThn36_N8S19332C1D0Ev)() __attribute__((weak));
extern void _ZN8S19332C23v25Ev();
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C63v11Ev();
extern void _ZN8S19332C63v12Ev();
extern void _ZN8S19332C53v13Ev();
extern void _ZN8S19332C53v14Ev();
extern void _ZN8S19332C53v15Ev();
extern void _ZN8S19332C53v16Ev();
extern void _ZN8S19332C43v22Ev();
extern void _ZN8S19332C43v23Ev();
extern void _ZN8S19332C43v24Ev();
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY vtc_S19332C1[] = {
  ABISELECT(192,100),
  ABISELECT(184,96),
  ABISELECT(184,96),
  ABISELECT(96,48),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C1[0]),
  (VTBL_ENTRY)&_ZN9S19332C123v26Ev,
  (VTBL_ENTRY)&_ZN8S19332C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19332C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19332C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19332C12v2Ev,
  0,
  ABISELECT(-72,-36),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(120,64),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(24,12),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19332C1[0]),
  (VTBL_ENTRY)&_ZN8S19332C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v8Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19332C1D1Ev,_ZTv0_n52_N8S19332C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19332C1D0Ev,_ZTv0_n52_N8S19332C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19332C23v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S19332C1[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v24Ev,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S19332C1[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-184,-96),
  (VTBL_ENTRY)&(_ZTI8S19332C1[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
  0,
  ABISELECT(-192,-100),
  (VTBL_ENTRY)&(_ZTI8S19332C1[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern VTBL_ENTRY _ZTV8S19332C1[];
extern void _ZN8S19332C32v3Ev();
extern void _ZN8S19332C32v4Ev();
extern void _ZN8S19332C32v5Ev();
extern void _ZN8S19332C32v6Ev();
extern void _ZN8S19332C32v7Ev();
extern void _ZN8S19332C32v8Ev();
extern void _ZN8S19332C2D1Ev();
extern void _ZN8S19332C2D0Ev();
extern void _ZN8S19332C23v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C2__8S19332C1[] = {
  ABISELECT(120,64),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN8S19332C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v4Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19332C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19332C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19332C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19332C23v25Ev,
};
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C63v11Ev();
extern void _ZN8S19332C63v12Ev();
extern void _ZN8S19332C53v13Ev();
extern void _ZN8S19332C53v14Ev();
extern void _ZN8S19332C53v15Ev();
extern void _ZN8S19332C53v16Ev();
extern void _ZN8S19332C43v22Ev();
extern void _ZN8S19332C43v23Ev();
extern void _ZN8S19332C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C4__8S19332C2__8S19332C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v24Ev,
};
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C78S19332C58S19332C4__A1__8S19332C2__8S19332C1[] = {
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
};
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C8__8S19332C2__8S19332C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C2__8S19332C1[] = {
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI8S19332C2[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern void _ZN8S19332C72v9Ev();
extern void _ZN8S19332C73v10Ev();
extern void _ZN8S19332C63v11Ev();
extern void _ZN8S19332C63v12Ev();
extern void _ZN8S19332C53v13Ev();
extern void _ZN8S19332C53v14Ev();
extern void _ZN8S19332C53v15Ev();
extern void _ZN8S19332C53v16Ev();
extern void _ZN8S19332C43v22Ev();
extern void _ZN8S19332C43v23Ev();
extern void _ZN8S19332C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C4__8S19332C1[] = {
  ABISELECT(96,52),
  ABISELECT(88,48),
  ABISELECT(88,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN8S19332C72v9Ev,
  (VTBL_ENTRY)&_ZN8S19332C73v10Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19332C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v14Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v15Ev,
  (VTBL_ENTRY)&_ZN8S19332C53v16Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19332C43v24Ev,
};
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C8__8S19332C4__8S19332C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C4__8S19332C1[] = {
  0,
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19332C4[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern void _ZN8S19332C93v18Ev();
extern void _ZN8S19332C83v19Ev();
extern void _ZN8S19332C83v20Ev();
extern void _ZN8S19332C83v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C8__8S19332C1[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C8[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v19Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v20Ev,
  (VTBL_ENTRY)&_ZN8S19332C83v21Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C8__8S19332C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C8[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
extern void _ZN8S19332C93v18Ev();
static  VTBL_ENTRY _tg__ZTV8S19332C9__8S19332C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN8S19332C93v18Ev,
};
extern void _ZN9S19332C103v17Ev();
static  VTBL_ENTRY _tg__ZTV9S19332C10__8S19332C9__8S19332C1[] = {
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19332C9[0]),
  (VTBL_ENTRY)&_ZN9S19332C103v17Ev,
};
static  VTT_ENTRY vtt_S19332C1[] = {
  {&(_ZTV8S19332C1[7]),  7,82},
  {&(_ZTV8S19332C1[26]),  26,82},
  {&(_ZTV8S19332C1[51]),  51,82},
  {&(_ZTV8S19332C1[64]),  64,82},
  {&(_ZTV8S19332C1[74]),  74,82},
  {&(_ZTV8S19332C1[74]),  74,82},
  {&(_ZTV8S19332C1[81]),  81,82},
  {&(_tg__ZTV8S19332C2__8S19332C1[6]),  6,15},
  {&(_tg__ZTV8S19332C4__8S19332C2__8S19332C1[16]),  16,27},
  {&(_tg__ZTV8S19332C78S19332C58S19332C4__A1__8S19332C2__8S19332C1[2]),  2,4},
  {&(_tg__ZTV8S19332C8__8S19332C2__8S19332C1[8]),  8,12},
  {&(_tg__ZTV8S19332C8__8S19332C2__8S19332C1[8]),  8,12},
  {&(_tg__ZTV9S19332C10__8S19332C2__8S19332C1[3]),  3,4},
  {&(_tg__ZTV8S19332C4__8S19332C1[5]),  5,16},
  {&(_tg__ZTV8S19332C8__8S19332C4__8S19332C1[8]),  8,12},
  {&(_tg__ZTV8S19332C8__8S19332C4__8S19332C1[8]),  8,12},
  {&(_tg__ZTV9S19332C10__8S19332C4__8S19332C1[3]),  3,4},
  {&(_tg__ZTV8S19332C8__8S19332C1[5]),  5,9},
  {&(_tg__ZTV8S19332C8__8S19332C1[5]),  5,9},
  {&(_tg__ZTV9S19332C10__8S19332C8__8S19332C1[3]),  3,4},
  {&(_tg__ZTV8S19332C9__8S19332C1[3]),  3,4},
  {&(_tg__ZTV9S19332C10__8S19332C9__8S19332C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19332C1[];
extern  VTBL_ENTRY _ZTV8S19332C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19332C1[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19332C1D0Ev,_ZTv0_n52_N8S19332C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19332C1D0Ev,_ZThn36_N8S19332C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19332C1D1Ev,_ZTv0_n52_N8S19332C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19332C1D1Ev,_ZThn36_N8S19332C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19332C1 = {  "S19332C1", // class name
  bases_S19332C1, 11,
  &(vtc_S19332C1[0]), // expected_vtbl_contents
  &(vtt_S19332C1[0]), // expected_vtt_contents
  ABISELECT(224,112), // object size
  NSPAIRA(_ZTI8S19332C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19332C1),82, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19332C1),22, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S370C6  {
  ::S4473C12_nt s370c6f0;
  int s370c6f1[2];
  char s370c6f2;
  virtual  ~S370C6(); // _ZN6S370C6D1Ev
  virtual void  v4(); // _ZN6S370C62v4Ev
  virtual void  v5(); // _ZN6S370C62v5Ev
  virtual void  v6(); // _ZN6S370C62v6Ev
  S370C6(); // tgen
};
//SIG(-1 S370C6) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S370C6 ::~S370C6(){ note_dtor("S370C6", this);}
void  S370C6 ::v4(){vfunc_called(this, "_ZN6S370C62v4Ev");}
void  S370C6 ::v5(){vfunc_called(this, "_ZN6S370C62v5Ev");}
void  S370C6 ::v6(){vfunc_called(this, "_ZN6S370C62v6Ev");}
S370C6 ::S370C6(){ note_ctor("S370C6", this);} // tgen

static void Test_S370C6()
{
  extern Class_Descriptor cd_S370C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S370C6, buf);
    S370C6 *dp, &lv = *(dp=new (buf) S370C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S370C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S370C6)");
    check_field_offset(lv, s370c6f0, ABISELECT(8,4), "S370C6.s370c6f0");
    check_field_offset(lv, s370c6f1, ABISELECT(24,16), "S370C6.s370c6f1");
    check_field_offset(lv, s370c6f2, ABISELECT(32,24), "S370C6.s370c6f2");
    test_class_info(&lv, &cd_S370C6);
    dp->~S370C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS370C6(Test_S370C6, "S370C6", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S370C6C1Ev();
extern void _ZN6S370C6D1Ev();
Name_Map name_map_S370C6[] = {
  NSPAIR(_ZN6S370C6C1Ev),
  NSPAIR(_ZN6S370C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S370C6[];
extern void _ZN6S370C6D1Ev();
extern void _ZN6S370C6D0Ev();
extern void _ZN6S370C62v4Ev();
extern void _ZN6S370C62v5Ev();
extern void _ZN6S370C62v6Ev();
static  VTBL_ENTRY vtc_S370C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S370C6[0]),
  (VTBL_ENTRY)&_ZN6S370C6D1Ev,
  (VTBL_ENTRY)&_ZN6S370C6D0Ev,
  (VTBL_ENTRY)&_ZN6S370C62v4Ev,
  (VTBL_ENTRY)&_ZN6S370C62v5Ev,
  (VTBL_ENTRY)&_ZN6S370C62v6Ev,
};
extern VTBL_ENTRY _ZTI6S370C6[];
extern  VTBL_ENTRY _ZTV6S370C6[];
Class_Descriptor cd_S370C6 = {  "S370C6", // class name
  0,0,//no base classes
  &(vtc_S370C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S370C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S370C6),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  S370C5  : S370C6 {
  void *s370c5f0;
  virtual void  v7(); // _ZN6S370C52v7Ev
  virtual void  v8(); // _ZN6S370C52v8Ev
  ~S370C5(); // tgen
  S370C5(); // tgen
};
//SIG(-1 S370C5) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S370C5 ::v7(){vfunc_called(this, "_ZN6S370C52v7Ev");}
void  S370C5 ::v8(){vfunc_called(this, "_ZN6S370C52v8Ev");}
S370C5 ::~S370C5(){ note_dtor("S370C5", this);} // tgen
S370C5 ::S370C5(){ note_ctor("S370C5", this);} // tgen

static void Test_S370C5()
{
  extern Class_Descriptor cd_S370C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S370C5, buf);
    S370C5 *dp, &lv = *(dp=new (buf) S370C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S370C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S370C5)");
    check_base_class_offset(lv, (S370C6*), 0, "S370C5");
    check_field_offset(lv, s370c5f0, ABISELECT(40,28), "S370C5.s370c5f0");
    test_class_info(&lv, &cd_S370C5);
    dp->~S370C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS370C5(Test_S370C5, "S370C5", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S370C5C1Ev();
extern void _ZN6S370C5D1Ev();
Name_Map name_map_S370C5[] = {
  NSPAIR(_ZN6S370C5C1Ev),
  NSPAIR(_ZN6S370C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S370C6;
extern VTBL_ENTRY _ZTI6S370C6[];
extern  VTBL_ENTRY _ZTV6S370C6[];
static Base_Class bases_S370C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S370C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI6S370C5[];
extern void _ZN6S370C5D1Ev();
extern void _ZN6S370C5D0Ev();
extern void _ZN6S370C62v4Ev();
extern void _ZN6S370C62v5Ev();
extern void _ZN6S370C62v6Ev();
extern void _ZN6S370C52v7Ev();
extern void _ZN6S370C52v8Ev();
static  VTBL_ENTRY vtc_S370C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S370C5[0]),
  (VTBL_ENTRY)&_ZN6S370C5D1Ev,
  (VTBL_ENTRY)&_ZN6S370C5D0Ev,
  (VTBL_ENTRY)&_ZN6S370C62v4Ev,
  (VTBL_ENTRY)&_ZN6S370C62v5Ev,
  (VTBL_ENTRY)&_ZN6S370C62v6Ev,
  (VTBL_ENTRY)&_ZN6S370C52v7Ev,
  (VTBL_ENTRY)&_ZN6S370C52v8Ev,
};
extern VTBL_ENTRY _ZTI6S370C5[];
extern  VTBL_ENTRY _ZTV6S370C5[];
Class_Descriptor cd_S370C5 = {  "S370C5", // class name
  bases_S370C5, 1,
  &(vtc_S370C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S370C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S370C5),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  S370C4  : S370C5 {
  void *s370c4f0;
  char s370c4f1;
  ::S2366C14_nt s370c4f2;
  virtual  ~S370C4(); // _ZN6S370C4D1Ev
  virtual void  v9(); // _ZN6S370C42v9Ev
  S370C4(); // tgen
};
//SIG(-1 S370C4) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S370C4 ::~S370C4(){ note_dtor("S370C4", this);}
void  S370C4 ::v9(){vfunc_called(this, "_ZN6S370C42v9Ev");}
S370C4 ::S370C4(){ note_ctor("S370C4", this);} // tgen

static void Test_S370C4()
{
  extern Class_Descriptor cd_S370C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S370C4, buf);
    S370C4 *dp, &lv = *(dp=new (buf) S370C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S370C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S370C4)");
    check_base_class_offset(lv, (S370C6*)(S370C5*), 0, "S370C4");
    check_base_class_offset(lv, (S370C5*), 0, "S370C4");
    check_field_offset(lv, s370c4f0, ABISELECT(48,32), "S370C4.s370c4f0");
    check_field_offset(lv, s370c4f1, ABISELECT(56,36), "S370C4.s370c4f1");
    check_field_offset(lv, s370c4f2, ABISELECT(60,40), "S370C4.s370c4f2");
    test_class_info(&lv, &cd_S370C4);
    dp->~S370C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS370C4(Test_S370C4, "S370C4", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S370C4C1Ev();
extern void _ZN6S370C4D1Ev();
Name_Map name_map_S370C4[] = {
  NSPAIR(_ZN6S370C4C1Ev),
  NSPAIR(_ZN6S370C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S370C6;
extern VTBL_ENTRY _ZTI6S370C6[];
extern  VTBL_ENTRY _ZTV6S370C6[];
extern Class_Descriptor cd_S370C5;
extern VTBL_ENTRY _ZTI6S370C5[];
extern  VTBL_ENTRY _ZTV6S370C5[];
static Base_Class bases_S370C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S370C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S370C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S370C4[];
extern void _ZN6S370C4D1Ev();
extern void _ZN6S370C4D0Ev();
extern void _ZN6S370C62v4Ev();
extern void _ZN6S370C62v5Ev();
extern void _ZN6S370C62v6Ev();
extern void _ZN6S370C52v7Ev();
extern void _ZN6S370C52v8Ev();
extern void _ZN6S370C42v9Ev();
static  VTBL_ENTRY vtc_S370C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S370C4[0]),
  (VTBL_ENTRY)&_ZN6S370C4D1Ev,
  (VTBL_ENTRY)&_ZN6S370C4D0Ev,
  (VTBL_ENTRY)&_ZN6S370C62v4Ev,
  (VTBL_ENTRY)&_ZN6S370C62v5Ev,
  (VTBL_ENTRY)&_ZN6S370C62v6Ev,
  (VTBL_ENTRY)&_ZN6S370C52v7Ev,
  (VTBL_ENTRY)&_ZN6S370C52v8Ev,
  (VTBL_ENTRY)&_ZN6S370C42v9Ev,
};
extern VTBL_ENTRY _ZTI6S370C4[];
extern  VTBL_ENTRY _ZTV6S370C4[];
Class_Descriptor cd_S370C4 = {  "S370C4", // class name
  bases_S370C4, 2,
  &(vtc_S370C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S370C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S370C4),10, //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  S370C3  : S370C4 {
  void *s370c3f0[3];
  int s370c3f1;
  ::S130C11_nt s370c3f2;
  virtual  ~S370C3(); // _ZN6S370C3D1Ev
  virtual void  v10(); // _ZN6S370C33v10Ev
  virtual void  v11(); // _ZN6S370C33v11Ev
  virtual void  v12(); // _ZN6S370C33v12Ev
  virtual void  v13(); // _ZN6S370C33v13Ev
  virtual void  v14(); // _ZN6S370C33v14Ev
  virtual void  v15(); // _ZN6S370C33v15Ev
  virtual void  v16(); // _ZN6S370C33v16Ev
  S370C3(); // tgen
};
//SIG(-1 S370C3) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v11 v12 Fp} vd v13 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 v4 v5 v6 v7 Fp[3] Fi FC8{ m Fp[2]}}


 S370C3 ::~S370C3(){ note_dtor("S370C3", this);}
void  S370C3 ::v10(){vfunc_called(this, "_ZN6S370C33v10Ev");}
void  S370C3 ::v11(){vfunc_called(this, "_ZN6S370C33v11Ev");}
void  S370C3 ::v12(){vfunc_called(this, "_ZN6S370C33v12Ev");}
void  S370C3 ::v13(){vfunc_called(this, "_ZN6S370C33v13Ev");}
void  S370C3 ::v14(){vfunc_called(this, "_ZN6S370C33v14Ev");}
void  S370C3 ::v15(){vfunc_called(this, "_ZN6S370C33v15Ev");}
void  S370C3 ::v16(){vfunc_called(this, "_ZN6S370C33v16Ev");}
S370C3 ::S370C3(){ note_ctor("S370C3", this);} // tgen

static void Test_S370C3()
{
  extern Class_Descriptor cd_S370C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S370C3, buf);
    S370C3 *dp, &lv = *(dp=new (buf) S370C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S370C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S370C3)");
    check_base_class_offset(lv, (S370C6*)(S370C5*)(S370C4*), 0, "S370C3");
    check_base_class_offset(lv, (S370C5*)(S370C4*), 0, "S370C3");
    check_base_class_offset(lv, (S370C4*), 0, "S370C3");
    check_field_offset(lv, s370c3f0, ABISELECT(72,48), "S370C3.s370c3f0");
    check_field_offset(lv, s370c3f1, ABISELECT(96,60), "S370C3.s370c3f1");
    check_field_offset(lv, s370c3f2, ABISELECT(104,64), "S370C3.s370c3f2");
    test_class_info(&lv, &cd_S370C3);
    dp->~S370C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS370C3(Test_S370C3, "S370C3", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN6S370C3C1Ev();
extern void _ZN6S370C3D1Ev();
Name_Map name_map_S370C3[] = {
  NSPAIR(_ZN6S370C3C1Ev),
  NSPAIR(_ZN6S370C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S370C6;
extern VTBL_ENTRY _ZTI6S370C6[];
extern  VTBL_ENTRY _ZTV6S370C6[];
extern Class_Descriptor cd_S370C5;
extern VTBL_ENTRY _ZTI6S370C5[];
extern  VTBL_ENTRY _ZTV6S370C5[];
extern Class_Descriptor cd_S370C4;
extern VTBL_ENTRY _ZTI6S370C4[];
extern  VTBL_ENTRY _ZTV6S370C4[];
static Base_Class bases_S370C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S370C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S370C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S370C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S370C3[];
extern void _ZN6S370C3D1Ev();
extern void _ZN6S370C3D0Ev();
extern void _ZN6S370C62v4Ev();
extern void _ZN6S370C62v5Ev();
extern void _ZN6S370C62v6Ev();
extern void _ZN6S370C52v7Ev();
extern void _ZN6S370C52v8Ev();
extern void _ZN6S370C42v9Ev();
extern void _ZN6S370C33v10Ev();
extern void _ZN6S370C33v11Ev();
extern void _ZN6S370C33v12Ev();
extern void _ZN6S370C33v13Ev();
extern void _ZN6S370C33v14Ev();
extern void _ZN6S370C33v15Ev();
extern void _ZN6S370C33v16Ev();
static  VTBL_ENTRY vtc_S370C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S370C3[0]),
  (VTBL_ENTRY)&_ZN6S370C3D1Ev,
  (VTBL_ENTRY)&_ZN6S370C3D0Ev,
  (VTBL_ENTRY)&_ZN6S370C62v4Ev,
  (VTBL_ENTRY)&_ZN6S370C62v5Ev,
  (VTBL_ENTRY)&_ZN6S370C62v6Ev,
  (VTBL_ENTRY)&_ZN6S370C52v7Ev,
  (VTBL_ENTRY)&_ZN6S370C52v8Ev,
  (VTBL_ENTRY)&_ZN6S370C42v9Ev,
  (VTBL_ENTRY)&_ZN6S370C33v10Ev,
  (VTBL_ENTRY)&_ZN6S370C33v11Ev,
  (VTBL_ENTRY)&_ZN6S370C33v12Ev,
  (VTBL_ENTRY)&_ZN6S370C33v13Ev,
  (VTBL_ENTRY)&_ZN6S370C33v14Ev,
  (VTBL_ENTRY)&_ZN6S370C33v15Ev,
  (VTBL_ENTRY)&_ZN6S370C33v16Ev,
};
extern VTBL_ENTRY _ZTI6S370C3[];
extern  VTBL_ENTRY _ZTV6S370C3[];
Class_Descriptor cd_S370C3 = {  "S370C3", // class name
  bases_S370C3, 3,
  &(vtc_S370C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI6S370C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S370C3),17, //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  S370C2  : S370C3 {
  void *s370c2f0[2];
  virtual  ~S370C2(); // _ZN6S370C2D1Ev
  virtual void  v17(); // _ZN6S370C23v17Ev
  virtual void  v18(); // _ZN6S370C23v18Ev
  virtual void  v19(); // _ZN6S370C23v19Ev
  S370C2(); // tgen
};
//SIG(-1 S370C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v4 v5 v6 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v7 v8 Fp} vd v9 Fp Fc FC8{ m Fi[2]}} vd v10 v11 v12 v13 v14 v15 v16 Fp[3] Fi FC9{ m Fp[2]}} vd v1 v2 v3 Fp[2]}


 S370C2 ::~S370C2(){ note_dtor("S370C2", this);}
void  S370C2 ::v17(){vfunc_called(this, "_ZN6S370C23v17Ev");}
void  S370C2 ::v18(){vfunc_called(this, "_ZN6S370C23v18Ev");}
void  S370C2 ::v19(){vfunc_called(this, "_ZN6S370C23v19Ev");}
S370C2 ::S370C2(){ note_ctor("S370C2", this);} // tgen

static void Test_S370C2()
{
  extern Class_Descriptor cd_S370C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S370C2, buf);
    S370C2 *dp, &lv = *(dp=new (buf) S370C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S370C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S370C2)");
    check_base_class_offset(lv, (S370C6*)(S370C5*)(S370C4*)(S370C3*), 0, "S370C2");
    check_base_class_offset(lv, (S370C5*)(S370C4*)(S370C3*), 0, "S370C2");
    check_base_class_offset(lv, (S370C4*)(S370C3*), 0, "S370C2");
    check_base_class_offset(lv, (S370C3*), 0, "S370C2");
    check_field_offset(lv, s370c2f0, ABISELECT(120,72), "S370C2.s370c2f0");
    test_class_info(&lv, &cd_S370C2);
    dp->~S370C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS370C2(Test_S370C2, "S370C2", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN6S370C2C1Ev();
extern void _ZN6S370C2D1Ev();
Name_Map name_map_S370C2[] = {
  NSPAIR(_ZN6S370C2C1Ev),
  NSPAIR(_ZN6S370C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S370C6;
extern VTBL_ENTRY _ZTI6S370C6[];
extern  VTBL_ENTRY _ZTV6S370C6[];
extern Class_Descriptor cd_S370C5;
extern VTBL_ENTRY _ZTI6S370C5[];
extern  VTBL_ENTRY _ZTV6S370C5[];
extern Class_Descriptor cd_S370C4;
extern VTBL_ENTRY _ZTI6S370C4[];
extern  VTBL_ENTRY _ZTV6S370C4[];
extern Class_Descriptor cd_S370C3;
extern VTBL_ENTRY _ZTI6S370C3[];
extern  VTBL_ENTRY _ZTV6S370C3[];
static Base_Class bases_S370C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S370C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S370C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S370C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S370C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S370C2[];
extern void _ZN6S370C2D1Ev();
extern void _ZN6S370C2D0Ev();
extern void _ZN6S370C62v4Ev();
extern void _ZN6S370C62v5Ev();
extern void _ZN6S370C62v6Ev();
extern void _ZN6S370C52v7Ev();
extern void _ZN6S370C52v8Ev();
extern void _ZN6S370C42v9Ev();
extern void _ZN6S370C33v10Ev();
extern void _ZN6S370C33v11Ev();
extern void _ZN6S370C33v12Ev();
extern void _ZN6S370C33v13Ev();
extern void _ZN6S370C33v14Ev();
extern void _ZN6S370C33v15Ev();
extern void _ZN6S370C33v16Ev();
extern void _ZN6S370C23v17Ev();
extern void _ZN6S370C23v18Ev();
extern void _ZN6S370C23v19Ev();
static  VTBL_ENTRY vtc_S370C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S370C2[0]),
  (VTBL_ENTRY)&_ZN6S370C2D1Ev,
  (VTBL_ENTRY)&_ZN6S370C2D0Ev,
  (VTBL_ENTRY)&_ZN6S370C62v4Ev,
  (VTBL_ENTRY)&_ZN6S370C62v5Ev,
  (VTBL_ENTRY)&_ZN6S370C62v6Ev,
  (VTBL_ENTRY)&_ZN6S370C52v7Ev,
  (VTBL_ENTRY)&_ZN6S370C52v8Ev,
  (VTBL_ENTRY)&_ZN6S370C42v9Ev,
  (VTBL_ENTRY)&_ZN6S370C33v10Ev,
  (VTBL_ENTRY)&_ZN6S370C33v11Ev,
  (VTBL_ENTRY)&_ZN6S370C33v12Ev,
  (VTBL_ENTRY)&_ZN6S370C33v13Ev,
  (VTBL_ENTRY)&_ZN6S370C33v14Ev,
  (VTBL_ENTRY)&_ZN6S370C33v15Ev,
  (VTBL_ENTRY)&_ZN6S370C33v16Ev,
  (VTBL_ENTRY)&_ZN6S370C23v17Ev,
  (VTBL_ENTRY)&_ZN6S370C23v18Ev,
  (VTBL_ENTRY)&_ZN6S370C23v19Ev,
};
extern VTBL_ENTRY _ZTI6S370C2[];
extern  VTBL_ENTRY _ZTV6S370C2[];
Class_Descriptor cd_S370C2 = {  "S370C2", // class name
  bases_S370C2, 4,
  &(vtc_S370C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI6S370C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S370C2),20, //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  S370C1  : S370C2 {
  void *s370c1f0[2];
  virtual  ~S370C1(); // _ZN6S370C1D1Ev
  virtual void  v1(); // _ZN6S370C12v1Ev
  virtual void  v2(); // _ZN6S370C12v2Ev
  virtual void  v3(); // _ZN6S370C12v3Ev
  S370C1(); // tgen
};
//SIG(1 S370C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 FC7{ m Fp Fi FC8{ m}} Fi[2] Fc} v7 v8 Fp} vd v9 Fp Fc FC9{ m Fi[2]}} vd v10 v11 v12 v13 v14 v15 v16 Fp[3] Fi FC10{ m Fp[2]}} vd v17 v18 v19 Fp[2]} vd v1 v2 v3 Fp[2]}


 S370C1 ::~S370C1(){ note_dtor("S370C1", this);}
void  S370C1 ::v1(){vfunc_called(this, "_ZN6S370C12v1Ev");}
void  S370C1 ::v2(){vfunc_called(this, "_ZN6S370C12v2Ev");}
void  S370C1 ::v3(){vfunc_called(this, "_ZN6S370C12v3Ev");}
S370C1 ::S370C1(){ note_ctor("S370C1", this);} // tgen

static void Test_S370C1()
{
  extern Class_Descriptor cd_S370C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,23)];
    init_test(&cd_S370C1, buf);
    S370C1 *dp, &lv = *(dp=new (buf) S370C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,88), "sizeof(S370C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S370C1)");
    check_base_class_offset(lv, (S370C6*)(S370C5*)(S370C4*)(S370C3*)(S370C2*), 0, "S370C1");
    check_base_class_offset(lv, (S370C5*)(S370C4*)(S370C3*)(S370C2*), 0, "S370C1");
    check_base_class_offset(lv, (S370C4*)(S370C3*)(S370C2*), 0, "S370C1");
    check_base_class_offset(lv, (S370C3*)(S370C2*), 0, "S370C1");
    check_base_class_offset(lv, (S370C2*), 0, "S370C1");
    check_field_offset(lv, s370c1f0, ABISELECT(136,80), "S370C1.s370c1f0");
    test_class_info(&lv, &cd_S370C1);
    dp->~S370C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS370C1(Test_S370C1, "S370C1", ABISELECT(152,88));

#else // __cplusplus

extern void _ZN6S370C1C1Ev();
extern void _ZN6S370C1D1Ev();
Name_Map name_map_S370C1[] = {
  NSPAIR(_ZN6S370C1C1Ev),
  NSPAIR(_ZN6S370C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S370C6;
extern VTBL_ENTRY _ZTI6S370C6[];
extern  VTBL_ENTRY _ZTV6S370C6[];
extern Class_Descriptor cd_S370C5;
extern VTBL_ENTRY _ZTI6S370C5[];
extern  VTBL_ENTRY _ZTV6S370C5[];
extern Class_Descriptor cd_S370C4;
extern VTBL_ENTRY _ZTI6S370C4[];
extern  VTBL_ENTRY _ZTV6S370C4[];
extern Class_Descriptor cd_S370C3;
extern VTBL_ENTRY _ZTI6S370C3[];
extern  VTBL_ENTRY _ZTV6S370C3[];
extern Class_Descriptor cd_S370C2;
extern VTBL_ENTRY _ZTI6S370C2[];
extern  VTBL_ENTRY _ZTV6S370C2[];
static Base_Class bases_S370C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S370C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S370C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S370C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S370C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S370C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S370C1[];
extern void _ZN6S370C1D1Ev();
extern void _ZN6S370C1D0Ev();
extern void _ZN6S370C62v4Ev();
extern void _ZN6S370C62v5Ev();
extern void _ZN6S370C62v6Ev();
extern void _ZN6S370C52v7Ev();
extern void _ZN6S370C52v8Ev();
extern void _ZN6S370C42v9Ev();
extern void _ZN6S370C33v10Ev();
extern void _ZN6S370C33v11Ev();
extern void _ZN6S370C33v12Ev();
extern void _ZN6S370C33v13Ev();
extern void _ZN6S370C33v14Ev();
extern void _ZN6S370C33v15Ev();
extern void _ZN6S370C33v16Ev();
extern void _ZN6S370C23v17Ev();
extern void _ZN6S370C23v18Ev();
extern void _ZN6S370C23v19Ev();
extern void _ZN6S370C12v1Ev();
extern void _ZN6S370C12v2Ev();
extern void _ZN6S370C12v3Ev();
static  VTBL_ENTRY vtc_S370C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S370C1[0]),
  (VTBL_ENTRY)&_ZN6S370C1D1Ev,
  (VTBL_ENTRY)&_ZN6S370C1D0Ev,
  (VTBL_ENTRY)&_ZN6S370C62v4Ev,
  (VTBL_ENTRY)&_ZN6S370C62v5Ev,
  (VTBL_ENTRY)&_ZN6S370C62v6Ev,
  (VTBL_ENTRY)&_ZN6S370C52v7Ev,
  (VTBL_ENTRY)&_ZN6S370C52v8Ev,
  (VTBL_ENTRY)&_ZN6S370C42v9Ev,
  (VTBL_ENTRY)&_ZN6S370C33v10Ev,
  (VTBL_ENTRY)&_ZN6S370C33v11Ev,
  (VTBL_ENTRY)&_ZN6S370C33v12Ev,
  (VTBL_ENTRY)&_ZN6S370C33v13Ev,
  (VTBL_ENTRY)&_ZN6S370C33v14Ev,
  (VTBL_ENTRY)&_ZN6S370C33v15Ev,
  (VTBL_ENTRY)&_ZN6S370C33v16Ev,
  (VTBL_ENTRY)&_ZN6S370C23v17Ev,
  (VTBL_ENTRY)&_ZN6S370C23v18Ev,
  (VTBL_ENTRY)&_ZN6S370C23v19Ev,
  (VTBL_ENTRY)&_ZN6S370C12v1Ev,
  (VTBL_ENTRY)&_ZN6S370C12v2Ev,
  (VTBL_ENTRY)&_ZN6S370C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S370C1[];
extern  VTBL_ENTRY _ZTV6S370C1[];
Class_Descriptor cd_S370C1 = {  "S370C1", // class name
  bases_S370C1, 5,
  &(vtc_S370C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,88), // object size
  NSPAIRA(_ZTI6S370C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S370C1),23, //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  S4472C3  {
  int s4472c3f0[4];
  ::S4474C4_nt s4472c3f1;
  int s4472c3f2;
  char s4472c3f3;
  ::S4474C5_nt s4472c3f4;
  int s4472c3f5;
  virtual  ~S4472C3(); // _ZN7S4472C3D1Ev
  virtual void  v2(); // _ZN7S4472C32v2Ev
  virtual void  v3(); // _ZN7S4472C32v3Ev
  virtual void  v4(); // _ZN7S4472C32v4Ev
  S4472C3(); // tgen
};
//SIG(-1 S4472C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4472C3 ::~S4472C3(){ note_dtor("S4472C3", this);}
void  S4472C3 ::v2(){vfunc_called(this, "_ZN7S4472C32v2Ev");}
void  S4472C3 ::v3(){vfunc_called(this, "_ZN7S4472C32v3Ev");}
void  S4472C3 ::v4(){vfunc_called(this, "_ZN7S4472C32v4Ev");}
S4472C3 ::S4472C3(){ note_ctor("S4472C3", this);} // tgen

static void Test_S4472C3()
{
  extern Class_Descriptor cd_S4472C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4472C3, buf);
    S4472C3 *dp, &lv = *(dp=new (buf) S4472C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4472C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4472C3)");
    check_field_offset(lv, s4472c3f0, ABISELECT(8,4), "S4472C3.s4472c3f0");
    check_field_offset(lv, s4472c3f1, ABISELECT(24,20), "S4472C3.s4472c3f1");
    check_field_offset(lv, s4472c3f2, ABISELECT(40,28), "S4472C3.s4472c3f2");
    check_field_offset(lv, s4472c3f3, ABISELECT(44,32), "S4472C3.s4472c3f3");
    check_field_offset(lv, s4472c3f4, ABISELECT(48,36), "S4472C3.s4472c3f4");
    check_field_offset(lv, s4472c3f5, ABISELECT(64,48), "S4472C3.s4472c3f5");
    test_class_info(&lv, &cd_S4472C3);
    dp->~S4472C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4472C3(Test_S4472C3, "S4472C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4472C3C1Ev();
extern void _ZN7S4472C3D1Ev();
Name_Map name_map_S4472C3[] = {
  NSPAIR(_ZN7S4472C3C1Ev),
  NSPAIR(_ZN7S4472C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4472C3[];
extern void _ZN7S4472C3D1Ev();
extern void _ZN7S4472C3D0Ev();
extern void _ZN7S4472C32v2Ev();
extern void _ZN7S4472C32v3Ev();
extern void _ZN7S4472C32v4Ev();
static  VTBL_ENTRY vtc_S4472C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4472C3[0]),
  (VTBL_ENTRY)&_ZN7S4472C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4472C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4472C3[];
extern  VTBL_ENTRY _ZTV7S4472C3[];
Class_Descriptor cd_S4472C3 = {  "S4472C3", // class name
  0,0,//no base classes
  &(vtc_S4472C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4472C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4472C3),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  S4472C6  {
  virtual  ~S4472C6(); // _ZN7S4472C6D1Ev
  virtual void  v5(); // _ZN7S4472C62v5Ev
  S4472C6(); // tgen
};
//SIG(-1 S4472C6) C1{ vd v1}


 S4472C6 ::~S4472C6(){ note_dtor("S4472C6", this);}
void  S4472C6 ::v5(){vfunc_called(this, "_ZN7S4472C62v5Ev");}
S4472C6 ::S4472C6(){ note_ctor("S4472C6", this);} // tgen

static void Test_S4472C6()
{
  extern Class_Descriptor cd_S4472C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4472C6, buf);
    S4472C6 *dp, &lv = *(dp=new (buf) S4472C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4472C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4472C6)");
    test_class_info(&lv, &cd_S4472C6);
    dp->~S4472C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4472C6(Test_S4472C6, "S4472C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4472C6C1Ev();
extern void _ZN7S4472C6D1Ev();
Name_Map name_map_S4472C6[] = {
  NSPAIR(_ZN7S4472C6C1Ev),
  NSPAIR(_ZN7S4472C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4472C6[];
extern void _ZN7S4472C6D1Ev();
extern void _ZN7S4472C6D0Ev();
extern void _ZN7S4472C62v5Ev();
static  VTBL_ENTRY vtc_S4472C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4472C6[0]),
  (VTBL_ENTRY)&_ZN7S4472C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4472C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4472C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4472C6[];
extern  VTBL_ENTRY _ZTV7S4472C6[];
Class_Descriptor cd_S4472C6 = {  "S4472C6", // class name
  0,0,//no base classes
  &(vtc_S4472C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4472C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4472C6),5, //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  S4472C2  : S4472C3 , S4472C6 {
  void *s4472c2f0;
  int s4472c2f1;
  void *s4472c2f2;
  virtual  ~S4472C2(); // _ZN7S4472C2D1Ev
  virtual void  v6(); // _ZN7S4472C22v6Ev
  virtual void  v7(); // _ZN7S4472C22v7Ev
  S4472C2(); // tgen
};
//SIG(-1 S4472C2) C1{ BC2{ vd v3 v4 v5 Fi[4] FC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} BC5{ vd v6} vd v1 v2 Fp Fi Fp}


 S4472C2 ::~S4472C2(){ note_dtor("S4472C2", this);}
void  S4472C2 ::v6(){vfunc_called(this, "_ZN7S4472C22v6Ev");}
void  S4472C2 ::v7(){vfunc_called(this, "_ZN7S4472C22v7Ev");}
S4472C2 ::S4472C2(){ note_ctor("S4472C2", this);} // tgen

static void Test_S4472C2()
{
  extern Class_Descriptor cd_S4472C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4472C2, buf);
    S4472C2 *dp, &lv = *(dp=new (buf) S4472C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4472C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4472C2)");
    check_base_class_offset(lv, (S4472C3*), 0, "S4472C2");
    check_base_class_offset(lv, (S4472C6*), ABISELECT(72,52), "S4472C2");
    check_field_offset(lv, s4472c2f0, ABISELECT(80,56), "S4472C2.s4472c2f0");
    check_field_offset(lv, s4472c2f1, ABISELECT(88,60), "S4472C2.s4472c2f1");
    check_field_offset(lv, s4472c2f2, ABISELECT(96,64), "S4472C2.s4472c2f2");
    test_class_info(&lv, &cd_S4472C2);
    dp->~S4472C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4472C2(Test_S4472C2, "S4472C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4472C2C1Ev();
extern void _ZN7S4472C2D1Ev();
Name_Map name_map_S4472C2[] = {
  NSPAIR(_ZN7S4472C2C1Ev),
  NSPAIR(_ZN7S4472C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4472C3;
extern VTBL_ENTRY _ZTI7S4472C3[];
extern  VTBL_ENTRY _ZTV7S4472C3[];
extern Class_Descriptor cd_S4472C6;
extern VTBL_ENTRY _ZTI7S4472C6[];
extern  VTBL_ENTRY _ZTV7S4472C6[];
static Base_Class bases_S4472C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4472C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4472C6,    ABISELECT(72,52), //bcp->offset
    9, //bcp->virtual_function_table_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 _ZTI7S4472C2[];
extern void _ZN7S4472C2D1Ev();
extern void _ZN7S4472C2D0Ev();
extern void _ZN7S4472C32v2Ev();
extern void _ZN7S4472C32v3Ev();
extern void _ZN7S4472C32v4Ev();
extern void _ZN7S4472C22v6Ev();
extern void _ZN7S4472C22v7Ev();
extern void ABISELECT(_ZThn72_N7S4472C2D1Ev,_ZThn52_N7S4472C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S4472C2D0Ev,_ZThn52_N7S4472C2D0Ev)();
extern void _ZN7S4472C62v5Ev();
static  VTBL_ENTRY vtc_S4472C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4472C2[0]),
  (VTBL_ENTRY)&_ZN7S4472C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4472C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4472C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4472C22v7Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4472C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4472C2D1Ev,_ZThn52_N7S4472C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4472C2D0Ev,_ZThn52_N7S4472C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4472C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4472C2[];
extern  VTBL_ENTRY _ZTV7S4472C2[];
Class_Descriptor cd_S4472C2 = {  "S4472C2", // class name
  bases_S4472C2, 2,
  &(vtc_S4472C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4472C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4472C2),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  S4472C9  {
  ::S4474C14_nt s4472c9f0;
  void  mf4472c9(); // _ZN7S4472C98mf4472c9Ev
};
//SIG(-1 S4472C9) C1{ m FC2{ m FC3{ vd m FL Fc} FC3}}


void  S4472C9 ::mf4472c9(){}

static void Test_S4472C9()
{
  {
    init_simple_test("S4472C9");
    S4472C9 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4472C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4472C9)");
    check_field_offset(lv, s4472c9f0, 0, "S4472C9.s4472c9f0");
  }
}
static Arrange_To_Call_Me vS4472C9(Test_S4472C9, "S4472C9", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4472C1  : S4472C2 {
  ::S4473C12_nt s4472c1f0;
  void *s4472c1f1;
  ::S4472C9 s4472c1f2;
  virtual  ~S4472C1(); // _ZN7S4472C1D1Ev
  virtual void  v1(); // _ZN7S4472C12v1Ev
  S4472C1(); // tgen
};
//SIG(1 S4472C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} BC6{ vd v5} vd v6 v7 Fp Fi Fp} vd v1 FC7{ m Fp Fi FC8{ m}} Fp FC9{ m FC10{ m FC11{ vd m FL Fc} FC11}}}


 S4472C1 ::~S4472C1(){ note_dtor("S4472C1", this);}
void  S4472C1 ::v1(){vfunc_called(this, "_ZN7S4472C12v1Ev");}
S4472C1 ::S4472C1(){ note_ctor("S4472C1", this);} // tgen

static void Test_S4472C1()
{
  extern Class_Descriptor cd_S4472C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,30)];
    init_test(&cd_S4472C1, buf);
    S4472C1 *dp, &lv = *(dp=new (buf) S4472C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,116), "sizeof(S4472C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4472C1)");
    check_base_class_offset(lv, (S4472C3*)(S4472C2*), 0, "S4472C1");
    check_base_class_offset(lv, (S4472C6*)(S4472C2*), ABISELECT(72,52), "S4472C1");
    check_base_class_offset(lv, (S4472C2*), 0, "S4472C1");
    check_field_offset(lv, s4472c1f0, ABISELECT(104,68), "S4472C1.s4472c1f0");
    check_field_offset(lv, s4472c1f1, ABISELECT(120,80), "S4472C1.s4472c1f1");
    check_field_offset(lv, s4472c1f2, ABISELECT(128,84), "S4472C1.s4472c1f2");
    test_class_info(&lv, &cd_S4472C1);
    dp->~S4472C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4472C1(Test_S4472C1, "S4472C1", ABISELECT(176,116));

#else // __cplusplus

extern void _ZN7S4472C1C1Ev();
extern void _ZN7S4472C1D1Ev();
Name_Map name_map_S4472C1[] = {
  NSPAIR(_ZN7S4472C1C1Ev),
  NSPAIR(_ZN7S4472C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4472C3;
extern VTBL_ENTRY _ZTI7S4472C3[];
extern  VTBL_ENTRY _ZTV7S4472C3[];
extern Class_Descriptor cd_S4472C6;
extern VTBL_ENTRY _ZTI7S4472C6[];
extern  VTBL_ENTRY _ZTV7S4472C6[];
extern Class_Descriptor cd_S4472C2;
extern VTBL_ENTRY _ZTI7S4472C2[];
extern  VTBL_ENTRY _ZTV7S4472C2[];
static Base_Class bases_S4472C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4472C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4472C6,    ABISELECT(72,52), //bcp->offset
    10, //bcp->virtual_function_table_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_S4472C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4472C1[];
extern void _ZN7S4472C1D1Ev();
extern void _ZN7S4472C1D0Ev();
extern void _ZN7S4472C32v2Ev();
extern void _ZN7S4472C32v3Ev();
extern void _ZN7S4472C32v4Ev();
extern void _ZN7S4472C22v6Ev();
extern void _ZN7S4472C22v7Ev();
extern void _ZN7S4472C12v1Ev();
extern void ABISELECT(_ZThn72_N7S4472C1D1Ev,_ZThn52_N7S4472C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4472C1D0Ev,_ZThn52_N7S4472C1D0Ev)();
extern void _ZN7S4472C62v5Ev();
static  VTBL_ENTRY vtc_S4472C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4472C1[0]),
  (VTBL_ENTRY)&_ZN7S4472C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4472C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4472C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4472C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4472C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4472C12v1Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4472C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4472C1D1Ev,_ZThn52_N7S4472C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4472C1D0Ev,_ZThn52_N7S4472C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4472C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4472C1[];
extern  VTBL_ENTRY _ZTV7S4472C1[];
Class_Descriptor cd_S4472C1 = {  "S4472C1", // class name
  bases_S4472C1, 3,
  &(vtc_S4472C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,116), // object size
  NSPAIRA(_ZTI7S4472C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4472C1),15, //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  S908C5  {
  ::S4473C12_nt s908c5f0;
  int s908c5f1[2];
  char s908c5f2;
  virtual  ~S908C5(); // _ZN6S908C5D1Ev
  virtual void  v4(); // _ZN6S908C52v4Ev
  virtual void  v5(); // _ZN6S908C52v5Ev
  virtual void  v6(); // _ZN6S908C52v6Ev
  S908C5(); // tgen
};
//SIG(-1 S908C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S908C5 ::~S908C5(){ note_dtor("S908C5", this);}
void  S908C5 ::v4(){vfunc_called(this, "_ZN6S908C52v4Ev");}
void  S908C5 ::v5(){vfunc_called(this, "_ZN6S908C52v5Ev");}
void  S908C5 ::v6(){vfunc_called(this, "_ZN6S908C52v6Ev");}
S908C5 ::S908C5(){ note_ctor("S908C5", this);} // tgen

static void Test_S908C5()
{
  extern Class_Descriptor cd_S908C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S908C5, buf);
    S908C5 *dp, &lv = *(dp=new (buf) S908C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S908C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S908C5)");
    check_field_offset(lv, s908c5f0, ABISELECT(8,4), "S908C5.s908c5f0");
    check_field_offset(lv, s908c5f1, ABISELECT(24,16), "S908C5.s908c5f1");
    check_field_offset(lv, s908c5f2, ABISELECT(32,24), "S908C5.s908c5f2");
    test_class_info(&lv, &cd_S908C5);
    dp->~S908C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS908C5(Test_S908C5, "S908C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S908C5C1Ev();
extern void _ZN6S908C5D1Ev();
Name_Map name_map_S908C5[] = {
  NSPAIR(_ZN6S908C5C1Ev),
  NSPAIR(_ZN6S908C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S908C5[];
extern void _ZN6S908C5D1Ev();
extern void _ZN6S908C5D0Ev();
extern void _ZN6S908C52v4Ev();
extern void _ZN6S908C52v5Ev();
extern void _ZN6S908C52v6Ev();
static  VTBL_ENTRY vtc_S908C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S908C5[0]),
  (VTBL_ENTRY)&_ZN6S908C5D1Ev,
  (VTBL_ENTRY)&_ZN6S908C5D0Ev,
  (VTBL_ENTRY)&_ZN6S908C52v4Ev,
  (VTBL_ENTRY)&_ZN6S908C52v5Ev,
  (VTBL_ENTRY)&_ZN6S908C52v6Ev,
};
extern VTBL_ENTRY _ZTI6S908C5[];
extern  VTBL_ENTRY _ZTV6S908C5[];
Class_Descriptor cd_S908C5 = {  "S908C5", // class name
  0,0,//no base classes
  &(vtc_S908C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S908C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S908C5),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  S908C4  : S908C5 {
  void *s908c4f0;
  virtual void  v7(); // _ZN6S908C42v7Ev
  virtual void  v8(); // _ZN6S908C42v8Ev
  ~S908C4(); // tgen
  S908C4(); // tgen
};
//SIG(-1 S908C4) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S908C4 ::v7(){vfunc_called(this, "_ZN6S908C42v7Ev");}
void  S908C4 ::v8(){vfunc_called(this, "_ZN6S908C42v8Ev");}
S908C4 ::~S908C4(){ note_dtor("S908C4", this);} // tgen
S908C4 ::S908C4(){ note_ctor("S908C4", this);} // tgen

static void Test_S908C4()
{
  extern Class_Descriptor cd_S908C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S908C4, buf);
    S908C4 *dp, &lv = *(dp=new (buf) S908C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S908C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S908C4)");
    check_base_class_offset(lv, (S908C5*), 0, "S908C4");
    check_field_offset(lv, s908c4f0, ABISELECT(40,28), "S908C4.s908c4f0");
    test_class_info(&lv, &cd_S908C4);
    dp->~S908C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS908C4(Test_S908C4, "S908C4", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S908C4C1Ev();
extern void _ZN6S908C4D1Ev();
Name_Map name_map_S908C4[] = {
  NSPAIR(_ZN6S908C4C1Ev),
  NSPAIR(_ZN6S908C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S908C5;
extern VTBL_ENTRY _ZTI6S908C5[];
extern  VTBL_ENTRY _ZTV6S908C5[];
static Base_Class bases_S908C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S908C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI6S908C4[];
extern void _ZN6S908C4D1Ev();
extern void _ZN6S908C4D0Ev();
extern void _ZN6S908C52v4Ev();
extern void _ZN6S908C52v5Ev();
extern void _ZN6S908C52v6Ev();
extern void _ZN6S908C42v7Ev();
extern void _ZN6S908C42v8Ev();
static  VTBL_ENTRY vtc_S908C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S908C4[0]),
  (VTBL_ENTRY)&_ZN6S908C4D1Ev,
  (VTBL_ENTRY)&_ZN6S908C4D0Ev,
  (VTBL_ENTRY)&_ZN6S908C52v4Ev,
  (VTBL_ENTRY)&_ZN6S908C52v5Ev,
  (VTBL_ENTRY)&_ZN6S908C52v6Ev,
  (VTBL_ENTRY)&_ZN6S908C42v7Ev,
  (VTBL_ENTRY)&_ZN6S908C42v8Ev,
};
extern VTBL_ENTRY _ZTI6S908C4[];
extern  VTBL_ENTRY _ZTV6S908C4[];
Class_Descriptor cd_S908C4 = {  "S908C4", // class name
  bases_S908C4, 1,
  &(vtc_S908C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S908C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S908C4),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  S908C3  : S908C4 {
  void *s908c3f0;
  char s908c3f1;
  ::S2366C14_nt s908c3f2;
  virtual  ~S908C3(); // _ZN6S908C3D1Ev
  virtual void  v9(); // _ZN6S908C32v9Ev
  S908C3(); // tgen
};
//SIG(-1 S908C3) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S908C3 ::~S908C3(){ note_dtor("S908C3", this);}
void  S908C3 ::v9(){vfunc_called(this, "_ZN6S908C32v9Ev");}
S908C3 ::S908C3(){ note_ctor("S908C3", this);} // tgen

static void Test_S908C3()
{
  extern Class_Descriptor cd_S908C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S908C3, buf);
    S908C3 *dp, &lv = *(dp=new (buf) S908C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S908C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S908C3)");
    check_base_class_offset(lv, (S908C5*)(S908C4*), 0, "S908C3");
    check_base_class_offset(lv, (S908C4*), 0, "S908C3");
    check_field_offset(lv, s908c3f0, ABISELECT(48,32), "S908C3.s908c3f0");
    check_field_offset(lv, s908c3f1, ABISELECT(56,36), "S908C3.s908c3f1");
    check_field_offset(lv, s908c3f2, ABISELECT(60,40), "S908C3.s908c3f2");
    test_class_info(&lv, &cd_S908C3);
    dp->~S908C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS908C3(Test_S908C3, "S908C3", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S908C3C1Ev();
extern void _ZN6S908C3D1Ev();
Name_Map name_map_S908C3[] = {
  NSPAIR(_ZN6S908C3C1Ev),
  NSPAIR(_ZN6S908C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S908C5;
extern VTBL_ENTRY _ZTI6S908C5[];
extern  VTBL_ENTRY _ZTV6S908C5[];
extern Class_Descriptor cd_S908C4;
extern VTBL_ENTRY _ZTI6S908C4[];
extern  VTBL_ENTRY _ZTV6S908C4[];
static Base_Class bases_S908C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S908C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S908C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S908C3[];
extern void _ZN6S908C3D1Ev();
extern void _ZN6S908C3D0Ev();
extern void _ZN6S908C52v4Ev();
extern void _ZN6S908C52v5Ev();
extern void _ZN6S908C52v6Ev();
extern void _ZN6S908C42v7Ev();
extern void _ZN6S908C42v8Ev();
extern void _ZN6S908C32v9Ev();
static  VTBL_ENTRY vtc_S908C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S908C3[0]),
  (VTBL_ENTRY)&_ZN6S908C3D1Ev,
  (VTBL_ENTRY)&_ZN6S908C3D0Ev,
  (VTBL_ENTRY)&_ZN6S908C52v4Ev,
  (VTBL_ENTRY)&_ZN6S908C52v5Ev,
  (VTBL_ENTRY)&_ZN6S908C52v6Ev,
  (VTBL_ENTRY)&_ZN6S908C42v7Ev,
  (VTBL_ENTRY)&_ZN6S908C42v8Ev,
  (VTBL_ENTRY)&_ZN6S908C32v9Ev,
};
extern VTBL_ENTRY _ZTI6S908C3[];
extern  VTBL_ENTRY _ZTV6S908C3[];
Class_Descriptor cd_S908C3 = {  "S908C3", // class name
  bases_S908C3, 2,
  &(vtc_S908C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S908C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S908C3),10, //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  S908C2  : S908C3 {
  void *s908c2f0[3];
  int s908c2f1;
  ::S130C11_nt s908c2f2;
  virtual  ~S908C2(); // _ZN6S908C2D1Ev
  virtual void  v10(); // _ZN6S908C23v10Ev
  virtual void  v11(); // _ZN6S908C23v11Ev
  virtual void  v12(); // _ZN6S908C23v12Ev
  virtual void  v13(); // _ZN6S908C23v13Ev
  virtual void  v14(); // _ZN6S908C23v14Ev
  virtual void  v15(); // _ZN6S908C23v15Ev
  virtual void  v16(); // _ZN6S908C23v16Ev
  S908C2(); // tgen
};
//SIG(-1 S908C2) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v11 v12 Fp} vd v13 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 v4 v5 v6 v7 Fp[3] Fi FC8{ m Fp[2]}}


 S908C2 ::~S908C2(){ note_dtor("S908C2", this);}
void  S908C2 ::v10(){vfunc_called(this, "_ZN6S908C23v10Ev");}
void  S908C2 ::v11(){vfunc_called(this, "_ZN6S908C23v11Ev");}
void  S908C2 ::v12(){vfunc_called(this, "_ZN6S908C23v12Ev");}
void  S908C2 ::v13(){vfunc_called(this, "_ZN6S908C23v13Ev");}
void  S908C2 ::v14(){vfunc_called(this, "_ZN6S908C23v14Ev");}
void  S908C2 ::v15(){vfunc_called(this, "_ZN6S908C23v15Ev");}
void  S908C2 ::v16(){vfunc_called(this, "_ZN6S908C23v16Ev");}
S908C2 ::S908C2(){ note_ctor("S908C2", this);} // tgen

static void Test_S908C2()
{
  extern Class_Descriptor cd_S908C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S908C2, buf);
    S908C2 *dp, &lv = *(dp=new (buf) S908C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S908C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S908C2)");
    check_base_class_offset(lv, (S908C5*)(S908C4*)(S908C3*), 0, "S908C2");
    check_base_class_offset(lv, (S908C4*)(S908C3*), 0, "S908C2");
    check_base_class_offset(lv, (S908C3*), 0, "S908C2");
    check_field_offset(lv, s908c2f0, ABISELECT(72,48), "S908C2.s908c2f0");
    check_field_offset(lv, s908c2f1, ABISELECT(96,60), "S908C2.s908c2f1");
    check_field_offset(lv, s908c2f2, ABISELECT(104,64), "S908C2.s908c2f2");
    test_class_info(&lv, &cd_S908C2);
    dp->~S908C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS908C2(Test_S908C2, "S908C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN6S908C2C1Ev();
extern void _ZN6S908C2D1Ev();
Name_Map name_map_S908C2[] = {
  NSPAIR(_ZN6S908C2C1Ev),
  NSPAIR(_ZN6S908C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S908C5;
extern VTBL_ENTRY _ZTI6S908C5[];
extern  VTBL_ENTRY _ZTV6S908C5[];
extern Class_Descriptor cd_S908C4;
extern VTBL_ENTRY _ZTI6S908C4[];
extern  VTBL_ENTRY _ZTV6S908C4[];
extern Class_Descriptor cd_S908C3;
extern VTBL_ENTRY _ZTI6S908C3[];
extern  VTBL_ENTRY _ZTV6S908C3[];
static Base_Class bases_S908C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S908C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S908C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S908C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S908C2[];
extern void _ZN6S908C2D1Ev();
extern void _ZN6S908C2D0Ev();
extern void _ZN6S908C52v4Ev();
extern void _ZN6S908C52v5Ev();
extern void _ZN6S908C52v6Ev();
extern void _ZN6S908C42v7Ev();
extern void _ZN6S908C42v8Ev();
extern void _ZN6S908C32v9Ev();
extern void _ZN6S908C23v10Ev();
extern void _ZN6S908C23v11Ev();
extern void _ZN6S908C23v12Ev();
extern void _ZN6S908C23v13Ev();
extern void _ZN6S908C23v14Ev();
extern void _ZN6S908C23v15Ev();
extern void _ZN6S908C23v16Ev();
static  VTBL_ENTRY vtc_S908C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S908C2[0]),
  (VTBL_ENTRY)&_ZN6S908C2D1Ev,
  (VTBL_ENTRY)&_ZN6S908C2D0Ev,
  (VTBL_ENTRY)&_ZN6S908C52v4Ev,
  (VTBL_ENTRY)&_ZN6S908C52v5Ev,
  (VTBL_ENTRY)&_ZN6S908C52v6Ev,
  (VTBL_ENTRY)&_ZN6S908C42v7Ev,
  (VTBL_ENTRY)&_ZN6S908C42v8Ev,
  (VTBL_ENTRY)&_ZN6S908C32v9Ev,
  (VTBL_ENTRY)&_ZN6S908C23v10Ev,
  (VTBL_ENTRY)&_ZN6S908C23v11Ev,
  (VTBL_ENTRY)&_ZN6S908C23v12Ev,
  (VTBL_ENTRY)&_ZN6S908C23v13Ev,
  (VTBL_ENTRY)&_ZN6S908C23v14Ev,
  (VTBL_ENTRY)&_ZN6S908C23v15Ev,
  (VTBL_ENTRY)&_ZN6S908C23v16Ev,
};
extern VTBL_ENTRY _ZTI6S908C2[];
extern  VTBL_ENTRY _ZTV6S908C2[];
Class_Descriptor cd_S908C2 = {  "S908C2", // class name
  bases_S908C2, 3,
  &(vtc_S908C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI6S908C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S908C2),17, //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  S908C10  {
  ::S4473C12_nt s908c10f0;
  int s908c10f1;
  ::S4473C12_nt s908c10f2;
  __tsi64 s908c10f3;
  void  mf908c10(); // _ZN7S908C108mf908c10Ev
};
//SIG(-1 S908C10) C1{ m FC2{ m Fp Fi FC3{ m}} Fi FC2 FL}


void  S908C10 ::mf908c10(){}

static void Test_S908C10()
{
  {
    init_simple_test("S908C10");
    S908C10 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S908C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S908C10)");
    check_field_offset(lv, s908c10f0, 0, "S908C10.s908c10f0");
    check_field_offset(lv, s908c10f1, ABISELECT(16,12), "S908C10.s908c10f1");
    check_field_offset(lv, s908c10f2, ABISELECT(24,16), "S908C10.s908c10f2");
    check_field_offset(lv, s908c10f3, ABISELECT(40,28), "S908C10.s908c10f3");
  }
}
static Arrange_To_Call_Me vS908C10(Test_S908C10, "S908C10", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S908C1  : S908C2 {
  void *s908c1f0[2];
  ::S908C10 s908c1f1;
  virtual  ~S908C1(); // _ZN6S908C1D1Ev
  virtual void  v1(); // _ZN6S908C12v1Ev
  virtual void  v2(); // _ZN6S908C12v2Ev
  virtual void  v3(); // _ZN6S908C12v3Ev
  S908C1(); // tgen
};
//SIG(1 S908C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v4 v5 v6 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v7 v8 Fp} vd v9 Fp Fc FC8{ m Fi[2]}} vd v10 v11 v12 v13 v14 v15 v16 Fp[3] Fi FC9{ m Fp[2]}} vd v1 v2 v3 Fp[2] FC10{ m FC6 Fi FC6 FL}}


 S908C1 ::~S908C1(){ note_dtor("S908C1", this);}
void  S908C1 ::v1(){vfunc_called(this, "_ZN6S908C12v1Ev");}
void  S908C1 ::v2(){vfunc_called(this, "_ZN6S908C12v2Ev");}
void  S908C1 ::v3(){vfunc_called(this, "_ZN6S908C12v3Ev");}
S908C1 ::S908C1(){ note_ctor("S908C1", this);} // tgen

static void Test_S908C1()
{
  extern Class_Descriptor cd_S908C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,30)];
    init_test(&cd_S908C1, buf);
    S908C1 *dp, &lv = *(dp=new (buf) S908C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,116), "sizeof(S908C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S908C1)");
    check_base_class_offset(lv, (S908C5*)(S908C4*)(S908C3*)(S908C2*), 0, "S908C1");
    check_base_class_offset(lv, (S908C4*)(S908C3*)(S908C2*), 0, "S908C1");
    check_base_class_offset(lv, (S908C3*)(S908C2*), 0, "S908C1");
    check_base_class_offset(lv, (S908C2*), 0, "S908C1");
    check_field_offset(lv, s908c1f0, ABISELECT(120,72), "S908C1.s908c1f0");
    check_field_offset(lv, s908c1f1, ABISELECT(136,80), "S908C1.s908c1f1");
    test_class_info(&lv, &cd_S908C1);
    dp->~S908C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS908C1(Test_S908C1, "S908C1", ABISELECT(184,116));

#else // __cplusplus

extern void _ZN6S908C1C1Ev();
extern void _ZN6S908C1D1Ev();
Name_Map name_map_S908C1[] = {
  NSPAIR(_ZN6S908C1C1Ev),
  NSPAIR(_ZN6S908C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S908C5;
extern VTBL_ENTRY _ZTI6S908C5[];
extern  VTBL_ENTRY _ZTV6S908C5[];
extern Class_Descriptor cd_S908C4;
extern VTBL_ENTRY _ZTI6S908C4[];
extern  VTBL_ENTRY _ZTV6S908C4[];
extern Class_Descriptor cd_S908C3;
extern VTBL_ENTRY _ZTI6S908C3[];
extern  VTBL_ENTRY _ZTV6S908C3[];
extern Class_Descriptor cd_S908C2;
extern VTBL_ENTRY _ZTI6S908C2[];
extern  VTBL_ENTRY _ZTV6S908C2[];
static Base_Class bases_S908C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S908C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S908C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S908C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S908C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S908C1[];
extern void _ZN6S908C1D1Ev();
extern void _ZN6S908C1D0Ev();
extern void _ZN6S908C52v4Ev();
extern void _ZN6S908C52v5Ev();
extern void _ZN6S908C52v6Ev();
extern void _ZN6S908C42v7Ev();
extern void _ZN6S908C42v8Ev();
extern void _ZN6S908C32v9Ev();
extern void _ZN6S908C23v10Ev();
extern void _ZN6S908C23v11Ev();
extern void _ZN6S908C23v12Ev();
extern void _ZN6S908C23v13Ev();
extern void _ZN6S908C23v14Ev();
extern void _ZN6S908C23v15Ev();
extern void _ZN6S908C23v16Ev();
extern void _ZN6S908C12v1Ev();
extern void _ZN6S908C12v2Ev();
extern void _ZN6S908C12v3Ev();
static  VTBL_ENTRY vtc_S908C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S908C1[0]),
  (VTBL_ENTRY)&_ZN6S908C1D1Ev,
  (VTBL_ENTRY)&_ZN6S908C1D0Ev,
  (VTBL_ENTRY)&_ZN6S908C52v4Ev,
  (VTBL_ENTRY)&_ZN6S908C52v5Ev,
  (VTBL_ENTRY)&_ZN6S908C52v6Ev,
  (VTBL_ENTRY)&_ZN6S908C42v7Ev,
  (VTBL_ENTRY)&_ZN6S908C42v8Ev,
  (VTBL_ENTRY)&_ZN6S908C32v9Ev,
  (VTBL_ENTRY)&_ZN6S908C23v10Ev,
  (VTBL_ENTRY)&_ZN6S908C23v11Ev,
  (VTBL_ENTRY)&_ZN6S908C23v12Ev,
  (VTBL_ENTRY)&_ZN6S908C23v13Ev,
  (VTBL_ENTRY)&_ZN6S908C23v14Ev,
  (VTBL_ENTRY)&_ZN6S908C23v15Ev,
  (VTBL_ENTRY)&_ZN6S908C23v16Ev,
  (VTBL_ENTRY)&_ZN6S908C12v1Ev,
  (VTBL_ENTRY)&_ZN6S908C12v2Ev,
  (VTBL_ENTRY)&_ZN6S908C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S908C1[];
extern  VTBL_ENTRY _ZTV6S908C1[];
Class_Descriptor cd_S908C1 = {  "S908C1", // class name
  bases_S908C1, 4,
  &(vtc_S908C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,116), // object size
  NSPAIRA(_ZTI6S908C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S908C1),20, //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  S2811C2  : S19572C5 {
};
//SIG(-1 S2811C2) C1{ BC2{ m Fs:13}}



static void Test_S2811C2()
{
  extern Class_Descriptor cd_S2811C2;
  void *lvp;
  {
    short buf[2];
    init_test(&cd_S2811C2, buf);
    S2811C2 &lv = *(new (buf) S2811C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 2, "sizeof(S2811C2)");
    check2(__alignof__(lv), 2, "__alignof__(S2811C2)");
    check_base_class_offset(lv, (S19572C5*), 0, "S2811C2");
    test_class_info(&lv, &cd_S2811C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C2(Test_S2811C2, "S2811C2", 2);

#else // __cplusplus

extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S2811C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2811C2[];
Class_Descriptor cd_S2811C2 = {  "S2811C2", // class name
  bases_S2811C2, 1,
  0, // no vftv
  0, //no vtt
  2, // object size
  NSPAIRA(_ZTI7S2811C2),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  S2811C6  : virtual S19572C5 {
  ~S2811C6(); // tgen
  S2811C6(); // tgen
};
//SIG(-1 S2811C6) C1{ VBC2{ m Fs:13}}


S2811C6 ::~S2811C6(){ note_dtor("S2811C6", this);} // tgen
S2811C6 ::S2811C6(){ note_ctor("S2811C6", this);} // tgen

static void Test_S2811C6()
{
  extern Class_Descriptor cd_S2811C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2811C6, buf);
    S2811C6 *dp, &lv = *(dp=new (buf) S2811C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2811C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2811C6)");
    check_base_class_offset(lv, (S19572C5*), ABISELECT(8,4), "S2811C6");
    test_class_info(&lv, &cd_S2811C6);
    dp->~S2811C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C6(Test_S2811C6, "S2811C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2811C6C1Ev();
extern void _ZN7S2811C6D1Ev();
Name_Map name_map_S2811C6[] = {
  NSPAIR(_ZN7S2811C6C1Ev),
  NSPAIR(_ZN7S2811C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
static Base_Class bases_S2811C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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 _ZTI7S2811C6[];
static  VTBL_ENTRY vtc_S2811C6[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
extern VTBL_ENTRY _ZTV7S2811C6[];
static  VTT_ENTRY vtt_S2811C6[] = {
  {&(_ZTV7S2811C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
Class_Descriptor cd_S2811C6 = {  "S2811C6", // class name
  bases_S2811C6, 1,
  &(vtc_S2811C6[0]), // expected_vtbl_contents
  &(vtt_S2811C6[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2811C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2811C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2811C6),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  S2811C5  : virtual S2811C6 {
  ~S2811C5(); // tgen
  S2811C5(); // tgen
};
//SIG(-1 S2811C5) C1{ VBC2{ VBC3{ m Fs:13}}}


S2811C5 ::~S2811C5(){ note_dtor("S2811C5", this);} // tgen
S2811C5 ::S2811C5(){ note_ctor("S2811C5", this);} // tgen

static void Test_S2811C5()
{
  extern Class_Descriptor cd_S2811C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2811C5, buf);
    S2811C5 *dp, &lv = *(dp=new (buf) S2811C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2811C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2811C5)");
    check_base_class_offset(lv, (S19572C5*)(S2811C6*), ABISELECT(8,4), "S2811C5");
    check_base_class_offset(lv, (S2811C6*), 0, "S2811C5");
    test_class_info(&lv, &cd_S2811C5);
    dp->~S2811C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C5(Test_S2811C5, "S2811C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2811C5C1Ev();
extern void _ZN7S2811C5D1Ev();
Name_Map name_map_S2811C5[] = {
  NSPAIR(_ZN7S2811C5C1Ev),
  NSPAIR(_ZN7S2811C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
static Base_Class bases_S2811C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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, 1},
  {&cd_S2811C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2811C5[];
static  VTBL_ENTRY vtc_S2811C5[] = {
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C5[0]),
};
extern VTBL_ENTRY _ZTV7S2811C5[];
static  VTBL_ENTRY _tg__ZTV7S2811C6__7S2811C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTT_ENTRY vtt_S2811C5[] = {
  {&(_ZTV7S2811C5[4]),  4,4},
  {&(_ZTV7S2811C5[4]),  4,4},
  {&(_tg__ZTV7S2811C6__7S2811C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2811C5[];
extern  VTBL_ENTRY _ZTV7S2811C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C5[];
Class_Descriptor cd_S2811C5 = {  "S2811C5", // class name
  bases_S2811C5, 2,
  &(vtc_S2811C5[0]), // expected_vtbl_contents
  &(vtt_S2811C5[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2811C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2811C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2811C5),3, //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  S2811C8  : virtual S2811C2 {
  ~S2811C8(); // tgen
  S2811C8(); // tgen
};
//SIG(-1 S2811C8) C1{ VBC2{ BC3{ m Fs:13}}}


S2811C8 ::~S2811C8(){ note_dtor("S2811C8", this);} // tgen
S2811C8 ::S2811C8(){ note_ctor("S2811C8", this);} // tgen

static void Test_S2811C8()
{
  extern Class_Descriptor cd_S2811C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2811C8, buf);
    S2811C8 *dp, &lv = *(dp=new (buf) S2811C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2811C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2811C8)");
    check_base_class_offset(lv, (S19572C5*)(S2811C2*), ABISELECT(8,4), "S2811C8");
    check_base_class_offset(lv, (S2811C2*), ABISELECT(8,4), "S2811C8");
    test_class_info(&lv, &cd_S2811C8);
    dp->~S2811C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C8(Test_S2811C8, "S2811C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S2811C8C1Ev();
extern void _ZN7S2811C8D1Ev();
Name_Map name_map_S2811C8[] = {
  NSPAIR(_ZN7S2811C8C1Ev),
  NSPAIR(_ZN7S2811C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
static Base_Class bases_S2811C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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_S2811C2,    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 _ZTI7S2811C8[];
static  VTBL_ENTRY vtc_S2811C8[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C8[0]),
};
extern VTBL_ENTRY _ZTV7S2811C8[];
static  VTT_ENTRY vtt_S2811C8[] = {
  {&(_ZTV7S2811C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2811C8[];
extern  VTBL_ENTRY _ZTV7S2811C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C8[];
Class_Descriptor cd_S2811C8 = {  "S2811C8", // class name
  bases_S2811C8, 2,
  &(vtc_S2811C8[0]), // expected_vtbl_contents
  &(vtt_S2811C8[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S2811C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2811C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2811C8),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  S2811C10  : S2811C6 , S2811C2 {
  virtual  ~S2811C10(); // _ZN8S2811C10D2Ev
  S2811C10(); // tgen
};
//SIG(-1 S2811C10) C1{ BC2{ VBC3{ m Fs:13}} BC4{ BC3} vd}


 S2811C10 ::~S2811C10(){ note_dtor("S2811C10", this);}
S2811C10 ::S2811C10(){ note_ctor("S2811C10", this);} // tgen

static void Test_S2811C10()
{
  extern Class_Descriptor cd_S2811C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2811C10, buf);
    S2811C10 *dp, &lv = *(dp=new (buf) S2811C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2811C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2811C10)");
    check_base_class_offset(lv, (S19572C5*)(S2811C6*), ABISELECT(10,6), "S2811C10");
    check_base_class_offset(lv, (S2811C6*), 0, "S2811C10");
    check_base_class_offset(lv, (S19572C5*)(S2811C2*), ABISELECT(8,4), "S2811C10");
    check_base_class_offset(lv, (S2811C2*), ABISELECT(8,4), "S2811C10");
    test_class_info(&lv, &cd_S2811C10);
    dp->~S2811C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C10(Test_S2811C10, "S2811C10", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S2811C10C1Ev();
extern void _ZN8S2811C10D2Ev();
Name_Map name_map_S2811C10[] = {
  NSPAIR(_ZN8S2811C10C1Ev),
  NSPAIR(_ZN8S2811C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
static Base_Class bases_S2811C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(10,6), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2811C6,    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},
  {&cd_S19572C5,    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_S2811C2,    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 _ZTI8S2811C10[];
extern void _ZN8S2811C10D1Ev();
extern void _ZN8S2811C10D0Ev();
static  VTBL_ENTRY vtc_S2811C10[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI8S2811C10[0]),
  (VTBL_ENTRY)&_ZN8S2811C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2811C10D0Ev,
};
extern VTBL_ENTRY _ZTV8S2811C10[];
static  VTBL_ENTRY _tg__ZTV7S2811C6__8S2811C10[] = {
  ABISELECT(10,6),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTT_ENTRY vtt_S2811C10[] = {
  {&(_ZTV8S2811C10[3]),  3,5},
  {&(_tg__ZTV7S2811C6__8S2811C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2811C10[];
extern  VTBL_ENTRY _ZTV8S2811C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2811C10[];
Class_Descriptor cd_S2811C10 = {  "S2811C10", // class name
  bases_S2811C10, 4,
  &(vtc_S2811C10[0]), // expected_vtbl_contents
  &(vtt_S2811C10[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S2811C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2811C10),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2811C10),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  S2811C9  : virtual S19572C5 , virtual S2811C2 , S2811C8 , S2811C10 , S2811C6 {
  long double s2811c9f0[5];
  virtual  ~S2811C9(); // _ZN7S2811C9D2Ev
  S2811C9(); // tgen
};
//SIG(-1 S2811C9) C1{ VBC2{ m Fs:13} VBC3{ BC2} BC4{ VBC3} BC5{ BC6{ VBC2} BC3 vd} BC6 vd FD[5]}


 S2811C9 ::~S2811C9(){ note_dtor("S2811C9", this);}
S2811C9 ::S2811C9(){ note_ctor("S2811C9", this);} // tgen

static void Test_S2811C9()
{
  extern Class_Descriptor cd_S2811C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,21)];
    init_test(&cd_S2811C9, buf);
    S2811C9 *dp, &lv = *(dp=new (buf) S2811C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S2811C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2811C9)");
    /*is_ambiguous_... S2811C9::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(112,76), "S2811C9");
    check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C10*), ABISELECT(112,76), "S2811C9");
    /*is_ambiguous_... S2811C9::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*), ABISELECT(112,76), "S2811C9");
    /*is_ambiguous_... S2811C9::S2811C2 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C2*), ABISELECT(114,78), "S2811C9");
    /*is_ambiguous_... S2811C9::S2811C2 */ AMB_check_base_class_offset(lv, (S2811C2*), ABISELECT(114,78), "S2811C9");
    check_base_class_offset(lv, (S2811C2*)(S2811C8*), ABISELECT(114,78), "S2811C9");
    check_base_class_offset(lv, (S2811C8*), 0, "S2811C9");
    check_base_class_offset(lv, (S2811C6*)(S2811C10*), ABISELECT(8,4), "S2811C9");
    check_base_class_offset(lv, (S19572C5*)(S2811C2*)(S2811C10*), ABISELECT(16,8), "S2811C9");
    check_base_class_offset(lv, (S2811C2*)(S2811C10*), ABISELECT(16,8), "S2811C9");
    check_base_class_offset(lv, (S2811C10*), ABISELECT(8,4), "S2811C9");
    /*is_ambiguous_... S2811C9::S2811C6 */ AMB_check_base_class_offset(lv, (S2811C6*), ABISELECT(24,12), "S2811C9");
    check_field_offset(lv, s2811c9f0, ABISELECT(32,16), "S2811C9.s2811c9f0");
    test_class_info(&lv, &cd_S2811C9);
    dp->~S2811C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C9(Test_S2811C9, "S2811C9", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN7S2811C9C1Ev();
extern void _ZN7S2811C9D2Ev();
Name_Map name_map_S2811C9[] = {
  NSPAIR(_ZN7S2811C9C1Ev),
  NSPAIR(_ZN7S2811C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S2811C8;
extern VTBL_ENTRY _ZTI7S2811C8[];
extern  VTBL_ENTRY _ZTV7S2811C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C8[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S2811C10;
extern VTBL_ENTRY _ZTI8S2811C10[];
extern  VTBL_ENTRY _ZTV8S2811C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2811C10[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
static Base_Class bases_S2811C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    ABISELECT(112,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19572C5,    ABISELECT(114,78), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2811C2,    ABISELECT(114,78), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2811C8,    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},
  {&cd_S2811C6,    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
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    6, //immediately_derived
  0, 0},
  {&cd_S2811C2,    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
    7, //immediately_derived
  0, 0},
  {&cd_S2811C10,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2811C6,    ABISELECT(24,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2811C9[];
extern void _ZN7S2811C9D1Ev();
extern void _ZN7S2811C9D0Ev();
extern void ABISELECT(_ZThn8_N7S2811C9D1Ev,_ZThn4_N7S2811C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S2811C9D0Ev,_ZThn4_N7S2811C9D0Ev)();
static  VTBL_ENTRY vtc_S2811C9[] = {
  ABISELECT(112,76),
  ABISELECT(114,78),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
  (VTBL_ENTRY)&_ZN7S2811C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C9D0Ev,
  ABISELECT(104,72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2811C9D1Ev,_ZThn4_N7S2811C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2811C9D0Ev,_ZThn4_N7S2811C9D0Ev),
  ABISELECT(88,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
};
extern VTBL_ENTRY _ZTV7S2811C9[];
static  VTBL_ENTRY _tg__ZTV7S2811C8__7S2811C9[] = {
  ABISELECT(114,78),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C8[0]),
};
extern void _ZN8S2811C10D1Ev();
extern void _ZN8S2811C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2811C10__7S2811C9[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S2811C10[0]),
  (VTBL_ENTRY)&_ZN8S2811C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2811C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C68S2811C10__7S2811C9[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C6__A1__7S2811C9[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTT_ENTRY vtt_S2811C9[] = {
  {&(_ZTV7S2811C9[4]),  4,14},
  {&(_tg__ZTV7S2811C8__7S2811C9[3]),  3,3},
  {&(_tg__ZTV8S2811C10__7S2811C9[3]),  3,5},
  {&(_tg__ZTV7S2811C68S2811C10__7S2811C9[3]),  3,3},
  {&(_tg__ZTV7S2811C6__A1__7S2811C9[3]),  3,3},
  {&(_ZTV7S2811C9[9]),  9,14},
  {&(_ZTV7S2811C9[14]),  14,14},
};
extern VTBL_ENTRY _ZTI7S2811C9[];
extern  VTBL_ENTRY _ZTV7S2811C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C9[];
Class_Descriptor cd_S2811C9 = {  "S2811C9", // class name
  bases_S2811C9, 9,
  &(vtc_S2811C9[0]), // expected_vtbl_contents
  &(vtt_S2811C9[0]), // expected_vtt_contents
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI7S2811C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2811C9),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2811C9),7, //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  S2811C7  : virtual S2811C2 , virtual S2811C8 , virtual S2811C9 , S2811C6 {
  ::S19572C19 s2811c7f0;
  virtual void  v1(); // _ZN7S2811C72v1Ev
  ~S2811C7(); // tgen
  S2811C7(); // tgen
};
//SIG(-1 S2811C7) C1{ VBC2{ BC3{ m Fs:13}} VBC4{ VBC2} VBC5{ VBC3 VBC2 BC4 BC6{ BC7{ VBC3} BC2 vd} BC7 vd FD[5]} BC7 v1 FC8{ VBC9{ VBC3} VBC10{ VBC3} BC3 VBC11{ BC3} vd Fi}}


void  S2811C7 ::v1(){vfunc_called(this, "_ZN7S2811C72v1Ev");}
S2811C7 ::~S2811C7(){ note_dtor("S2811C7", this);} // tgen
S2811C7 ::S2811C7(){ note_ctor("S2811C7", this);} // tgen

static void Test_S2811C7()
{
  extern Class_Descriptor cd_S2811C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,30)];
    init_test(&cd_S2811C7, buf);
    S2811C7 *dp, &lv = *(dp=new (buf) S2811C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,116), "sizeof(S2811C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2811C7)");
    /*is_ambiguous_... S2811C7::S2811C2 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C2*), ABISELECT(48,28), "S2811C7");
    /*is_ambiguous_... S2811C7::S2811C2 */ AMB_check_base_class_offset(lv, (S2811C2*), ABISELECT(48,28), "S2811C7");
    /*is_ambiguous_... S2811C7::S2811C8 */ AMB_check_base_class_offset(lv, (S2811C2*)(S2811C8*), ABISELECT(48,28), "S2811C7");
    /*is_ambiguous_... S2811C9::S2811C2 */ AMB_check_base_class_offset(lv, (S2811C2*)(S2811C9*), ABISELECT(48,28), "S2811C7");
    check_base_class_offset(lv, (S2811C2*)(S2811C8*)(S2811C9*), ABISELECT(48,28), "S2811C7");
    /*is_ambiguous_... S2811C7::S2811C8 */ AMB_check_base_class_offset(lv, (S2811C8*), ABISELECT(56,32), "S2811C7");
    /*is_ambiguous_... S2811C9::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C9*), ABISELECT(176,112), "S2811C7");
    check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C10*)(S2811C9*), ABISELECT(176,112), "S2811C7");
    /*is_ambiguous_... S2811C9::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C9*), ABISELECT(176,112), "S2811C7");
    /*is_ambiguous_... S2811C7::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*), ABISELECT(176,112), "S2811C7");
    check_base_class_offset(lv, (S2811C8*)(S2811C9*), ABISELECT(64,36), "S2811C7");
    check_base_class_offset(lv, (S2811C6*)(S2811C10*)(S2811C9*), ABISELECT(72,40), "S2811C7");
    check_base_class_offset(lv, (S19572C5*)(S2811C2*)(S2811C10*)(S2811C9*), ABISELECT(80,44), "S2811C7");
    check_base_class_offset(lv, (S2811C2*)(S2811C10*)(S2811C9*), ABISELECT(80,44), "S2811C7");
    check_base_class_offset(lv, (S2811C10*)(S2811C9*), ABISELECT(72,40), "S2811C7");
    /*is_ambiguous_... S2811C9::S2811C6 */ AMB_check_base_class_offset(lv, (S2811C6*)(S2811C9*), ABISELECT(88,48), "S2811C7");
    check_base_class_offset(lv, (S2811C9*), ABISELECT(64,36), "S2811C7");
    /*is_ambiguous_... S2811C7::S2811C6 */ AMB_check_base_class_offset(lv, (S2811C6*), 0, "S2811C7");
    check_field_offset(lv, s2811c7f0, ABISELECT(8,4), "S2811C7.s2811c7f0");
    test_class_info(&lv, &cd_S2811C7);
    dp->~S2811C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C7(Test_S2811C7, "S2811C7", ABISELECT(192,116));

#else // __cplusplus

extern void _ZN7S2811C7C1Ev();
extern void _ZN7S2811C7D1Ev();
Name_Map name_map_S2811C7[] = {
  NSPAIR(_ZN7S2811C7C1Ev),
  NSPAIR(_ZN7S2811C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S2811C8;
extern VTBL_ENTRY _ZTI7S2811C8[];
extern  VTBL_ENTRY _ZTV7S2811C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C8[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C8;
extern VTBL_ENTRY _ZTI7S2811C8[];
extern  VTBL_ENTRY _ZTV7S2811C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C8[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S2811C10;
extern VTBL_ENTRY _ZTI8S2811C10[];
extern  VTBL_ENTRY _ZTV8S2811C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2811C10[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S2811C9;
extern VTBL_ENTRY _ZTI7S2811C9[];
extern  VTBL_ENTRY _ZTV7S2811C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C9[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
static Base_Class bases_S2811C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    1, //immediately_derived
  0, 0},
  {&cd_S2811C2,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S2811C8,    ABISELECT(56,32), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    ABISELECT(176,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
    5, //immediately_derived
  0, 1},
  {&cd_S2811C8,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2811C6,    ABISELECT(72,40), //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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    7, //immediately_derived
  0, 0},
  {&cd_S2811C2,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2811C10,    ABISELECT(72,40), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2811C6,    ABISELECT(88,48), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2811C9,    ABISELECT(64,36), //bcp->offset
    12, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2811C6,    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 _ZTI7S2811C7[];
extern void _ZN7S2811C72v1Ev();
extern void _ZN7S2811C7D1Ev();
extern void _ZN7S2811C7D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev)();
extern void ABISELECT(_ZThn64_N7S2811C7D1Ev,_ZThn36_N7S2811C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev)();
extern void ABISELECT(_ZThn64_N7S2811C7D0Ev,_ZThn36_N7S2811C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S2811C7D1Ev,_ZTvn4_n20_N7S2811C7D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S2811C7D0Ev,_ZTvn4_n20_N7S2811C7D0Ev)();
static  VTBL_ENTRY vtc_S2811C7[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&_ZN7S2811C72v1Ev,
  (VTBL_ENTRY)&_ZN7S2811C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C7D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  ABISELECT(-64,-36),
  ABISELECT(112,76),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev),
  ABISELECT(104,72),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C7D1Ev,_ZTvn4_n20_N7S2811C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C7D0Ev,_ZTvn4_n20_N7S2811C7D0Ev),
  ABISELECT(88,64),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
};
extern VTBL_ENTRY _ZTV7S2811C7[];
static  VTBL_ENTRY _tg__ZTV7S2811C6__A2__7S2811C7[] = {
  ABISELECT(176,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C8__7S2811C7[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C8[0]),
};
extern void _ZN7S2811C9D1Ev();
extern void _ZN7S2811C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2811C9__7S2811C7[] = {
  ABISELECT(112,76),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
  (VTBL_ENTRY)&_ZN7S2811C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C87S2811C9__A1__7S2811C7[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C8[0]),
};
extern void _ZN8S2811C10D1Ev();
extern void _ZN8S2811C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2811C107S2811C9__7S2811C7[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S2811C10[0]),
  (VTBL_ENTRY)&_ZN8S2811C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2811C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C68S2811C107S2811C9__7S2811C7[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C67S2811C9__A1__7S2811C7[] = {
  ABISELECT(88,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
extern void ABISELECT(_ZThn8_N7S2811C9D1Ev,_ZThn4_N7S2811C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S2811C9D0Ev,_ZThn4_N7S2811C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2811C10__7S2811C9__7S2811C7[] = {
  ABISELECT(104,72),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2811C9D1Ev,_ZThn4_N7S2811C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2811C9D0Ev,_ZThn4_N7S2811C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2811C6__A1__7S2811C9__7S2811C7[] = {
  ABISELECT(88,64),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
};
static  VTT_ENTRY vtt_S2811C7[] = {
  {&(_ZTV7S2811C7[6]),  6,27},
  {&(_tg__ZTV7S2811C6__A2__7S2811C7[3]),  3,3},
  {&(_ZTV7S2811C7[12]),  12,27},
  {&(_ZTV7S2811C7[17]),  17,27},
  {&(_ZTV7S2811C7[22]),  22,27},
  {&(_ZTV7S2811C7[27]),  27,27},
  {&(_tg__ZTV7S2811C8__7S2811C7[3]),  3,3},
  {&(_tg__ZTV7S2811C9__7S2811C7[4]),  4,6},
  {&(_tg__ZTV7S2811C87S2811C9__A1__7S2811C7[3]),  3,3},
  {&(_tg__ZTV8S2811C107S2811C9__7S2811C7[3]),  3,5},
  {&(_tg__ZTV7S2811C68S2811C107S2811C9__7S2811C7[3]),  3,3},
  {&(_tg__ZTV7S2811C67S2811C9__A1__7S2811C7[3]),  3,3},
  {&(_tg__ZTV8S2811C10__7S2811C9__7S2811C7[3]),  3,5},
  {&(_tg__ZTV7S2811C6__A1__7S2811C9__7S2811C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2811C7[];
extern  VTBL_ENTRY _ZTV7S2811C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C7[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2811C7D0Ev,_ZThn36_N7S2811C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2811C7D1Ev,_ZThn36_N7S2811C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2811C7 = {  "S2811C7", // class name
  bases_S2811C7, 12,
  &(vtc_S2811C7[0]), // expected_vtbl_contents
  &(vtt_S2811C7[0]), // expected_vtt_contents
  ABISELECT(192,116), // object size
  NSPAIRA(_ZTI7S2811C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2811C7),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2811C7),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2811C4  : virtual S19572C5 , virtual S2811C5 , virtual S2811C7 {
  int s2811c4f0;
  virtual  ~S2811C4(); // _ZN7S2811C4D2Ev
  S2811C4(); // tgen
};
//SIG(-1 S2811C4) C1{ VBC2{ m Fs:13} VBC3{ VBC4{ VBC2}} VBC5{ VBC6{ BC2} VBC7{ VBC6} VBC8{ VBC2 VBC6 BC7 BC9{ BC4 BC6 vd} BC4 vd FD[5]} BC4 v1 FC10{ VBC11{ VBC2} VBC12{ VBC2} BC2 VBC13{ BC2} vd Fi}} vd Fi}


 S2811C4 ::~S2811C4(){ note_dtor("S2811C4", this);}
S2811C4 ::S2811C4(){ note_ctor("S2811C4", this);} // tgen

static void Test_S2811C4()
{
  extern Class_Descriptor cd_S2811C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,32)];
    init_test(&cd_S2811C4, buf);
    S2811C4 *dp, &lv = *(dp=new (buf) S2811C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,124), "sizeof(S2811C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2811C4)");
    /*is_ambiguous_... S2811C4::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*), ABISELECT(12,8), "S2811C4");
    /*is_ambiguous_... S2811C4::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*), ABISELECT(12,8), "S2811C4");
    /*is_ambiguous_... S2811C9::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C9*), ABISELECT(12,8), "S2811C4");
    check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C10*)(S2811C9*), ABISELECT(12,8), "S2811C4");
    /*is_ambiguous_... S2811C9::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C9*), ABISELECT(12,8), "S2811C4");
    /*is_ambiguous_... S2811C7::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C7*), ABISELECT(12,8), "S2811C4");
    check_base_class_offset(lv, (S2811C6*)(S2811C5*), 0, "S2811C4");
    check_base_class_offset(lv, (S2811C5*), 0, "S2811C4");
    /*is_ambiguous_... S2811C4::S2811C2 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C2*), ABISELECT(64,40), "S2811C4");
    /*is_ambiguous_... S2811C7::S2811C2 */ AMB_check_base_class_offset(lv, (S2811C2*)(S2811C7*), ABISELECT(64,40), "S2811C4");
    /*is_ambiguous_... S2811C4::S2811C8 */ AMB_check_base_class_offset(lv, (S2811C2*)(S2811C8*), ABISELECT(64,40), "S2811C4");
    /*is_ambiguous_... S2811C9::S2811C2 */ AMB_check_base_class_offset(lv, (S2811C2*)(S2811C9*), ABISELECT(64,40), "S2811C4");
    check_base_class_offset(lv, (S2811C2*)(S2811C8*)(S2811C9*), ABISELECT(64,40), "S2811C4");
    /*is_ambiguous_... S2811C7::S2811C8 */ AMB_check_base_class_offset(lv, (S2811C8*)(S2811C7*), ABISELECT(72,44), "S2811C4");
    check_base_class_offset(lv, (S2811C8*)(S2811C9*), ABISELECT(80,48), "S2811C4");
    check_base_class_offset(lv, (S2811C6*)(S2811C10*)(S2811C9*), ABISELECT(88,52), "S2811C4");
    check_base_class_offset(lv, (S19572C5*)(S2811C2*)(S2811C10*)(S2811C9*), ABISELECT(96,56), "S2811C4");
    check_base_class_offset(lv, (S2811C2*)(S2811C10*)(S2811C9*), ABISELECT(96,56), "S2811C4");
    check_base_class_offset(lv, (S2811C10*)(S2811C9*), ABISELECT(88,52), "S2811C4");
    /*is_ambiguous_... S2811C9::S2811C6 */ AMB_check_base_class_offset(lv, (S2811C6*)(S2811C9*), ABISELECT(104,60), "S2811C4");
    check_base_class_offset(lv, (S2811C9*)(S2811C7*), ABISELECT(80,48), "S2811C4");
    /*is_ambiguous_... S2811C7::S2811C6 */ AMB_check_base_class_offset(lv, (S2811C6*)(S2811C7*), ABISELECT(16,12), "S2811C4");
    check_base_class_offset(lv, (S2811C7*), ABISELECT(16,12), "S2811C4");
    check_field_offset(lv, s2811c4f0, ABISELECT(8,4), "S2811C4.s2811c4f0");
    test_class_info(&lv, &cd_S2811C4);
    dp->~S2811C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C4(Test_S2811C4, "S2811C4", ABISELECT(192,124));

#else // __cplusplus

extern void _ZN7S2811C4C1Ev();
extern void _ZN7S2811C4D2Ev();
Name_Map name_map_S2811C4[] = {
  NSPAIR(_ZN7S2811C4C1Ev),
  NSPAIR(_ZN7S2811C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S2811C5;
extern VTBL_ENTRY _ZTI7S2811C5[];
extern  VTBL_ENTRY _ZTV7S2811C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S2811C8;
extern VTBL_ENTRY _ZTI7S2811C8[];
extern  VTBL_ENTRY _ZTV7S2811C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C8[];
extern Class_Descriptor cd_S2811C8;
extern VTBL_ENTRY _ZTI7S2811C8[];
extern  VTBL_ENTRY _ZTV7S2811C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C8[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S2811C10;
extern VTBL_ENTRY _ZTI8S2811C10[];
extern  VTBL_ENTRY _ZTV8S2811C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2811C10[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S2811C9;
extern VTBL_ENTRY _ZTI7S2811C9[];
extern  VTBL_ENTRY _ZTV7S2811C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C9[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S2811C7;
extern VTBL_ENTRY _ZTI7S2811C7[];
extern  VTBL_ENTRY _ZTV7S2811C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C7[];
static Base_Class bases_S2811C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S2811C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S2811C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19572C5,    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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S2811C2,    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
    -1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2811C8,    ABISELECT(72,44), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2811C8,    ABISELECT(80,48), //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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2811C6,    ABISELECT(88,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19572C5,    ABISELECT(96,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_S2811C2,    ABISELECT(96,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
    10, //immediately_derived
  0, 0},
  {&cd_S2811C10,    ABISELECT(88,52), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2811C6,    ABISELECT(104,60), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2811C9,    ABISELECT(80,48), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2811C6,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2811C7,    ABISELECT(16,12), //bcp->offset
    11, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2811C4[];
extern void _ZN7S2811C4D1Ev();
extern void _ZN7S2811C4D0Ev();
extern void _ZN7S2811C72v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S2811C4D1Ev,_ZTv0_n32_N7S2811C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S2811C4D1Ev,_ZThn12_N7S2811C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S2811C4D0Ev,_ZTv0_n32_N7S2811C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S2811C4D0Ev,_ZThn12_N7S2811C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2811C4D1Ev,_ZTv0_n20_N7S2811C4D1Ev)();
extern void ABISELECT(_ZThn80_N7S2811C4D1Ev,_ZThn48_N7S2811C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2811C4D0Ev,_ZTv0_n20_N7S2811C4D0Ev)();
extern void ABISELECT(_ZThn80_N7S2811C4D0Ev,_ZThn48_N7S2811C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S2811C4D1Ev,_ZTvn4_n20_N7S2811C4D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S2811C4D0Ev,_ZTvn4_n20_N7S2811C4D0Ev)();
static  VTBL_ENTRY vtc_S2811C4[] = {
  ABISELECT(80,48),
  ABISELECT(72,44),
  ABISELECT(64,40),
  ABISELECT(16,12),
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  (VTBL_ENTRY)&_ZN7S2811C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C4D0Ev,
  ABISELECT(-16,-12),
  0,
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  -4,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  (VTBL_ENTRY)&_ZN7S2811C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2811C4D1Ev,_ZTv0_n32_N7S2811C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2811C4D0Ev,_ZTv0_n32_N7S2811C4D0Ev),
  ABISELECT(-8,-4),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  ABISELECT(-80,-48),
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C4D1Ev,_ZTv0_n20_N7S2811C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C4D0Ev,_ZTv0_n20_N7S2811C4D0Ev),
  ABISELECT(-76,-44),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C4D1Ev,_ZTvn4_n20_N7S2811C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C4D0Ev,_ZTvn4_n20_N7S2811C4D0Ev),
  ABISELECT(-92,-52),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
};
extern VTBL_ENTRY _ZTV7S2811C4[];
static  VTBL_ENTRY _tg__ZTV7S2811C5__7S2811C4[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C6__7S2811C4[] = {
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
extern void _ZN7S2811C72v1Ev();
extern void _ZN7S2811C7D1Ev();
extern void _ZN7S2811C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2811C7__7S2811C4[] = {
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(48,28),
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&_ZN7S2811C72v1Ev,
  (VTBL_ENTRY)&_ZN7S2811C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C67S2811C7__A3__7S2811C4[] = {
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C8__7S2811C7__7S2811C4[] = {
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev)();
extern void ABISELECT(_ZThn64_N7S2811C7D1Ev,_ZThn36_N7S2811C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev)();
extern void ABISELECT(_ZThn64_N7S2811C7D0Ev,_ZThn36_N7S2811C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2811C9__7S2811C7__7S2811C4[] = {
  ABISELECT(-64,-36),
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S2811C7D1Ev,_ZTvn4_n20_N7S2811C7D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S2811C7D0Ev,_ZTvn4_n20_N7S2811C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2811C107S2811C9__7S2811C7__7S2811C4[] = {
  ABISELECT(-76,-44),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C7D1Ev,_ZTvn4_n20_N7S2811C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C7D0Ev,_ZTvn4_n20_N7S2811C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2811C67S2811C9__A1__7S2811C7__7S2811C4[] = {
  ABISELECT(-92,-52),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C8__7S2811C4[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C8[0]),
};
extern void _ZN7S2811C9D1Ev();
extern void _ZN7S2811C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2811C9__7S2811C4[] = {
  ABISELECT(-68,-40),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
  (VTBL_ENTRY)&_ZN7S2811C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C87S2811C9__A1__7S2811C4[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C8[0]),
};
extern void _ZN8S2811C10D1Ev();
extern void _ZN8S2811C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2811C107S2811C9__7S2811C4[] = {
  ABISELECT(-76,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S2811C10[0]),
  (VTBL_ENTRY)&_ZN8S2811C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2811C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C68S2811C107S2811C9__A1__7S2811C4[] = {
  ABISELECT(-76,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C67S2811C9__A2__7S2811C4[] = {
  ABISELECT(-92,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
extern void ABISELECT(_ZThn8_N7S2811C9D1Ev,_ZThn4_N7S2811C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S2811C9D0Ev,_ZThn4_N7S2811C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2811C10__7S2811C9__7S2811C4[] = {
  ABISELECT(-76,-44),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2811C9D1Ev,_ZThn4_N7S2811C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2811C9D0Ev,_ZThn4_N7S2811C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2811C6__A1__7S2811C9__7S2811C4[] = {
  ABISELECT(-92,-52),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
};
static  VTT_ENTRY vtt_S2811C4[] = {
  {&(_ZTV7S2811C4[9]),  9,40},
  {&(_ZTV7S2811C4[9]),  9,40},
  {&(_ZTV7S2811C4[9]),  9,40},
  {&(_ZTV7S2811C4[19]),  19,40},
  {&(_ZTV7S2811C4[25]),  25,40},
  {&(_ZTV7S2811C4[30]),  30,40},
  {&(_ZTV7S2811C4[35]),  35,40},
  {&(_ZTV7S2811C4[40]),  40,40},
  {&(_tg__ZTV7S2811C5__7S2811C4[4]),  4,4},
  {&(_tg__ZTV7S2811C5__7S2811C4[4]),  4,4},
  {&(_tg__ZTV7S2811C6__7S2811C4[3]),  3,3},
  {&(_tg__ZTV7S2811C7__7S2811C4[6]),  6,9},
  {&(_tg__ZTV7S2811C67S2811C7__A3__7S2811C4[3]),  3,3},
  {&(_tg__ZTV7S2811C8__7S2811C7__7S2811C4[3]),  3,3},
  {&(_tg__ZTV7S2811C9__7S2811C7__7S2811C4[5]),  5,7},
  {&(_tg__ZTV8S2811C107S2811C9__7S2811C7__7S2811C4[3]),  3,5},
  {&(_tg__ZTV7S2811C67S2811C9__A1__7S2811C7__7S2811C4[3]),  3,3},
  {&(_tg__ZTV7S2811C8__7S2811C4[3]),  3,3},
  {&(_tg__ZTV7S2811C9__7S2811C4[4]),  4,6},
  {&(_tg__ZTV7S2811C87S2811C9__A1__7S2811C4[3]),  3,3},
  {&(_tg__ZTV8S2811C107S2811C9__7S2811C4[3]),  3,5},
  {&(_tg__ZTV7S2811C68S2811C107S2811C9__A1__7S2811C4[3]),  3,3},
  {&(_tg__ZTV7S2811C67S2811C9__A2__7S2811C4[3]),  3,3},
  {&(_tg__ZTV8S2811C10__7S2811C9__7S2811C4[3]),  3,5},
  {&(_tg__ZTV7S2811C6__A1__7S2811C9__7S2811C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2811C4[];
extern  VTBL_ENTRY _ZTV7S2811C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C4[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2811C7D0Ev,_ZThn36_N7S2811C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2811C7D1Ev,_ZThn36_N7S2811C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C4D0Ev,_ZTv0_n20_N7S2811C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2811C4D0Ev,_ZThn48_N7S2811C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C4D1Ev,_ZTv0_n20_N7S2811C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2811C4D1Ev,_ZThn48_N7S2811C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2811C4D0Ev,_ZTv0_n32_N7S2811C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2811C4D0Ev,_ZThn12_N7S2811C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2811C4D1Ev,_ZTv0_n32_N7S2811C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2811C4D1Ev,_ZThn12_N7S2811C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2811C4 = {  "S2811C4", // class name
  bases_S2811C4, 15,
  &(vtc_S2811C4[0]), // expected_vtbl_contents
  &(vtt_S2811C4[0]), // expected_vtt_contents
  ABISELECT(192,124), // object size
  NSPAIRA(_ZTI7S2811C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2811C4),40, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2811C4),25, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2811C15_nt  {
  void  mf2811c15(); // _ZN11S2811C15_nt9mf2811c15Ev
};
//SIG(-1 S2811C15_nt) C1{ m}


void  S2811C15_nt ::mf2811c15(){}

//skip512 S2811C15_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S2811C15_nt[];
VTBL_ENTRY *P__ZTI11S2811C15_nt = _ZTI11S2811C15_nt; 
Class_Descriptor cd_S2811C15_nt = {  "S2811C15_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S2811C15_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  S2811C1  : S2811C2 , virtual S2811C4 , S629C14 , S629C8_nt , S2811C15_nt {
  ~S2811C1(); // tgen
  S2811C1(); // tgen
};
//SIG(1 S2811C1) C1{ BC2{ BC3{ m Fs:13}} VBC4{ VBC3 VBC5{ VBC6{ VBC3}} VBC7{ VBC2 VBC8{ VBC2} VBC9{ VBC3 VBC2 BC8 BC10{ BC6 BC2 vd} BC6 vd FD[5]} BC6 v1 FC11{ VBC12{ VBC3} VBC13{ VBC3} BC3 VBC14{ BC3} vd Fi}} vd Fi} BC15{ m} BC16{ m} BC17{ m}}


S2811C1 ::~S2811C1(){ note_dtor("S2811C1", this);} // tgen
S2811C1 ::S2811C1(){ note_ctor("S2811C1", this);} // tgen

static void Test_S2811C1()
{
  extern Class_Descriptor cd_S2811C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,33)];
    init_test(&cd_S2811C1, buf);
    S2811C1 *dp, &lv = *(dp=new (buf) S2811C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,128), "sizeof(S2811C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2811C1)");
    /*is_ambiguous_... S2811C1::S2811C2 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C2*), ABISELECT(8,4), "S2811C1");
    /*is_ambiguous_... S2811C1::S2811C2 */ AMB_check_base_class_offset(lv, (S2811C2*), ABISELECT(8,4), "S2811C1");
    /*is_ambiguous_... S2811C4::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C4*), ABISELECT(28,16), "S2811C1");
    /*is_ambiguous_... S2811C1::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*), ABISELECT(28,16), "S2811C1");
    /*is_ambiguous_... S2811C9::S19572C5 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C9*), ABISELECT(28,16), "S2811C1");
    check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C10*)(S2811C9*), ABISELECT(28,16), "S2811C1");
    /*is_ambiguous_... S2811C9::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C9*), ABISELECT(28,16), "S2811C1");
    /*is_ambiguous_... S2811C7::S2811C6 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C6*)(S2811C7*), ABISELECT(28,16), "S2811C1");
    check_base_class_offset(lv, (S2811C6*)(S2811C5*), ABISELECT(16,8), "S2811C1");
    check_base_class_offset(lv, (S2811C5*)(S2811C4*), ABISELECT(16,8), "S2811C1");
    /*is_ambiguous_... S2811C1::S2811C2 */ AMB_check_base_class_offset(lv, (S19572C5*)(S2811C2*), ABISELECT(80,48), "S2811C1");
    /*is_ambiguous_... S2811C7::S2811C2 */ AMB_check_base_class_offset(lv, (S2811C2*)(S2811C7*), ABISELECT(80,48), "S2811C1");
    /*is_ambiguous_... S2811C1::S2811C8 */ AMB_check_base_class_offset(lv, (S2811C2*)(S2811C8*), ABISELECT(80,48), "S2811C1");
    /*is_ambiguous_... S2811C9::S2811C2 */ AMB_check_base_class_offset(lv, (S2811C2*)(S2811C9*), ABISELECT(80,48), "S2811C1");
    check_base_class_offset(lv, (S2811C2*)(S2811C8*)(S2811C9*), ABISELECT(80,48), "S2811C1");
    /*is_ambiguous_... S2811C7::S2811C8 */ AMB_check_base_class_offset(lv, (S2811C8*)(S2811C7*), 0, "S2811C1");
    check_base_class_offset(lv, (S2811C8*)(S2811C9*), ABISELECT(96,52), "S2811C1");
    check_base_class_offset(lv, (S2811C6*)(S2811C10*)(S2811C9*), ABISELECT(104,56), "S2811C1");
    check_base_class_offset(lv, (S19572C5*)(S2811C2*)(S2811C10*)(S2811C9*), ABISELECT(112,60), "S2811C1");
    check_base_class_offset(lv, (S2811C2*)(S2811C10*)(S2811C9*), ABISELECT(112,60), "S2811C1");
    check_base_class_offset(lv, (S2811C10*)(S2811C9*), ABISELECT(104,56), "S2811C1");
    /*is_ambiguous_... S2811C9::S2811C6 */ AMB_check_base_class_offset(lv, (S2811C6*)(S2811C9*), ABISELECT(120,64), "S2811C1");
    check_base_class_offset(lv, (S2811C9*)(S2811C7*), ABISELECT(96,52), "S2811C1");
    /*is_ambiguous_... S2811C7::S2811C6 */ AMB_check_base_class_offset(lv, (S2811C6*)(S2811C7*), ABISELECT(32,20), "S2811C1");
    check_base_class_offset(lv, (S2811C7*)(S2811C4*), ABISELECT(32,20), "S2811C1");
    check_base_class_offset(lv, (S2811C4*), ABISELECT(16,8), "S2811C1");
    check_base_class_offset(lv, (S629C14*), 0, "S2811C1");
    check_base_class_offset(lv, (S629C8_nt*), 0, "S2811C1");
    check_base_class_offset(lv, (S2811C15_nt*), 0, "S2811C1");
    test_class_info(&lv, &cd_S2811C1);
    dp->~S2811C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2811C1(Test_S2811C1, "S2811C1", ABISELECT(208,128));

#else // __cplusplus

extern void _ZN7S2811C1C1Ev();
extern void _ZN7S2811C1D1Ev();
Name_Map name_map_S2811C1[] = {
  NSPAIR(_ZN7S2811C1C1Ev),
  NSPAIR(_ZN7S2811C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S2811C5;
extern VTBL_ENTRY _ZTI7S2811C5[];
extern  VTBL_ENTRY _ZTV7S2811C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C5[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S2811C8;
extern VTBL_ENTRY _ZTI7S2811C8[];
extern  VTBL_ENTRY _ZTV7S2811C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C8[];
extern Class_Descriptor cd_S2811C8;
extern VTBL_ENTRY _ZTI7S2811C8[];
extern  VTBL_ENTRY _ZTV7S2811C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C8[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S19572C5;
extern VTBL_ENTRY _ZTI8S19572C5[];
extern Class_Descriptor cd_S2811C2;
extern VTBL_ENTRY _ZTI7S2811C2[];
extern Class_Descriptor cd_S2811C10;
extern VTBL_ENTRY _ZTI8S2811C10[];
extern  VTBL_ENTRY _ZTV8S2811C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2811C10[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S2811C9;
extern VTBL_ENTRY _ZTI7S2811C9[];
extern  VTBL_ENTRY _ZTV7S2811C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C9[];
extern Class_Descriptor cd_S2811C6;
extern VTBL_ENTRY _ZTI7S2811C6[];
extern  VTBL_ENTRY _ZTV7S2811C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C6[];
extern Class_Descriptor cd_S2811C7;
extern VTBL_ENTRY _ZTI7S2811C7[];
extern  VTBL_ENTRY _ZTV7S2811C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C7[];
extern Class_Descriptor cd_S2811C4;
extern VTBL_ENTRY _ZTI7S2811C4[];
extern  VTBL_ENTRY _ZTV7S2811C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C4[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
extern Class_Descriptor cd_S629C8_nt;
extern VTBL_ENTRY _ZTI9S629C8_nt[];
extern Class_Descriptor cd_S2811C15_nt;
extern VTBL_ENTRY _ZTI11S2811C15_nt[];
static Base_Class bases_S2811C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19572C5,    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_S2811C2,    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_S19572C5,    ABISELECT(28,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, 1},
  {&cd_S2811C6,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2811C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19572C5,    ABISELECT(80,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
    6, //immediately_derived
  0, 0},
  {&cd_S2811C2,    ABISELECT(80,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
    7, //immediately_derived
  0, 1},
  {&cd_S2811C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2811C8,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2811C6,    ABISELECT(104,56), //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
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S19572C5,    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
    11, //immediately_derived
  0, 0},
  {&cd_S2811C2,    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
    12, //immediately_derived
  0, 0},
  {&cd_S2811C10,    ABISELECT(104,56), //bcp->offset
    42, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2811C6,    ABISELECT(120,64), //bcp->offset
    47, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2811C9,    ABISELECT(96,52), //bcp->offset
    35, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2811C6,    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
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2811C7,    ABISELECT(32,20), //bcp->offset
    24, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S2811C4,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S629C8_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_S2811C15_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 _ZTI7S2811C1[];
extern void _ZN7S2811C1D1Ev();
extern void _ZN7S2811C1D0Ev();
extern void ABISELECT(_ZTv0_n80_N7S2811C1D1Ev,_ZTv0_n40_N7S2811C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S2811C1D1Ev,_ZThn8_N7S2811C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S2811C1D0Ev,_ZTv0_n40_N7S2811C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S2811C1D0Ev,_ZThn8_N7S2811C1D0Ev)() __attribute__((weak));
extern void _ZN7S2811C72v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S2811C1D1Ev,_ZTv0_n32_N7S2811C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S2811C1D1Ev,_ZThn20_N7S2811C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S2811C1D0Ev,_ZTv0_n32_N7S2811C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S2811C1D0Ev,_ZThn20_N7S2811C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2811C1D1Ev,_ZTv0_n20_N7S2811C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S2811C1D1Ev,_ZThn52_N7S2811C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2811C1D0Ev,_ZTv0_n20_N7S2811C1D0Ev)();
extern void ABISELECT(_ZThn96_N7S2811C1D0Ev,_ZThn52_N7S2811C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n40_N7S2811C1D1Ev,_ZTvn4_n20_N7S2811C1D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S2811C1D0Ev,_ZTvn4_n20_N7S2811C1D0Ev)();
static  VTBL_ENTRY vtc_S2811C1[] = {
  ABISELECT(96,52),
  0,
  ABISELECT(32,20),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(28,16),
  ABISELECT(16,8),
  ABISELECT(80,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C1[0]),
  (VTBL_ENTRY)&_ZN7S2811C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(80,44),
  ABISELECT(-16,-8),
  ABISELECT(64,40),
  ABISELECT(16,12),
  0,
  0,
  ABISELECT(12,8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2811C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S2811C1D1Ev,_ZTv0_n40_N7S2811C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S2811C1D0Ev,_ZTv0_n40_N7S2811C1D0Ev),
  ABISELECT(-32,-20),
  0,
  ABISELECT(64,32),
  ABISELECT(-32,-20),
  ABISELECT(48,28),
  -4,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S2811C1[0]),
  (VTBL_ENTRY)&_ZN7S2811C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2811C1D1Ev,_ZTv0_n32_N7S2811C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2811C1D0Ev,_ZTv0_n32_N7S2811C1D0Ev),
  ABISELECT(-96,-52),
  ABISELECT(-68,-36),
  ABISELECT(-16,-4),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S2811C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C1D1Ev,_ZTv0_n20_N7S2811C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C1D0Ev,_ZTv0_n20_N7S2811C1D0Ev),
  ABISELECT(-76,-40),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S2811C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C1D1Ev,_ZTvn4_n20_N7S2811C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C1D0Ev,_ZTvn4_n20_N7S2811C1D0Ev),
  ABISELECT(-92,-48),
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S2811C1[0]),
};
extern VTBL_ENTRY _ZTV7S2811C1[];
extern void _ZN7S2811C4D1Ev();
extern void _ZN7S2811C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2811C4__7S2811C1[] = {
  ABISELECT(80,44),
  ABISELECT(-16,-8),
  ABISELECT(64,40),
  ABISELECT(16,12),
  0,
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  (VTBL_ENTRY)&_ZN7S2811C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C4D0Ev,
};
extern void _ZN7S2811C72v1Ev();
extern void ABISELECT(_ZTv0_n64_N7S2811C4D1Ev,_ZTv0_n32_N7S2811C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S2811C4D1Ev,_ZThn12_N7S2811C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S2811C4D0Ev,_ZTv0_n32_N7S2811C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S2811C4D0Ev,_ZThn12_N7S2811C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2811C7__7S2811C4__7S2811C1[] = {
  ABISELECT(-16,-12),
  0,
  ABISELECT(64,32),
  ABISELECT(-32,-20),
  ABISELECT(48,28),
  -4,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  (VTBL_ENTRY)&_ZN7S2811C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2811C4D1Ev,_ZTv0_n32_N7S2811C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2811C4D0Ev,_ZTv0_n32_N7S2811C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2811C8__7S2811C4__7S2811C1[] = {
  ABISELECT(80,48),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S2811C4D1Ev,_ZTv0_n20_N7S2811C4D1Ev)();
extern void ABISELECT(_ZThn80_N7S2811C4D1Ev,_ZThn44_N7S2811C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2811C4D0Ev,_ZTv0_n20_N7S2811C4D0Ev)();
extern void ABISELECT(_ZThn80_N7S2811C4D0Ev,_ZThn44_N7S2811C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2811C9__7S2811C4__7S2811C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(-68,-36),
  ABISELECT(-16,-4),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C4D1Ev,_ZTv0_n20_N7S2811C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C4D0Ev,_ZTv0_n20_N7S2811C4D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S2811C4D1Ev,_ZTvn4_n20_N7S2811C4D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S2811C4D0Ev,_ZTvn4_n20_N7S2811C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2811C107S2811C9__7S2811C4__7S2811C1[] = {
  ABISELECT(-76,-40),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C4D1Ev,_ZTvn4_n20_N7S2811C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C4D0Ev,_ZTvn4_n20_N7S2811C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2811C67S2811C9__A2__7S2811C4__7S2811C1[] = {
  ABISELECT(-92,-48),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S2811C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C5__7S2811C1[] = {
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C6__7S2811C1[] = {
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
extern void _ZN7S2811C72v1Ev();
extern void _ZN7S2811C7D1Ev();
extern void _ZN7S2811C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2811C7__7S2811C1[] = {
  ABISELECT(64,32),
  ABISELECT(-32,-20),
  ABISELECT(48,28),
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&_ZN7S2811C72v1Ev,
  (VTBL_ENTRY)&_ZN7S2811C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C67S2811C7__A3__7S2811C1[] = {
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C8__7S2811C7__7S2811C1[] = {
  ABISELECT(80,48),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev)();
extern void ABISELECT(_ZThn64_N7S2811C7D1Ev,_ZThn32_N7S2811C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev)();
extern void ABISELECT(_ZThn64_N7S2811C7D0Ev,_ZThn32_N7S2811C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2811C9__7S2811C7__7S2811C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-68,-36),
  ABISELECT(-16,-4),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev),
};
extern void ABISELECT(_ZTvn8_n40_N7S2811C7D1Ev,_ZTvn4_n20_N7S2811C7D1Ev)();
extern void ABISELECT(_ZTvn8_n40_N7S2811C7D0Ev,_ZTvn4_n20_N7S2811C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2811C107S2811C9__7S2811C7__7S2811C1[] = {
  ABISELECT(-76,-40),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C7D1Ev,_ZTvn4_n20_N7S2811C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n40_N7S2811C7D0Ev,_ZTvn4_n20_N7S2811C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2811C67S2811C9__A1__7S2811C7__7S2811C1[] = {
  ABISELECT(-92,-48),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI7S2811C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C8__7S2811C1[] = {
  ABISELECT(80,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C8[0]),
};
extern void _ZN7S2811C9D1Ev();
extern void _ZN7S2811C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2811C9__7S2811C1[] = {
  ABISELECT(-68,-36),
  ABISELECT(-16,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
  (VTBL_ENTRY)&_ZN7S2811C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2811C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C87S2811C9__A1__7S2811C1[] = {
  ABISELECT(-16,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C8[0]),
};
extern void _ZN8S2811C10D1Ev();
extern void _ZN8S2811C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2811C107S2811C9__7S2811C1[] = {
  ABISELECT(-76,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S2811C10[0]),
  (VTBL_ENTRY)&_ZN8S2811C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2811C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2811C68S2811C107S2811C9__A1__7S2811C1[] = {
  ABISELECT(-76,-40),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2811C67S2811C9__A2__7S2811C1[] = {
  ABISELECT(-92,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2811C6[0]),
};
extern void ABISELECT(_ZThn8_N7S2811C9D1Ev,_ZThn4_N7S2811C9D1Ev)();
extern void ABISELECT(_ZThn8_N7S2811C9D0Ev,_ZThn4_N7S2811C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2811C10__7S2811C9__7S2811C1[] = {
  ABISELECT(-76,-40),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2811C9D1Ev,_ZThn4_N7S2811C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S2811C9D0Ev,_ZThn4_N7S2811C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2811C6__A1__7S2811C9__7S2811C1[] = {
  ABISELECT(-92,-48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2811C9[0]),
};
static  VTT_ENTRY vtt_S2811C1[] = {
  {&(_ZTV7S2811C1[10]),  10,50},
  {&(_ZTV7S2811C1[22]),  22,50},
  {&(_ZTV7S2811C1[22]),  22,50},
  {&(_ZTV7S2811C1[22]),  22,50},
  {&(_ZTV7S2811C1[32]),  32,50},
  {&(_ZTV7S2811C1[10]),  10,50},
  {&(_ZTV7S2811C1[40]),  40,50},
  {&(_ZTV7S2811C1[45]),  45,50},
  {&(_ZTV7S2811C1[50]),  50,50},
  {&(_tg__ZTV7S2811C4__7S2811C1[9]),  9,11},
  {&(_tg__ZTV7S2811C4__7S2811C1[9]),  9,11},
  {&(_tg__ZTV7S2811C4__7S2811C1[9]),  9,11},
  {&(_tg__ZTV7S2811C7__7S2811C4__7S2811C1[8]),  8,11},
  {&(_tg__ZTV7S2811C8__7S2811C4__7S2811C1[3]),  3,3},
  {&(_tg__ZTV7S2811C9__7S2811C4__7S2811C1[5]),  5,7},
  {&(_tg__ZTV8S2811C107S2811C9__7S2811C4__7S2811C1[3]),  3,5},
  {&(_tg__ZTV7S2811C67S2811C9__A2__7S2811C4__7S2811C1[3]),  3,3},
  {&(_tg__ZTV7S2811C5__7S2811C1[4]),  4,4},
  {&(_tg__ZTV7S2811C5__7S2811C1[4]),  4,4},
  {&(_tg__ZTV7S2811C6__7S2811C1[3]),  3,3},
  {&(_tg__ZTV7S2811C7__7S2811C1[6]),  6,9},
  {&(_tg__ZTV7S2811C67S2811C7__A3__7S2811C1[3]),  3,3},
  {&(_tg__ZTV7S2811C8__7S2811C7__7S2811C1[3]),  3,3},
  {&(_tg__ZTV7S2811C9__7S2811C7__7S2811C1[5]),  5,7},
  {&(_tg__ZTV8S2811C107S2811C9__7S2811C7__7S2811C1[3]),  3,5},
  {&(_tg__ZTV7S2811C67S2811C9__A1__7S2811C7__7S2811C1[3]),  3,3},
  {&(_tg__ZTV7S2811C8__7S2811C1[3]),  3,3},
  {&(_tg__ZTV7S2811C9__7S2811C1[4]),  4,6},
  {&(_tg__ZTV7S2811C87S2811C9__A1__7S2811C1[3]),  3,3},
  {&(_tg__ZTV8S2811C107S2811C9__7S2811C1[3]),  3,5},
  {&(_tg__ZTV7S2811C68S2811C107S2811C9__A1__7S2811C1[3]),  3,3},
  {&(_tg__ZTV7S2811C67S2811C9__A2__7S2811C1[3]),  3,3},
  {&(_tg__ZTV8S2811C10__7S2811C9__7S2811C1[3]),  3,5},
  {&(_tg__ZTV7S2811C6__A1__7S2811C9__7S2811C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2811C1[];
extern  VTBL_ENTRY _ZTV7S2811C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2811C1[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C7D0Ev,_ZTv0_n20_N7S2811C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2811C7D0Ev,_ZThn32_N7S2811C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C7D1Ev,_ZTv0_n20_N7S2811C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S2811C7D1Ev,_ZThn32_N7S2811C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C4D0Ev,_ZTv0_n20_N7S2811C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2811C4D0Ev,_ZThn44_N7S2811C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C4D1Ev,_ZTv0_n20_N7S2811C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S2811C4D1Ev,_ZThn44_N7S2811C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2811C4D0Ev,_ZTv0_n32_N7S2811C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2811C4D0Ev,_ZThn12_N7S2811C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2811C4D1Ev,_ZTv0_n32_N7S2811C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2811C4D1Ev,_ZThn12_N7S2811C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C1D0Ev,_ZTv0_n20_N7S2811C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S2811C1D0Ev,_ZThn52_N7S2811C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2811C1D1Ev,_ZTv0_n20_N7S2811C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S2811C1D1Ev,_ZThn52_N7S2811C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2811C1D0Ev,_ZTv0_n32_N7S2811C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S2811C1D0Ev,_ZThn20_N7S2811C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2811C1D1Ev,_ZTv0_n32_N7S2811C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S2811C1D1Ev,_ZThn20_N7S2811C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S2811C1D0Ev,_ZTv0_n40_N7S2811C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2811C1D0Ev,_ZThn8_N7S2811C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S2811C1D1Ev,_ZTv0_n40_N7S2811C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S2811C1D1Ev,_ZThn8_N7S2811C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2811C1 = {  "S2811C1", // class name
  bases_S2811C1, 21,
  &(vtc_S2811C1[0]), // expected_vtbl_contents
  &(vtt_S2811C1[0]), // expected_vtt_contents
  ABISELECT(208,128), // object size
  NSPAIRA(_ZTI7S2811C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2811C1),50, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2811C1),34, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S345C6  {
  ::S4473C12_nt s345c6f0;
  int s345c6f1[2];
  char s345c6f2;
  virtual  ~S345C6(); // _ZN6S345C6D1Ev
  virtual void  v1(); // _ZN6S345C62v1Ev
  virtual void  v2(); // _ZN6S345C62v2Ev
  virtual void  v3(); // _ZN6S345C62v3Ev
  S345C6(); // tgen
};
//SIG(-1 S345C6) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S345C6 ::~S345C6(){ note_dtor("S345C6", this);}
void  S345C6 ::v1(){vfunc_called(this, "_ZN6S345C62v1Ev");}
void  S345C6 ::v2(){vfunc_called(this, "_ZN6S345C62v2Ev");}
void  S345C6 ::v3(){vfunc_called(this, "_ZN6S345C62v3Ev");}
S345C6 ::S345C6(){ note_ctor("S345C6", this);} // tgen

static void Test_S345C6()
{
  extern Class_Descriptor cd_S345C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S345C6, buf);
    S345C6 *dp, &lv = *(dp=new (buf) S345C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S345C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S345C6)");
    check_field_offset(lv, s345c6f0, ABISELECT(8,4), "S345C6.s345c6f0");
    check_field_offset(lv, s345c6f1, ABISELECT(24,16), "S345C6.s345c6f1");
    check_field_offset(lv, s345c6f2, ABISELECT(32,24), "S345C6.s345c6f2");
    test_class_info(&lv, &cd_S345C6);
    dp->~S345C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS345C6(Test_S345C6, "S345C6", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S345C6C1Ev();
extern void _ZN6S345C6D1Ev();
Name_Map name_map_S345C6[] = {
  NSPAIR(_ZN6S345C6C1Ev),
  NSPAIR(_ZN6S345C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S345C6[];
extern void _ZN6S345C6D1Ev();
extern void _ZN6S345C6D0Ev();
extern void _ZN6S345C62v1Ev();
extern void _ZN6S345C62v2Ev();
extern void _ZN6S345C62v3Ev();
static  VTBL_ENTRY vtc_S345C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S345C6[0]),
  (VTBL_ENTRY)&_ZN6S345C6D1Ev,
  (VTBL_ENTRY)&_ZN6S345C6D0Ev,
  (VTBL_ENTRY)&_ZN6S345C62v1Ev,
  (VTBL_ENTRY)&_ZN6S345C62v2Ev,
  (VTBL_ENTRY)&_ZN6S345C62v3Ev,
};
extern VTBL_ENTRY _ZTI6S345C6[];
extern  VTBL_ENTRY _ZTV6S345C6[];
Class_Descriptor cd_S345C6 = {  "S345C6", // class name
  0,0,//no base classes
  &(vtc_S345C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S345C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S345C6),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  S345C5  : S345C6 {
  void *s345c5f0;
  virtual void  v4(); // _ZN6S345C52v4Ev
  virtual void  v5(); // _ZN6S345C52v5Ev
  ~S345C5(); // tgen
  S345C5(); // tgen
};
//SIG(-1 S345C5) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S345C5 ::v4(){vfunc_called(this, "_ZN6S345C52v4Ev");}
void  S345C5 ::v5(){vfunc_called(this, "_ZN6S345C52v5Ev");}
S345C5 ::~S345C5(){ note_dtor("S345C5", this);} // tgen
S345C5 ::S345C5(){ note_ctor("S345C5", this);} // tgen

static void Test_S345C5()
{
  extern Class_Descriptor cd_S345C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S345C5, buf);
    S345C5 *dp, &lv = *(dp=new (buf) S345C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S345C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S345C5)");
    check_base_class_offset(lv, (S345C6*), 0, "S345C5");
    check_field_offset(lv, s345c5f0, ABISELECT(40,28), "S345C5.s345c5f0");
    test_class_info(&lv, &cd_S345C5);
    dp->~S345C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS345C5(Test_S345C5, "S345C5", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S345C5C1Ev();
extern void _ZN6S345C5D1Ev();
Name_Map name_map_S345C5[] = {
  NSPAIR(_ZN6S345C5C1Ev),
  NSPAIR(_ZN6S345C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S345C6;
extern VTBL_ENTRY _ZTI6S345C6[];
extern  VTBL_ENTRY _ZTV6S345C6[];
static Base_Class bases_S345C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S345C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI6S345C5[];
extern void _ZN6S345C5D1Ev();
extern void _ZN6S345C5D0Ev();
extern void _ZN6S345C62v1Ev();
extern void _ZN6S345C62v2Ev();
extern void _ZN6S345C62v3Ev();
extern void _ZN6S345C52v4Ev();
extern void _ZN6S345C52v5Ev();
static  VTBL_ENTRY vtc_S345C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S345C5[0]),
  (VTBL_ENTRY)&_ZN6S345C5D1Ev,
  (VTBL_ENTRY)&_ZN6S345C5D0Ev,
  (VTBL_ENTRY)&_ZN6S345C62v1Ev,
  (VTBL_ENTRY)&_ZN6S345C62v2Ev,
  (VTBL_ENTRY)&_ZN6S345C62v3Ev,
  (VTBL_ENTRY)&_ZN6S345C52v4Ev,
  (VTBL_ENTRY)&_ZN6S345C52v5Ev,
};
extern VTBL_ENTRY _ZTI6S345C5[];
extern  VTBL_ENTRY _ZTV6S345C5[];
Class_Descriptor cd_S345C5 = {  "S345C5", // class name
  bases_S345C5, 1,
  &(vtc_S345C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S345C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S345C5),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  S345C4  : S345C5 {
  void *s345c4f0;
  char s345c4f1;
  ::S2366C14_nt s345c4f2;
  virtual  ~S345C4(); // _ZN6S345C4D1Ev
  virtual void  v6(); // _ZN6S345C42v6Ev
  S345C4(); // tgen
};
//SIG(-1 S345C4) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S345C4 ::~S345C4(){ note_dtor("S345C4", this);}
void  S345C4 ::v6(){vfunc_called(this, "_ZN6S345C42v6Ev");}
S345C4 ::S345C4(){ note_ctor("S345C4", this);} // tgen

static void Test_S345C4()
{
  extern Class_Descriptor cd_S345C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S345C4, buf);
    S345C4 *dp, &lv = *(dp=new (buf) S345C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S345C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S345C4)");
    check_base_class_offset(lv, (S345C6*)(S345C5*), 0, "S345C4");
    check_base_class_offset(lv, (S345C5*), 0, "S345C4");
    check_field_offset(lv, s345c4f0, ABISELECT(48,32), "S345C4.s345c4f0");
    check_field_offset(lv, s345c4f1, ABISELECT(56,36), "S345C4.s345c4f1");
    check_field_offset(lv, s345c4f2, ABISELECT(60,40), "S345C4.s345c4f2");
    test_class_info(&lv, &cd_S345C4);
    dp->~S345C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS345C4(Test_S345C4, "S345C4", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S345C4C1Ev();
extern void _ZN6S345C4D1Ev();
Name_Map name_map_S345C4[] = {
  NSPAIR(_ZN6S345C4C1Ev),
  NSPAIR(_ZN6S345C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S345C6;
extern VTBL_ENTRY _ZTI6S345C6[];
extern  VTBL_ENTRY _ZTV6S345C6[];
extern Class_Descriptor cd_S345C5;
extern VTBL_ENTRY _ZTI6S345C5[];
extern  VTBL_ENTRY _ZTV6S345C5[];
static Base_Class bases_S345C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S345C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S345C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S345C4[];
extern void _ZN6S345C4D1Ev();
extern void _ZN6S345C4D0Ev();
extern void _ZN6S345C62v1Ev();
extern void _ZN6S345C62v2Ev();
extern void _ZN6S345C62v3Ev();
extern void _ZN6S345C52v4Ev();
extern void _ZN6S345C52v5Ev();
extern void _ZN6S345C42v6Ev();
static  VTBL_ENTRY vtc_S345C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S345C4[0]),
  (VTBL_ENTRY)&_ZN6S345C4D1Ev,
  (VTBL_ENTRY)&_ZN6S345C4D0Ev,
  (VTBL_ENTRY)&_ZN6S345C62v1Ev,
  (VTBL_ENTRY)&_ZN6S345C62v2Ev,
  (VTBL_ENTRY)&_ZN6S345C62v3Ev,
  (VTBL_ENTRY)&_ZN6S345C52v4Ev,
  (VTBL_ENTRY)&_ZN6S345C52v5Ev,
  (VTBL_ENTRY)&_ZN6S345C42v6Ev,
};
extern VTBL_ENTRY _ZTI6S345C4[];
extern  VTBL_ENTRY _ZTV6S345C4[];
Class_Descriptor cd_S345C4 = {  "S345C4", // class name
  bases_S345C4, 2,
  &(vtc_S345C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S345C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S345C4),10, //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  S345C3  : S345C4 {
  void *s345c3f0[3];
  int s345c3f1;
  ::S130C11_nt s345c3f2;
  virtual  ~S345C3(); // _ZN6S345C3D1Ev
  virtual void  v7(); // _ZN6S345C32v7Ev
  virtual void  v8(); // _ZN6S345C32v8Ev
  virtual void  v9(); // _ZN6S345C32v9Ev
  virtual void  v10(); // _ZN6S345C33v10Ev
  virtual void  v11(); // _ZN6S345C33v11Ev
  virtual void  v12(); // _ZN6S345C33v12Ev
  virtual void  v13(); // _ZN6S345C33v13Ev
  S345C3(); // tgen
};
//SIG(-1 S345C3) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v11 v12 Fp} vd v13 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 v4 v5 v6 v7 Fp[3] Fi FC8{ m Fp[2]}}


 S345C3 ::~S345C3(){ note_dtor("S345C3", this);}
void  S345C3 ::v7(){vfunc_called(this, "_ZN6S345C32v7Ev");}
void  S345C3 ::v8(){vfunc_called(this, "_ZN6S345C32v8Ev");}
void  S345C3 ::v9(){vfunc_called(this, "_ZN6S345C32v9Ev");}
void  S345C3 ::v10(){vfunc_called(this, "_ZN6S345C33v10Ev");}
void  S345C3 ::v11(){vfunc_called(this, "_ZN6S345C33v11Ev");}
void  S345C3 ::v12(){vfunc_called(this, "_ZN6S345C33v12Ev");}
void  S345C3 ::v13(){vfunc_called(this, "_ZN6S345C33v13Ev");}
S345C3 ::S345C3(){ note_ctor("S345C3", this);} // tgen

static void Test_S345C3()
{
  extern Class_Descriptor cd_S345C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S345C3, buf);
    S345C3 *dp, &lv = *(dp=new (buf) S345C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S345C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S345C3)");
    check_base_class_offset(lv, (S345C6*)(S345C5*)(S345C4*), 0, "S345C3");
    check_base_class_offset(lv, (S345C5*)(S345C4*), 0, "S345C3");
    check_base_class_offset(lv, (S345C4*), 0, "S345C3");
    check_field_offset(lv, s345c3f0, ABISELECT(72,48), "S345C3.s345c3f0");
    check_field_offset(lv, s345c3f1, ABISELECT(96,60), "S345C3.s345c3f1");
    check_field_offset(lv, s345c3f2, ABISELECT(104,64), "S345C3.s345c3f2");
    test_class_info(&lv, &cd_S345C3);
    dp->~S345C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS345C3(Test_S345C3, "S345C3", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN6S345C3C1Ev();
extern void _ZN6S345C3D1Ev();
Name_Map name_map_S345C3[] = {
  NSPAIR(_ZN6S345C3C1Ev),
  NSPAIR(_ZN6S345C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S345C6;
extern VTBL_ENTRY _ZTI6S345C6[];
extern  VTBL_ENTRY _ZTV6S345C6[];
extern Class_Descriptor cd_S345C5;
extern VTBL_ENTRY _ZTI6S345C5[];
extern  VTBL_ENTRY _ZTV6S345C5[];
extern Class_Descriptor cd_S345C4;
extern VTBL_ENTRY _ZTI6S345C4[];
extern  VTBL_ENTRY _ZTV6S345C4[];
static Base_Class bases_S345C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S345C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S345C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S345C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S345C3[];
extern void _ZN6S345C3D1Ev();
extern void _ZN6S345C3D0Ev();
extern void _ZN6S345C62v1Ev();
extern void _ZN6S345C62v2Ev();
extern void _ZN6S345C62v3Ev();
extern void _ZN6S345C52v4Ev();
extern void _ZN6S345C52v5Ev();
extern void _ZN6S345C42v6Ev();
extern void _ZN6S345C32v7Ev();
extern void _ZN6S345C32v8Ev();
extern void _ZN6S345C32v9Ev();
extern void _ZN6S345C33v10Ev();
extern void _ZN6S345C33v11Ev();
extern void _ZN6S345C33v12Ev();
extern void _ZN6S345C33v13Ev();
static  VTBL_ENTRY vtc_S345C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S345C3[0]),
  (VTBL_ENTRY)&_ZN6S345C3D1Ev,
  (VTBL_ENTRY)&_ZN6S345C3D0Ev,
  (VTBL_ENTRY)&_ZN6S345C62v1Ev,
  (VTBL_ENTRY)&_ZN6S345C62v2Ev,
  (VTBL_ENTRY)&_ZN6S345C62v3Ev,
  (VTBL_ENTRY)&_ZN6S345C52v4Ev,
  (VTBL_ENTRY)&_ZN6S345C52v5Ev,
  (VTBL_ENTRY)&_ZN6S345C42v6Ev,
  (VTBL_ENTRY)&_ZN6S345C32v7Ev,
  (VTBL_ENTRY)&_ZN6S345C32v8Ev,
  (VTBL_ENTRY)&_ZN6S345C32v9Ev,
  (VTBL_ENTRY)&_ZN6S345C33v10Ev,
  (VTBL_ENTRY)&_ZN6S345C33v11Ev,
  (VTBL_ENTRY)&_ZN6S345C33v12Ev,
  (VTBL_ENTRY)&_ZN6S345C33v13Ev,
};
extern VTBL_ENTRY _ZTI6S345C3[];
extern  VTBL_ENTRY _ZTV6S345C3[];
Class_Descriptor cd_S345C3 = {  "S345C3", // class name
  bases_S345C3, 3,
  &(vtc_S345C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI6S345C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S345C3),17, //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  S345C2  : S345C3 {
  void *s345c2f0[2];
  virtual  ~S345C2(); // _ZN6S345C2D1Ev
  virtual void  v14(); // _ZN6S345C23v14Ev
  virtual void  v15(); // _ZN6S345C23v15Ev
  virtual void  v16(); // _ZN6S345C23v16Ev
  S345C2(); // tgen
};
//SIG(-1 S345C2) C1{ BC2{ BC3{ BC4{ BC5{ vd v4 v5 v6 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v7 v8 Fp} vd v9 Fp Fc FC8{ m Fi[2]}} vd v10 v11 v12 v13 v14 v15 v16 Fp[3] Fi FC9{ m Fp[2]}} vd v1 v2 v3 Fp[2]}


 S345C2 ::~S345C2(){ note_dtor("S345C2", this);}
void  S345C2 ::v14(){vfunc_called(this, "_ZN6S345C23v14Ev");}
void  S345C2 ::v15(){vfunc_called(this, "_ZN6S345C23v15Ev");}
void  S345C2 ::v16(){vfunc_called(this, "_ZN6S345C23v16Ev");}
S345C2 ::S345C2(){ note_ctor("S345C2", this);} // tgen

static void Test_S345C2()
{
  extern Class_Descriptor cd_S345C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S345C2, buf);
    S345C2 *dp, &lv = *(dp=new (buf) S345C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S345C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S345C2)");
    check_base_class_offset(lv, (S345C6*)(S345C5*)(S345C4*)(S345C3*), 0, "S345C2");
    check_base_class_offset(lv, (S345C5*)(S345C4*)(S345C3*), 0, "S345C2");
    check_base_class_offset(lv, (S345C4*)(S345C3*), 0, "S345C2");
    check_base_class_offset(lv, (S345C3*), 0, "S345C2");
    check_field_offset(lv, s345c2f0, ABISELECT(120,72), "S345C2.s345c2f0");
    test_class_info(&lv, &cd_S345C2);
    dp->~S345C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS345C2(Test_S345C2, "S345C2", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN6S345C2C1Ev();
extern void _ZN6S345C2D1Ev();
Name_Map name_map_S345C2[] = {
  NSPAIR(_ZN6S345C2C1Ev),
  NSPAIR(_ZN6S345C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S345C6;
extern VTBL_ENTRY _ZTI6S345C6[];
extern  VTBL_ENTRY _ZTV6S345C6[];
extern Class_Descriptor cd_S345C5;
extern VTBL_ENTRY _ZTI6S345C5[];
extern  VTBL_ENTRY _ZTV6S345C5[];
extern Class_Descriptor cd_S345C4;
extern VTBL_ENTRY _ZTI6S345C4[];
extern  VTBL_ENTRY _ZTV6S345C4[];
extern Class_Descriptor cd_S345C3;
extern VTBL_ENTRY _ZTI6S345C3[];
extern  VTBL_ENTRY _ZTV6S345C3[];
static Base_Class bases_S345C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S345C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S345C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S345C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S345C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S345C2[];
extern void _ZN6S345C2D1Ev();
extern void _ZN6S345C2D0Ev();
extern void _ZN6S345C62v1Ev();
extern void _ZN6S345C62v2Ev();
extern void _ZN6S345C62v3Ev();
extern void _ZN6S345C52v4Ev();
extern void _ZN6S345C52v5Ev();
extern void _ZN6S345C42v6Ev();
extern void _ZN6S345C32v7Ev();
extern void _ZN6S345C32v8Ev();
extern void _ZN6S345C32v9Ev();
extern void _ZN6S345C33v10Ev();
extern void _ZN6S345C33v11Ev();
extern void _ZN6S345C33v12Ev();
extern void _ZN6S345C33v13Ev();
extern void _ZN6S345C23v14Ev();
extern void _ZN6S345C23v15Ev();
extern void _ZN6S345C23v16Ev();
static  VTBL_ENTRY vtc_S345C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S345C2[0]),
  (VTBL_ENTRY)&_ZN6S345C2D1Ev,
  (VTBL_ENTRY)&_ZN6S345C2D0Ev,
  (VTBL_ENTRY)&_ZN6S345C62v1Ev,
  (VTBL_ENTRY)&_ZN6S345C62v2Ev,
  (VTBL_ENTRY)&_ZN6S345C62v3Ev,
  (VTBL_ENTRY)&_ZN6S345C52v4Ev,
  (VTBL_ENTRY)&_ZN6S345C52v5Ev,
  (VTBL_ENTRY)&_ZN6S345C42v6Ev,
  (VTBL_ENTRY)&_ZN6S345C32v7Ev,
  (VTBL_ENTRY)&_ZN6S345C32v8Ev,
  (VTBL_ENTRY)&_ZN6S345C32v9Ev,
  (VTBL_ENTRY)&_ZN6S345C33v10Ev,
  (VTBL_ENTRY)&_ZN6S345C33v11Ev,
  (VTBL_ENTRY)&_ZN6S345C33v12Ev,
  (VTBL_ENTRY)&_ZN6S345C33v13Ev,
  (VTBL_ENTRY)&_ZN6S345C23v14Ev,
  (VTBL_ENTRY)&_ZN6S345C23v15Ev,
  (VTBL_ENTRY)&_ZN6S345C23v16Ev,
};
extern VTBL_ENTRY _ZTI6S345C2[];
extern  VTBL_ENTRY _ZTV6S345C2[];
Class_Descriptor cd_S345C2 = {  "S345C2", // class name
  bases_S345C2, 4,
  &(vtc_S345C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI6S345C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S345C2),20, //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  S345C1  : S345C2 {
  virtual  ~S345C1(); // _ZN6S345C1D1Ev
  S345C1(); // tgen
};
//SIG(1 S345C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v1 v2 v3 FC7{ m Fp Fi FC8{ m}} Fi[2] Fc} v4 v5 Fp} vd v6 Fp Fc FC9{ m Fi[2]}} vd v7 v8 v9 v10 v11 v12 v13 Fp[3] Fi FC10{ m Fp[2]}} vd v14 v15 v16 Fp[2]} vd}


 S345C1 ::~S345C1(){ note_dtor("S345C1", this);}
S345C1 ::S345C1(){ note_ctor("S345C1", this);} // tgen

static void Test_S345C1()
{
  extern Class_Descriptor cd_S345C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S345C1, buf);
    S345C1 *dp, &lv = *(dp=new (buf) S345C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S345C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S345C1)");
    check_base_class_offset(lv, (S345C6*)(S345C5*)(S345C4*)(S345C3*)(S345C2*), 0, "S345C1");
    check_base_class_offset(lv, (S345C5*)(S345C4*)(S345C3*)(S345C2*), 0, "S345C1");
    check_base_class_offset(lv, (S345C4*)(S345C3*)(S345C2*), 0, "S345C1");
    check_base_class_offset(lv, (S345C3*)(S345C2*), 0, "S345C1");
    check_base_class_offset(lv, (S345C2*), 0, "S345C1");
    test_class_info(&lv, &cd_S345C1);
    dp->~S345C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS345C1(Test_S345C1, "S345C1", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN6S345C1C1Ev();
extern void _ZN6S345C1D1Ev();
Name_Map name_map_S345C1[] = {
  NSPAIR(_ZN6S345C1C1Ev),
  NSPAIR(_ZN6S345C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S345C6;
extern VTBL_ENTRY _ZTI6S345C6[];
extern  VTBL_ENTRY _ZTV6S345C6[];
extern Class_Descriptor cd_S345C5;
extern VTBL_ENTRY _ZTI6S345C5[];
extern  VTBL_ENTRY _ZTV6S345C5[];
extern Class_Descriptor cd_S345C4;
extern VTBL_ENTRY _ZTI6S345C4[];
extern  VTBL_ENTRY _ZTV6S345C4[];
extern Class_Descriptor cd_S345C3;
extern VTBL_ENTRY _ZTI6S345C3[];
extern  VTBL_ENTRY _ZTV6S345C3[];
extern Class_Descriptor cd_S345C2;
extern VTBL_ENTRY _ZTI6S345C2[];
extern  VTBL_ENTRY _ZTV6S345C2[];
static Base_Class bases_S345C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S345C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S345C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S345C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S345C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S345C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S345C1[];
extern void _ZN6S345C1D1Ev();
extern void _ZN6S345C1D0Ev();
extern void _ZN6S345C62v1Ev();
extern void _ZN6S345C62v2Ev();
extern void _ZN6S345C62v3Ev();
extern void _ZN6S345C52v4Ev();
extern void _ZN6S345C52v5Ev();
extern void _ZN6S345C42v6Ev();
extern void _ZN6S345C32v7Ev();
extern void _ZN6S345C32v8Ev();
extern void _ZN6S345C32v9Ev();
extern void _ZN6S345C33v10Ev();
extern void _ZN6S345C33v11Ev();
extern void _ZN6S345C33v12Ev();
extern void _ZN6S345C33v13Ev();
extern void _ZN6S345C23v14Ev();
extern void _ZN6S345C23v15Ev();
extern void _ZN6S345C23v16Ev();
static  VTBL_ENTRY vtc_S345C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S345C1[0]),
  (VTBL_ENTRY)&_ZN6S345C1D1Ev,
  (VTBL_ENTRY)&_ZN6S345C1D0Ev,
  (VTBL_ENTRY)&_ZN6S345C62v1Ev,
  (VTBL_ENTRY)&_ZN6S345C62v2Ev,
  (VTBL_ENTRY)&_ZN6S345C62v3Ev,
  (VTBL_ENTRY)&_ZN6S345C52v4Ev,
  (VTBL_ENTRY)&_ZN6S345C52v5Ev,
  (VTBL_ENTRY)&_ZN6S345C42v6Ev,
  (VTBL_ENTRY)&_ZN6S345C32v7Ev,
  (VTBL_ENTRY)&_ZN6S345C32v8Ev,
  (VTBL_ENTRY)&_ZN6S345C32v9Ev,
  (VTBL_ENTRY)&_ZN6S345C33v10Ev,
  (VTBL_ENTRY)&_ZN6S345C33v11Ev,
  (VTBL_ENTRY)&_ZN6S345C33v12Ev,
  (VTBL_ENTRY)&_ZN6S345C33v13Ev,
  (VTBL_ENTRY)&_ZN6S345C23v14Ev,
  (VTBL_ENTRY)&_ZN6S345C23v15Ev,
  (VTBL_ENTRY)&_ZN6S345C23v16Ev,
};
extern VTBL_ENTRY _ZTI6S345C1[];
extern  VTBL_ENTRY _ZTV6S345C1[];
Class_Descriptor cd_S345C1 = {  "S345C1", // class name
  bases_S345C1, 5,
  &(vtc_S345C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI6S345C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S345C1),20, //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  S4793C3  {
  ::S4473C12_nt s4793c3f0;
  int s4793c3f1[2];
  char s4793c3f2;
  virtual  ~S4793C3(); // _ZN7S4793C3D1Ev
  virtual void  v3(); // _ZN7S4793C32v3Ev
  virtual void  v4(); // _ZN7S4793C32v4Ev
  virtual void  v5(); // _ZN7S4793C32v5Ev
  S4793C3(); // tgen
};
//SIG(-1 S4793C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4793C3 ::~S4793C3(){ note_dtor("S4793C3", this);}
void  S4793C3 ::v3(){vfunc_called(this, "_ZN7S4793C32v3Ev");}
void  S4793C3 ::v4(){vfunc_called(this, "_ZN7S4793C32v4Ev");}
void  S4793C3 ::v5(){vfunc_called(this, "_ZN7S4793C32v5Ev");}
S4793C3 ::S4793C3(){ note_ctor("S4793C3", this);} // tgen

static void Test_S4793C3()
{
  extern Class_Descriptor cd_S4793C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4793C3, buf);
    S4793C3 *dp, &lv = *(dp=new (buf) S4793C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4793C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4793C3)");
    check_field_offset(lv, s4793c3f0, ABISELECT(8,4), "S4793C3.s4793c3f0");
    check_field_offset(lv, s4793c3f1, ABISELECT(24,16), "S4793C3.s4793c3f1");
    check_field_offset(lv, s4793c3f2, ABISELECT(32,24), "S4793C3.s4793c3f2");
    test_class_info(&lv, &cd_S4793C3);
    dp->~S4793C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4793C3(Test_S4793C3, "S4793C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4793C3C1Ev();
extern void _ZN7S4793C3D1Ev();
Name_Map name_map_S4793C3[] = {
  NSPAIR(_ZN7S4793C3C1Ev),
  NSPAIR(_ZN7S4793C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4793C3[];
extern void _ZN7S4793C3D1Ev();
extern void _ZN7S4793C3D0Ev();
extern void _ZN7S4793C32v3Ev();
extern void _ZN7S4793C32v4Ev();
extern void _ZN7S4793C32v5Ev();
static  VTBL_ENTRY vtc_S4793C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4793C3[0]),
  (VTBL_ENTRY)&_ZN7S4793C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4793C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4793C3[];
extern  VTBL_ENTRY _ZTV7S4793C3[];
Class_Descriptor cd_S4793C3 = {  "S4793C3", // class name
  0,0,//no base classes
  &(vtc_S4793C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4793C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4793C3),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  S4793C2  : S4793C3 {
  void *s4793c2f0;
  virtual void  v6(); // _ZN7S4793C22v6Ev
  virtual void  v7(); // _ZN7S4793C22v7Ev
  ~S4793C2(); // tgen
  S4793C2(); // tgen
};
//SIG(-1 S4793C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4793C2 ::v6(){vfunc_called(this, "_ZN7S4793C22v6Ev");}
void  S4793C2 ::v7(){vfunc_called(this, "_ZN7S4793C22v7Ev");}
S4793C2 ::~S4793C2(){ note_dtor("S4793C2", this);} // tgen
S4793C2 ::S4793C2(){ note_ctor("S4793C2", this);} // tgen

static void Test_S4793C2()
{
  extern Class_Descriptor cd_S4793C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4793C2, buf);
    S4793C2 *dp, &lv = *(dp=new (buf) S4793C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4793C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4793C2)");
    check_base_class_offset(lv, (S4793C3*), 0, "S4793C2");
    check_field_offset(lv, s4793c2f0, ABISELECT(40,28), "S4793C2.s4793c2f0");
    test_class_info(&lv, &cd_S4793C2);
    dp->~S4793C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4793C2(Test_S4793C2, "S4793C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4793C2C1Ev();
extern void _ZN7S4793C2D1Ev();
Name_Map name_map_S4793C2[] = {
  NSPAIR(_ZN7S4793C2C1Ev),
  NSPAIR(_ZN7S4793C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4793C3;
extern VTBL_ENTRY _ZTI7S4793C3[];
extern  VTBL_ENTRY _ZTV7S4793C3[];
static Base_Class bases_S4793C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4793C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4793C2[];
extern void _ZN7S4793C2D1Ev();
extern void _ZN7S4793C2D0Ev();
extern void _ZN7S4793C32v3Ev();
extern void _ZN7S4793C32v4Ev();
extern void _ZN7S4793C32v5Ev();
extern void _ZN7S4793C22v6Ev();
extern void _ZN7S4793C22v7Ev();
static  VTBL_ENTRY vtc_S4793C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4793C2[0]),
  (VTBL_ENTRY)&_ZN7S4793C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4793C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4793C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4793C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4793C2[];
extern  VTBL_ENTRY _ZTV7S4793C2[];
Class_Descriptor cd_S4793C2 = {  "S4793C2", // class name
  bases_S4793C2, 1,
  &(vtc_S4793C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4793C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4793C2),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  S4793C7  {
  __tsi64 s4793c7f0[3];
  void *s4793c7f1[2];
  __tsi64 s4793c7f2[2];
  void  mf4793c7(); // _ZN7S4793C78mf4793c7Ev
};
//SIG(-1 S4793C7) C1{ m FL[3] Fp[2] FL[2]}


void  S4793C7 ::mf4793c7(){}

static void Test_S4793C7()
{
  {
    init_simple_test("S4793C7");
    S4793C7 lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S4793C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4793C7)");
    check_field_offset(lv, s4793c7f0, 0, "S4793C7.s4793c7f0");
    check_field_offset(lv, s4793c7f1, 24, "S4793C7.s4793c7f1");
    check_field_offset(lv, s4793c7f2, ABISELECT(40,32), "S4793C7.s4793c7f2");
  }
}
static Arrange_To_Call_Me vS4793C7(Test_S4793C7, "S4793C7", ABISELECT(56,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4793C6  {
  __tsi64 s4793c6f0;
  ::S4793C7 s4793c6f1;
  void *s4793c6f2;
  int s4793c6f3;
  __tsi64 s4793c6f4;
  int s4793c6f5;
  void  mf4793c6(); // _ZN7S4793C68mf4793c6Ev
};
//SIG(-1 S4793C6) C1{ m FL FC2{ m FL[3] Fp[2] FL[2]} Fp Fi FL Fi}


void  S4793C6 ::mf4793c6(){}

static void Test_S4793C6()
{
  {
    init_simple_test("S4793C6");
    S4793C6 lv;
    check2(sizeof(lv), ABISELECT(96,76), "sizeof(S4793C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4793C6)");
    check_field_offset(lv, s4793c6f0, 0, "S4793C6.s4793c6f0");
    check_field_offset(lv, s4793c6f1, 8, "S4793C6.s4793c6f1");
    check_field_offset(lv, s4793c6f2, ABISELECT(64,56), "S4793C6.s4793c6f2");
    check_field_offset(lv, s4793c6f3, ABISELECT(72,60), "S4793C6.s4793c6f3");
    check_field_offset(lv, s4793c6f4, ABISELECT(80,64), "S4793C6.s4793c6f4");
    check_field_offset(lv, s4793c6f5, ABISELECT(88,72), "S4793C6.s4793c6f5");
  }
}
static Arrange_To_Call_Me vS4793C6(Test_S4793C6, "S4793C6", ABISELECT(96,76));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4793C1  : S4793C2 {
  void *s4793c1f0;
  ::S4793C6 s4793c1f1;
  void *s4793c1f2[2];
  int s4793c1f3;
  void *s4793c1f4;
  char s4793c1f5;
  int s4793c1f6;
  ::S2173C10_nt s4793c1f7;
  char s4793c1f8;
  ::S2366C19 s4793c1f9;
  virtual  ~S4793C1(); // _ZN7S4793C1D1Ev
  virtual void  v1(); // _ZN7S4793C12v1Ev
  virtual void  v2(); // _ZN7S4793C12v2Ev
  S4793C1(); // tgen
};
//SIG(1 S4793C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 Fp FC6{ m FL FC7{ m FL[3] Fp[2] FL[2]} Fp Fi FL Fi} Fp[2] Fi Fp Fc Fi FC8{ m FC9{ FL[4]}} Fc FC10{ m Fp}}


 S4793C1 ::~S4793C1(){ note_dtor("S4793C1", this);}
void  S4793C1 ::v1(){vfunc_called(this, "_ZN7S4793C12v1Ev");}
void  S4793C1 ::v2(){vfunc_called(this, "_ZN7S4793C12v2Ev");}
S4793C1 ::S4793C1(){ note_ctor("S4793C1", this);} // tgen

static void Test_S4793C1()
{
  extern Class_Descriptor cd_S4793C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,45)];
    init_test(&cd_S4793C1, buf);
    S4793C1 *dp, &lv = *(dp=new (buf) S4793C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,176), "sizeof(S4793C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4793C1)");
    check_base_class_offset(lv, (S4793C3*)(S4793C2*), 0, "S4793C1");
    check_base_class_offset(lv, (S4793C2*), 0, "S4793C1");
    check_field_offset(lv, s4793c1f0, ABISELECT(48,32), "S4793C1.s4793c1f0");
    check_field_offset(lv, s4793c1f1, ABISELECT(56,36), "S4793C1.s4793c1f1");
    check_field_offset(lv, s4793c1f2, ABISELECT(152,112), "S4793C1.s4793c1f2");
    check_field_offset(lv, s4793c1f3, ABISELECT(168,120), "S4793C1.s4793c1f3");
    check_field_offset(lv, s4793c1f4, ABISELECT(176,124), "S4793C1.s4793c1f4");
    check_field_offset(lv, s4793c1f5, ABISELECT(184,128), "S4793C1.s4793c1f5");
    check_field_offset(lv, s4793c1f6, ABISELECT(188,132), "S4793C1.s4793c1f6");
    check_field_offset(lv, s4793c1f7, ABISELECT(192,136), "S4793C1.s4793c1f7");
    check_field_offset(lv, s4793c1f8, ABISELECT(224,168), "S4793C1.s4793c1f8");
    check_field_offset(lv, s4793c1f9, ABISELECT(232,172), "S4793C1.s4793c1f9");
    test_class_info(&lv, &cd_S4793C1);
    dp->~S4793C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4793C1(Test_S4793C1, "S4793C1", ABISELECT(240,176));

#else // __cplusplus

extern void _ZN7S4793C1C1Ev();
extern void _ZN7S4793C1D1Ev();
Name_Map name_map_S4793C1[] = {
  NSPAIR(_ZN7S4793C1C1Ev),
  NSPAIR(_ZN7S4793C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4793C3;
extern VTBL_ENTRY _ZTI7S4793C3[];
extern  VTBL_ENTRY _ZTV7S4793C3[];
extern Class_Descriptor cd_S4793C2;
extern VTBL_ENTRY _ZTI7S4793C2[];
extern  VTBL_ENTRY _ZTV7S4793C2[];
static Base_Class bases_S4793C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4793C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4793C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4793C1[];
extern void _ZN7S4793C1D1Ev();
extern void _ZN7S4793C1D0Ev();
extern void _ZN7S4793C32v3Ev();
extern void _ZN7S4793C32v4Ev();
extern void _ZN7S4793C32v5Ev();
extern void _ZN7S4793C22v6Ev();
extern void _ZN7S4793C22v7Ev();
extern void _ZN7S4793C12v1Ev();
extern void _ZN7S4793C12v2Ev();
static  VTBL_ENTRY vtc_S4793C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4793C1[0]),
  (VTBL_ENTRY)&_ZN7S4793C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4793C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4793C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4793C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4793C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4793C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4793C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4793C1[];
extern  VTBL_ENTRY _ZTV7S4793C1[];
Class_Descriptor cd_S4793C1 = {  "S4793C1", // class name
  bases_S4793C1, 2,
  &(vtc_S4793C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,176), // object size
  NSPAIRA(_ZTI7S4793C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4793C1),11, //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  S5305C3  {
  ::S4473C12_nt s5305c3f0;
  int s5305c3f1[2];
  char s5305c3f2;
  virtual  ~S5305C3(); // _ZN7S5305C3D1Ev
  virtual void  v6(); // _ZN7S5305C32v6Ev
  virtual void  v7(); // _ZN7S5305C32v7Ev
  virtual void  v8(); // _ZN7S5305C32v8Ev
  S5305C3(); // tgen
};
//SIG(-1 S5305C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5305C3 ::~S5305C3(){ note_dtor("S5305C3", this);}
void  S5305C3 ::v6(){vfunc_called(this, "_ZN7S5305C32v6Ev");}
void  S5305C3 ::v7(){vfunc_called(this, "_ZN7S5305C32v7Ev");}
void  S5305C3 ::v8(){vfunc_called(this, "_ZN7S5305C32v8Ev");}
S5305C3 ::S5305C3(){ note_ctor("S5305C3", this);} // tgen

static void Test_S5305C3()
{
  extern Class_Descriptor cd_S5305C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5305C3, buf);
    S5305C3 *dp, &lv = *(dp=new (buf) S5305C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5305C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5305C3)");
    check_field_offset(lv, s5305c3f0, ABISELECT(8,4), "S5305C3.s5305c3f0");
    check_field_offset(lv, s5305c3f1, ABISELECT(24,16), "S5305C3.s5305c3f1");
    check_field_offset(lv, s5305c3f2, ABISELECT(32,24), "S5305C3.s5305c3f2");
    test_class_info(&lv, &cd_S5305C3);
    dp->~S5305C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5305C3(Test_S5305C3, "S5305C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5305C3C1Ev();
extern void _ZN7S5305C3D1Ev();
Name_Map name_map_S5305C3[] = {
  NSPAIR(_ZN7S5305C3C1Ev),
  NSPAIR(_ZN7S5305C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5305C3[];
extern void _ZN7S5305C3D1Ev();
extern void _ZN7S5305C3D0Ev();
extern void _ZN7S5305C32v6Ev();
extern void _ZN7S5305C32v7Ev();
extern void _ZN7S5305C32v8Ev();
static  VTBL_ENTRY vtc_S5305C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5305C3[0]),
  (VTBL_ENTRY)&_ZN7S5305C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5305C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S5305C3[];
extern  VTBL_ENTRY _ZTV7S5305C3[];
Class_Descriptor cd_S5305C3 = {  "S5305C3", // class name
  0,0,//no base classes
  &(vtc_S5305C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5305C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5305C3),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  S5305C2  : S5305C3 {
  void *s5305c2f0;
  virtual void  v9(); // _ZN7S5305C22v9Ev
  virtual void  v10(); // _ZN7S5305C23v10Ev
  ~S5305C2(); // tgen
  S5305C2(); // tgen
};
//SIG(-1 S5305C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5305C2 ::v9(){vfunc_called(this, "_ZN7S5305C22v9Ev");}
void  S5305C2 ::v10(){vfunc_called(this, "_ZN7S5305C23v10Ev");}
S5305C2 ::~S5305C2(){ note_dtor("S5305C2", this);} // tgen
S5305C2 ::S5305C2(){ note_ctor("S5305C2", this);} // tgen

static void Test_S5305C2()
{
  extern Class_Descriptor cd_S5305C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5305C2, buf);
    S5305C2 *dp, &lv = *(dp=new (buf) S5305C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5305C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5305C2)");
    check_base_class_offset(lv, (S5305C3*), 0, "S5305C2");
    check_field_offset(lv, s5305c2f0, ABISELECT(40,28), "S5305C2.s5305c2f0");
    test_class_info(&lv, &cd_S5305C2);
    dp->~S5305C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5305C2(Test_S5305C2, "S5305C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5305C2C1Ev();
extern void _ZN7S5305C2D1Ev();
Name_Map name_map_S5305C2[] = {
  NSPAIR(_ZN7S5305C2C1Ev),
  NSPAIR(_ZN7S5305C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5305C3;
extern VTBL_ENTRY _ZTI7S5305C3[];
extern  VTBL_ENTRY _ZTV7S5305C3[];
static Base_Class bases_S5305C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5305C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S5305C2[];
extern void _ZN7S5305C2D1Ev();
extern void _ZN7S5305C2D0Ev();
extern void _ZN7S5305C32v6Ev();
extern void _ZN7S5305C32v7Ev();
extern void _ZN7S5305C32v8Ev();
extern void _ZN7S5305C22v9Ev();
extern void _ZN7S5305C23v10Ev();
static  VTBL_ENTRY vtc_S5305C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5305C2[0]),
  (VTBL_ENTRY)&_ZN7S5305C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5305C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5305C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5305C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S5305C2[];
extern  VTBL_ENTRY _ZTV7S5305C2[];
Class_Descriptor cd_S5305C2 = {  "S5305C2", // class name
  bases_S5305C2, 1,
  &(vtc_S5305C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5305C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5305C2),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  S5305C6_nt  {
  virtual  ~S5305C6_nt(); // _ZN10S5305C6_ntD1Ev
  virtual void  v11(); // _ZN10S5305C6_nt3v11Ev
  virtual void  v12(); // _ZN10S5305C6_nt3v12Ev
  virtual void  v13(); // _ZN10S5305C6_nt3v13Ev
  S5305C6_nt(); // tgen
};
//SIG(-1 S5305C6_nt) C1{ vd v1 v2 v3}


 S5305C6_nt ::~S5305C6_nt(){ note_dtor("S5305C6_nt", this);}
void  S5305C6_nt ::v11(){vfunc_called(this, "_ZN10S5305C6_nt3v11Ev");}
void  S5305C6_nt ::v12(){vfunc_called(this, "_ZN10S5305C6_nt3v12Ev");}
void  S5305C6_nt ::v13(){vfunc_called(this, "_ZN10S5305C6_nt3v13Ev");}
S5305C6_nt ::S5305C6_nt(){ note_ctor("S5305C6_nt", this);} // tgen

//skip512 S5305C6_nt

#else // __cplusplus

extern void _ZN10S5305C6_ntC1Ev();
extern void _ZN10S5305C6_ntD1Ev();
Name_Map name_map_S5305C6_nt[] = {
  NSPAIR(_ZN10S5305C6_ntC1Ev),
  NSPAIR(_ZN10S5305C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5305C6_nt[];
extern void _ZN10S5305C6_ntD1Ev();
extern void _ZN10S5305C6_ntD0Ev();
extern void _ZN10S5305C6_nt3v11Ev();
extern void _ZN10S5305C6_nt3v12Ev();
extern void _ZN10S5305C6_nt3v13Ev();
static  VTBL_ENTRY vtc_S5305C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5305C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S5305C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5305C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5305C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5305C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5305C6_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI10S5305C6_nt[];
VTBL_ENTRY *P__ZTI10S5305C6_nt = _ZTI10S5305C6_nt; 
extern  VTBL_ENTRY _ZTV10S5305C6_nt[];
Class_Descriptor cd_S5305C6_nt = {  "S5305C6_nt", // class name
  0,0,//no base classes
  &(vtc_S5305C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S5305C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5305C6_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  S5305C10_nt  {
  int s5305c10f0[4];
};
//SIG(-1 S5305C10_nt) C1{ Fi[4]}



//skip512 S5305C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5305C9_nt  {
  void *s5305c9f0;
  ::S5305C10_nt s5305c9f1;
  void  mf5305c9(); // _ZN10S5305C9_nt8mf5305c9Ev
};
//SIG(-1 S5305C9_nt) C1{ m Fp FC2{ Fi[4]}}


void  S5305C9_nt ::mf5305c9(){}

//skip512 S5305C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5305C1  : S5305C2 , S5305C6_nt {
  ::S2173C10_nt s5305c1f0;
  ::S5305C9_nt s5305c1f1;
  void *s5305c1f2[2];
  ::S2366C19 s5305c1f3;
  ::S2366C10_nt s5305c1f4;
  int s5305c1f5;
  virtual void  v1(); // _ZN7S5305C12v1Ev
  virtual void  v2(); // _ZN7S5305C12v2Ev
  virtual void  v3(); // _ZN7S5305C12v3Ev
  virtual void  v4(); // _ZN7S5305C12v4Ev
  virtual void  v5(); // _ZN7S5305C12v5Ev
  ~S5305C1(); // tgen
  S5305C1(); // tgen
};
//SIG(1 S5305C1) C1{ BC2{ BC3{ vd v6 v7 v8 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v9 v10 Fp} BC6{ vd v11 v12 v13} v1 v2 v3 v4 v5 FC7{ m FC8{ FL[4]}} FC9{ m Fp FC10{ Fi[4]}} Fp[2] FC11{ m Fp} FC12{ m Fp} Fi}


void  S5305C1 ::v1(){vfunc_called(this, "_ZN7S5305C12v1Ev");}
void  S5305C1 ::v2(){vfunc_called(this, "_ZN7S5305C12v2Ev");}
void  S5305C1 ::v3(){vfunc_called(this, "_ZN7S5305C12v3Ev");}
void  S5305C1 ::v4(){vfunc_called(this, "_ZN7S5305C12v4Ev");}
void  S5305C1 ::v5(){vfunc_called(this, "_ZN7S5305C12v5Ev");}
S5305C1 ::~S5305C1(){ note_dtor("S5305C1", this);} // tgen
S5305C1 ::S5305C1(){ note_ctor("S5305C1", this);} // tgen

static void Test_S5305C1()
{
  extern Class_Descriptor cd_S5305C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,28)];
    init_test(&cd_S5305C1, buf);
    S5305C1 *dp, &lv = *(dp=new (buf) S5305C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,108), "sizeof(S5305C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5305C1)");
    check_base_class_offset(lv, (S5305C3*)(S5305C2*), 0, "S5305C1");
    check_base_class_offset(lv, (S5305C2*), 0, "S5305C1");
    check_base_class_offset(lv, (S5305C6_nt*), ABISELECT(48,32), "S5305C1");
    check_field_offset(lv, s5305c1f0, ABISELECT(56,36), "S5305C1.s5305c1f0");
    check_field_offset(lv, s5305c1f1, ABISELECT(88,68), "S5305C1.s5305c1f1");
    check_field_offset(lv, s5305c1f2, ABISELECT(112,88), "S5305C1.s5305c1f2");
    check_field_offset(lv, s5305c1f3, ABISELECT(128,96), "S5305C1.s5305c1f3");
    check_field_offset(lv, s5305c1f4, ABISELECT(136,100), "S5305C1.s5305c1f4");
    check_field_offset(lv, s5305c1f5, ABISELECT(144,104), "S5305C1.s5305c1f5");
    test_class_info(&lv, &cd_S5305C1);
    dp->~S5305C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5305C1(Test_S5305C1, "S5305C1", ABISELECT(152,108));

#else // __cplusplus

extern void _ZN7S5305C1C1Ev();
extern void _ZN7S5305C1D1Ev();
Name_Map name_map_S5305C1[] = {
  NSPAIR(_ZN7S5305C1C1Ev),
  NSPAIR(_ZN7S5305C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5305C3;
extern VTBL_ENTRY _ZTI7S5305C3[];
extern  VTBL_ENTRY _ZTV7S5305C3[];
extern Class_Descriptor cd_S5305C2;
extern VTBL_ENTRY _ZTI7S5305C2[];
extern  VTBL_ENTRY _ZTV7S5305C2[];
extern Class_Descriptor cd_S5305C6_nt;
extern VTBL_ENTRY _ZTI10S5305C6_nt[];
extern  VTBL_ENTRY _ZTV10S5305C6_nt[];
static Base_Class bases_S5305C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5305C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5305C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S5305C6_nt,    ABISELECT(48,32), //bcp->offset
    14, //bcp->virtual_function_table_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 _ZTI7S5305C1[];
extern void _ZN7S5305C1D1Ev();
extern void _ZN7S5305C1D0Ev();
extern void _ZN7S5305C32v6Ev();
extern void _ZN7S5305C32v7Ev();
extern void _ZN7S5305C32v8Ev();
extern void _ZN7S5305C22v9Ev();
extern void _ZN7S5305C23v10Ev();
extern void _ZN7S5305C12v1Ev();
extern void _ZN7S5305C12v2Ev();
extern void _ZN7S5305C12v3Ev();
extern void _ZN7S5305C12v4Ev();
extern void _ZN7S5305C12v5Ev();
extern void ABISELECT(_ZThn48_N7S5305C1D1Ev,_ZThn32_N7S5305C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S5305C1D0Ev,_ZThn32_N7S5305C1D0Ev)();
extern void _ZN10S5305C6_nt3v11Ev();
extern void _ZN10S5305C6_nt3v12Ev();
extern void _ZN10S5305C6_nt3v13Ev();
static  VTBL_ENTRY vtc_S5305C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5305C1[0]),
  (VTBL_ENTRY)&_ZN7S5305C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5305C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5305C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5305C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5305C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5305C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5305C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5305C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5305C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5305C12v5Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S5305C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S5305C1D1Ev,_ZThn32_N7S5305C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S5305C1D0Ev,_ZThn32_N7S5305C1D0Ev),
  (VTBL_ENTRY)&_ZN10S5305C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5305C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5305C6_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI7S5305C1[];
extern  VTBL_ENTRY _ZTV7S5305C1[];
Class_Descriptor cd_S5305C1 = {  "S5305C1", // class name
  bases_S5305C1, 3,
  &(vtc_S5305C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,108), // object size
  NSPAIRA(_ZTI7S5305C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5305C1),21, //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  S4799C3  {
  ::S4473C12_nt s4799c3f0;
  int s4799c3f1[2];
  char s4799c3f2;
  virtual  ~S4799C3(); // _ZN7S4799C3D1Ev
  virtual void  v3(); // _ZN7S4799C32v3Ev
  virtual void  v4(); // _ZN7S4799C32v4Ev
  virtual void  v5(); // _ZN7S4799C32v5Ev
  S4799C3(); // tgen
};
//SIG(-1 S4799C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4799C3 ::~S4799C3(){ note_dtor("S4799C3", this);}
void  S4799C3 ::v3(){vfunc_called(this, "_ZN7S4799C32v3Ev");}
void  S4799C3 ::v4(){vfunc_called(this, "_ZN7S4799C32v4Ev");}
void  S4799C3 ::v5(){vfunc_called(this, "_ZN7S4799C32v5Ev");}
S4799C3 ::S4799C3(){ note_ctor("S4799C3", this);} // tgen

static void Test_S4799C3()
{
  extern Class_Descriptor cd_S4799C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4799C3, buf);
    S4799C3 *dp, &lv = *(dp=new (buf) S4799C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4799C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4799C3)");
    check_field_offset(lv, s4799c3f0, ABISELECT(8,4), "S4799C3.s4799c3f0");
    check_field_offset(lv, s4799c3f1, ABISELECT(24,16), "S4799C3.s4799c3f1");
    check_field_offset(lv, s4799c3f2, ABISELECT(32,24), "S4799C3.s4799c3f2");
    test_class_info(&lv, &cd_S4799C3);
    dp->~S4799C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4799C3(Test_S4799C3, "S4799C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4799C3C1Ev();
extern void _ZN7S4799C3D1Ev();
Name_Map name_map_S4799C3[] = {
  NSPAIR(_ZN7S4799C3C1Ev),
  NSPAIR(_ZN7S4799C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4799C3[];
extern void _ZN7S4799C3D1Ev();
extern void _ZN7S4799C3D0Ev();
extern void _ZN7S4799C32v3Ev();
extern void _ZN7S4799C32v4Ev();
extern void _ZN7S4799C32v5Ev();
static  VTBL_ENTRY vtc_S4799C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4799C3[0]),
  (VTBL_ENTRY)&_ZN7S4799C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4799C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4799C3[];
extern  VTBL_ENTRY _ZTV7S4799C3[];
Class_Descriptor cd_S4799C3 = {  "S4799C3", // class name
  0,0,//no base classes
  &(vtc_S4799C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4799C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4799C3),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  S4799C2  : S4799C3 {
  void *s4799c2f0;
  virtual void  v6(); // _ZN7S4799C22v6Ev
  virtual void  v7(); // _ZN7S4799C22v7Ev
  ~S4799C2(); // tgen
  S4799C2(); // tgen
};
//SIG(-1 S4799C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4799C2 ::v6(){vfunc_called(this, "_ZN7S4799C22v6Ev");}
void  S4799C2 ::v7(){vfunc_called(this, "_ZN7S4799C22v7Ev");}
S4799C2 ::~S4799C2(){ note_dtor("S4799C2", this);} // tgen
S4799C2 ::S4799C2(){ note_ctor("S4799C2", this);} // tgen

static void Test_S4799C2()
{
  extern Class_Descriptor cd_S4799C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4799C2, buf);
    S4799C2 *dp, &lv = *(dp=new (buf) S4799C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4799C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4799C2)");
    check_base_class_offset(lv, (S4799C3*), 0, "S4799C2");
    check_field_offset(lv, s4799c2f0, ABISELECT(40,28), "S4799C2.s4799c2f0");
    test_class_info(&lv, &cd_S4799C2);
    dp->~S4799C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4799C2(Test_S4799C2, "S4799C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4799C2C1Ev();
extern void _ZN7S4799C2D1Ev();
Name_Map name_map_S4799C2[] = {
  NSPAIR(_ZN7S4799C2C1Ev),
  NSPAIR(_ZN7S4799C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4799C3;
extern VTBL_ENTRY _ZTI7S4799C3[];
extern  VTBL_ENTRY _ZTV7S4799C3[];
static Base_Class bases_S4799C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4799C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4799C2[];
extern void _ZN7S4799C2D1Ev();
extern void _ZN7S4799C2D0Ev();
extern void _ZN7S4799C32v3Ev();
extern void _ZN7S4799C32v4Ev();
extern void _ZN7S4799C32v5Ev();
extern void _ZN7S4799C22v6Ev();
extern void _ZN7S4799C22v7Ev();
static  VTBL_ENTRY vtc_S4799C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4799C2[0]),
  (VTBL_ENTRY)&_ZN7S4799C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4799C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4799C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4799C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4799C2[];
extern  VTBL_ENTRY _ZTV7S4799C2[];
Class_Descriptor cd_S4799C2 = {  "S4799C2", // class name
  bases_S4799C2, 1,
  &(vtc_S4799C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4799C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4799C2),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  S4799C6  {
  ::S2173C14 s4799c6f0;
  ::S2173C7_nt s4799c6f1;
  char s4799c6f2;
  void  mf4799c6(); // _ZN7S4799C68mf4799c6Ev
  virtual  ~S4799C6(); // _ZN7S4799C6D1Ev
  S4799C6(); // tgen
};
//SIG(-1 S4799C6) C1{ vd m FC2{ m Fp Fi[2] FC3{ m}} FC4{ m Fp Fi[2] FC5{ m}} Fc}


void  S4799C6 ::mf4799c6(){}
 S4799C6 ::~S4799C6(){ note_dtor("S4799C6", this);}
S4799C6 ::S4799C6(){ note_ctor("S4799C6", this);} // tgen

static void Test_S4799C6()
{
  extern Class_Descriptor cd_S4799C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S4799C6, buf);
    S4799C6 *dp, &lv = *(dp=new (buf) S4799C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S4799C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4799C6)");
    check_field_offset(lv, s4799c6f0, ABISELECT(8,4), "S4799C6.s4799c6f0");
    check_field_offset(lv, s4799c6f1, ABISELECT(32,20), "S4799C6.s4799c6f1");
    check_field_offset(lv, s4799c6f2, ABISELECT(56,36), "S4799C6.s4799c6f2");
    test_class_info(&lv, &cd_S4799C6);
    dp->~S4799C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4799C6(Test_S4799C6, "S4799C6", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S4799C6C1Ev();
extern void _ZN7S4799C6D1Ev();
Name_Map name_map_S4799C6[] = {
  NSPAIR(_ZN7S4799C6C1Ev),
  NSPAIR(_ZN7S4799C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4799C6[];
extern void _ZN7S4799C6D1Ev();
extern void _ZN7S4799C6D0Ev();
static  VTBL_ENTRY vtc_S4799C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4799C6[0]),
  (VTBL_ENTRY)&_ZN7S4799C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4799C6D0Ev,
};
extern VTBL_ENTRY _ZTI7S4799C6[];
extern  VTBL_ENTRY _ZTV7S4799C6[];
Class_Descriptor cd_S4799C6 = {  "S4799C6", // class name
  0,0,//no base classes
  &(vtc_S4799C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S4799C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4799C6),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  S4799C1  : S4799C2 {
  void *s4799c1f0[2];
  ::S4799C6 s4799c1f1;
  ::S2171C14_nt s4799c1f2;
  virtual  ~S4799C1(); // _ZN7S4799C1D1Ev
  virtual void  v1(); // _ZN7S4799C12v1Ev
  virtual void  v2(); // _ZN7S4799C12v2Ev
  S4799C1(); // tgen
};
//SIG(1 S4799C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 Fp[2] FC6{ vd m FC7{ m Fp Fi[2] FC8{ m}} FC9{ m Fp Fi[2] FC5} Fc} FC10{ m Fp Fi[2] FC5}}


 S4799C1 ::~S4799C1(){ note_dtor("S4799C1", this);}
void  S4799C1 ::v1(){vfunc_called(this, "_ZN7S4799C12v1Ev");}
void  S4799C1 ::v2(){vfunc_called(this, "_ZN7S4799C12v2Ev");}
S4799C1 ::S4799C1(){ note_ctor("S4799C1", this);} // tgen

static void Test_S4799C1()
{
  extern Class_Descriptor cd_S4799C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,25)];
    init_test(&cd_S4799C1, buf);
    S4799C1 *dp, &lv = *(dp=new (buf) S4799C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,96), "sizeof(S4799C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4799C1)");
    check_base_class_offset(lv, (S4799C3*)(S4799C2*), 0, "S4799C1");
    check_base_class_offset(lv, (S4799C2*), 0, "S4799C1");
    check_field_offset(lv, s4799c1f0, ABISELECT(48,32), "S4799C1.s4799c1f0");
    check_field_offset(lv, s4799c1f1, ABISELECT(64,40), "S4799C1.s4799c1f1");
    check_field_offset(lv, s4799c1f2, ABISELECT(128,80), "S4799C1.s4799c1f2");
    test_class_info(&lv, &cd_S4799C1);
    dp->~S4799C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4799C1(Test_S4799C1, "S4799C1", ABISELECT(152,96));

#else // __cplusplus

extern void _ZN7S4799C1C1Ev();
extern void _ZN7S4799C1D1Ev();
Name_Map name_map_S4799C1[] = {
  NSPAIR(_ZN7S4799C1C1Ev),
  NSPAIR(_ZN7S4799C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4799C3;
extern VTBL_ENTRY _ZTI7S4799C3[];
extern  VTBL_ENTRY _ZTV7S4799C3[];
extern Class_Descriptor cd_S4799C2;
extern VTBL_ENTRY _ZTI7S4799C2[];
extern  VTBL_ENTRY _ZTV7S4799C2[];
static Base_Class bases_S4799C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4799C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4799C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4799C1[];
extern void _ZN7S4799C1D1Ev();
extern void _ZN7S4799C1D0Ev();
extern void _ZN7S4799C32v3Ev();
extern void _ZN7S4799C32v4Ev();
extern void _ZN7S4799C32v5Ev();
extern void _ZN7S4799C22v6Ev();
extern void _ZN7S4799C22v7Ev();
extern void _ZN7S4799C12v1Ev();
extern void _ZN7S4799C12v2Ev();
static  VTBL_ENTRY vtc_S4799C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4799C1[0]),
  (VTBL_ENTRY)&_ZN7S4799C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4799C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4799C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4799C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4799C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4799C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4799C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4799C1[];
extern  VTBL_ENTRY _ZTV7S4799C1[];
Class_Descriptor cd_S4799C1 = {  "S4799C1", // class name
  bases_S4799C1, 2,
  &(vtc_S4799C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,96), // object size
  NSPAIRA(_ZTI7S4799C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4799C1),11, //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  S5306C3  {
  ::S4473C12_nt s5306c3f0;
  int s5306c3f1[2];
  char s5306c3f2;
  virtual  ~S5306C3(); // _ZN7S5306C3D1Ev
  virtual void  v6(); // _ZN7S5306C32v6Ev
  virtual void  v7(); // _ZN7S5306C32v7Ev
  virtual void  v8(); // _ZN7S5306C32v8Ev
  S5306C3(); // tgen
};
//SIG(-1 S5306C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5306C3 ::~S5306C3(){ note_dtor("S5306C3", this);}
void  S5306C3 ::v6(){vfunc_called(this, "_ZN7S5306C32v6Ev");}
void  S5306C3 ::v7(){vfunc_called(this, "_ZN7S5306C32v7Ev");}
void  S5306C3 ::v8(){vfunc_called(this, "_ZN7S5306C32v8Ev");}
S5306C3 ::S5306C3(){ note_ctor("S5306C3", this);} // tgen

static void Test_S5306C3()
{
  extern Class_Descriptor cd_S5306C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5306C3, buf);
    S5306C3 *dp, &lv = *(dp=new (buf) S5306C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5306C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5306C3)");
    check_field_offset(lv, s5306c3f0, ABISELECT(8,4), "S5306C3.s5306c3f0");
    check_field_offset(lv, s5306c3f1, ABISELECT(24,16), "S5306C3.s5306c3f1");
    check_field_offset(lv, s5306c3f2, ABISELECT(32,24), "S5306C3.s5306c3f2");
    test_class_info(&lv, &cd_S5306C3);
    dp->~S5306C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5306C3(Test_S5306C3, "S5306C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5306C3C1Ev();
extern void _ZN7S5306C3D1Ev();
Name_Map name_map_S5306C3[] = {
  NSPAIR(_ZN7S5306C3C1Ev),
  NSPAIR(_ZN7S5306C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5306C3[];
extern void _ZN7S5306C3D1Ev();
extern void _ZN7S5306C3D0Ev();
extern void _ZN7S5306C32v6Ev();
extern void _ZN7S5306C32v7Ev();
extern void _ZN7S5306C32v8Ev();
static  VTBL_ENTRY vtc_S5306C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5306C3[0]),
  (VTBL_ENTRY)&_ZN7S5306C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5306C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S5306C3[];
extern  VTBL_ENTRY _ZTV7S5306C3[];
Class_Descriptor cd_S5306C3 = {  "S5306C3", // class name
  0,0,//no base classes
  &(vtc_S5306C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5306C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5306C3),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  S5306C2  : S5306C3 {
  void *s5306c2f0;
  virtual void  v9(); // _ZN7S5306C22v9Ev
  virtual void  v10(); // _ZN7S5306C23v10Ev
  ~S5306C2(); // tgen
  S5306C2(); // tgen
};
//SIG(-1 S5306C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5306C2 ::v9(){vfunc_called(this, "_ZN7S5306C22v9Ev");}
void  S5306C2 ::v10(){vfunc_called(this, "_ZN7S5306C23v10Ev");}
S5306C2 ::~S5306C2(){ note_dtor("S5306C2", this);} // tgen
S5306C2 ::S5306C2(){ note_ctor("S5306C2", this);} // tgen

static void Test_S5306C2()
{
  extern Class_Descriptor cd_S5306C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5306C2, buf);
    S5306C2 *dp, &lv = *(dp=new (buf) S5306C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5306C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5306C2)");
    check_base_class_offset(lv, (S5306C3*), 0, "S5306C2");
    check_field_offset(lv, s5306c2f0, ABISELECT(40,28), "S5306C2.s5306c2f0");
    test_class_info(&lv, &cd_S5306C2);
    dp->~S5306C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5306C2(Test_S5306C2, "S5306C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5306C2C1Ev();
extern void _ZN7S5306C2D1Ev();
Name_Map name_map_S5306C2[] = {
  NSPAIR(_ZN7S5306C2C1Ev),
  NSPAIR(_ZN7S5306C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5306C3;
extern VTBL_ENTRY _ZTI7S5306C3[];
extern  VTBL_ENTRY _ZTV7S5306C3[];
static Base_Class bases_S5306C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5306C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S5306C2[];
extern void _ZN7S5306C2D1Ev();
extern void _ZN7S5306C2D0Ev();
extern void _ZN7S5306C32v6Ev();
extern void _ZN7S5306C32v7Ev();
extern void _ZN7S5306C32v8Ev();
extern void _ZN7S5306C22v9Ev();
extern void _ZN7S5306C23v10Ev();
static  VTBL_ENTRY vtc_S5306C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5306C2[0]),
  (VTBL_ENTRY)&_ZN7S5306C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5306C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5306C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5306C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S5306C2[];
extern  VTBL_ENTRY _ZTV7S5306C2[];
Class_Descriptor cd_S5306C2 = {  "S5306C2", // class name
  bases_S5306C2, 1,
  &(vtc_S5306C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5306C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5306C2),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  S5306C6  {
  virtual  ~S5306C6(); // _ZN7S5306C6D1Ev
  virtual void  v11(); // _ZN7S5306C63v11Ev
  virtual void  v12(); // _ZN7S5306C63v12Ev
  virtual void  v13(); // _ZN7S5306C63v13Ev
  S5306C6(); // tgen
};
//SIG(-1 S5306C6) C1{ vd v1 v2 v3}


 S5306C6 ::~S5306C6(){ note_dtor("S5306C6", this);}
void  S5306C6 ::v11(){vfunc_called(this, "_ZN7S5306C63v11Ev");}
void  S5306C6 ::v12(){vfunc_called(this, "_ZN7S5306C63v12Ev");}
void  S5306C6 ::v13(){vfunc_called(this, "_ZN7S5306C63v13Ev");}
S5306C6 ::S5306C6(){ note_ctor("S5306C6", this);} // tgen

static void Test_S5306C6()
{
  extern Class_Descriptor cd_S5306C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5306C6, buf);
    S5306C6 *dp, &lv = *(dp=new (buf) S5306C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5306C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5306C6)");
    test_class_info(&lv, &cd_S5306C6);
    dp->~S5306C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5306C6(Test_S5306C6, "S5306C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5306C6C1Ev();
extern void _ZN7S5306C6D1Ev();
Name_Map name_map_S5306C6[] = {
  NSPAIR(_ZN7S5306C6C1Ev),
  NSPAIR(_ZN7S5306C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5306C6[];
extern void _ZN7S5306C6D1Ev();
extern void _ZN7S5306C6D0Ev();
extern void _ZN7S5306C63v11Ev();
extern void _ZN7S5306C63v12Ev();
extern void _ZN7S5306C63v13Ev();
static  VTBL_ENTRY vtc_S5306C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5306C6[0]),
  (VTBL_ENTRY)&_ZN7S5306C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5306C6D0Ev,
  (VTBL_ENTRY)&_ZN7S5306C63v11Ev,
  (VTBL_ENTRY)&_ZN7S5306C63v12Ev,
  (VTBL_ENTRY)&_ZN7S5306C63v13Ev,
};
extern VTBL_ENTRY _ZTI7S5306C6[];
extern  VTBL_ENTRY _ZTV7S5306C6[];
Class_Descriptor cd_S5306C6 = {  "S5306C6", // class name
  0,0,//no base classes
  &(vtc_S5306C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5306C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5306C6),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  S5306C7_nt  {
  __tsi64 s5306c7f0[4];
  void  mf5306c7(); // _ZN10S5306C7_nt8mf5306c7Ev
};
//SIG(-1 S5306C7_nt) C1{ m FL[4]}


void  S5306C7_nt ::mf5306c7(){}

//skip512 S5306C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5306C1  : S5306C2 , S5306C6 {
  ::S5306C7_nt s5306c1f0;
  ::S5305C9_nt s5306c1f1;
  void *s5306c1f2[2];
  ::S2366C19 s5306c1f3;
  ::S2366C10_nt s5306c1f4;
  int s5306c1f5;
  virtual void  v1(); // _ZN7S5306C12v1Ev
  virtual void  v2(); // _ZN7S5306C12v2Ev
  virtual void  v3(); // _ZN7S5306C12v3Ev
  virtual void  v4(); // _ZN7S5306C12v4Ev
  virtual void  v5(); // _ZN7S5306C12v5Ev
  ~S5306C1(); // tgen
  S5306C1(); // tgen
};
//SIG(1 S5306C1) C1{ BC2{ BC3{ vd v6 v7 v8 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v9 v10 Fp} BC6{ vd v11 v12 v13} v1 v2 v3 v4 v5 FC7{ m FL[4]} FC8{ m Fp FC9{ Fi[4]}} Fp[2] FC10{ m Fp} FC11{ m Fp} Fi}


void  S5306C1 ::v1(){vfunc_called(this, "_ZN7S5306C12v1Ev");}
void  S5306C1 ::v2(){vfunc_called(this, "_ZN7S5306C12v2Ev");}
void  S5306C1 ::v3(){vfunc_called(this, "_ZN7S5306C12v3Ev");}
void  S5306C1 ::v4(){vfunc_called(this, "_ZN7S5306C12v4Ev");}
void  S5306C1 ::v5(){vfunc_called(this, "_ZN7S5306C12v5Ev");}
S5306C1 ::~S5306C1(){ note_dtor("S5306C1", this);} // tgen
S5306C1 ::S5306C1(){ note_ctor("S5306C1", this);} // tgen

static void Test_S5306C1()
{
  extern Class_Descriptor cd_S5306C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,28)];
    init_test(&cd_S5306C1, buf);
    S5306C1 *dp, &lv = *(dp=new (buf) S5306C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,108), "sizeof(S5306C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5306C1)");
    check_base_class_offset(lv, (S5306C3*)(S5306C2*), 0, "S5306C1");
    check_base_class_offset(lv, (S5306C2*), 0, "S5306C1");
    check_base_class_offset(lv, (S5306C6*), ABISELECT(48,32), "S5306C1");
    check_field_offset(lv, s5306c1f0, ABISELECT(56,36), "S5306C1.s5306c1f0");
    check_field_offset(lv, s5306c1f1, ABISELECT(88,68), "S5306C1.s5306c1f1");
    check_field_offset(lv, s5306c1f2, ABISELECT(112,88), "S5306C1.s5306c1f2");
    check_field_offset(lv, s5306c1f3, ABISELECT(128,96), "S5306C1.s5306c1f3");
    check_field_offset(lv, s5306c1f4, ABISELECT(136,100), "S5306C1.s5306c1f4");
    check_field_offset(lv, s5306c1f5, ABISELECT(144,104), "S5306C1.s5306c1f5");
    test_class_info(&lv, &cd_S5306C1);
    dp->~S5306C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5306C1(Test_S5306C1, "S5306C1", ABISELECT(152,108));

#else // __cplusplus

extern void _ZN7S5306C1C1Ev();
extern void _ZN7S5306C1D1Ev();
Name_Map name_map_S5306C1[] = {
  NSPAIR(_ZN7S5306C1C1Ev),
  NSPAIR(_ZN7S5306C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5306C3;
extern VTBL_ENTRY _ZTI7S5306C3[];
extern  VTBL_ENTRY _ZTV7S5306C3[];
extern Class_Descriptor cd_S5306C2;
extern VTBL_ENTRY _ZTI7S5306C2[];
extern  VTBL_ENTRY _ZTV7S5306C2[];
extern Class_Descriptor cd_S5306C6;
extern VTBL_ENTRY _ZTI7S5306C6[];
extern  VTBL_ENTRY _ZTV7S5306C6[];
static Base_Class bases_S5306C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5306C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5306C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S5306C6,    ABISELECT(48,32), //bcp->offset
    14, //bcp->virtual_function_table_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 _ZTI7S5306C1[];
extern void _ZN7S5306C1D1Ev();
extern void _ZN7S5306C1D0Ev();
extern void _ZN7S5306C32v6Ev();
extern void _ZN7S5306C32v7Ev();
extern void _ZN7S5306C32v8Ev();
extern void _ZN7S5306C22v9Ev();
extern void _ZN7S5306C23v10Ev();
extern void _ZN7S5306C12v1Ev();
extern void _ZN7S5306C12v2Ev();
extern void _ZN7S5306C12v3Ev();
extern void _ZN7S5306C12v4Ev();
extern void _ZN7S5306C12v5Ev();
extern void ABISELECT(_ZThn48_N7S5306C1D1Ev,_ZThn32_N7S5306C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S5306C1D0Ev,_ZThn32_N7S5306C1D0Ev)();
extern void _ZN7S5306C63v11Ev();
extern void _ZN7S5306C63v12Ev();
extern void _ZN7S5306C63v13Ev();
static  VTBL_ENTRY vtc_S5306C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5306C1[0]),
  (VTBL_ENTRY)&_ZN7S5306C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5306C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5306C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5306C22v9Ev,
  (VTBL_ENTRY)&_ZN7S5306C23v10Ev,
  (VTBL_ENTRY)&_ZN7S5306C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5306C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5306C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5306C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5306C12v5Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S5306C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S5306C1D1Ev,_ZThn32_N7S5306C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S5306C1D0Ev,_ZThn32_N7S5306C1D0Ev),
  (VTBL_ENTRY)&_ZN7S5306C63v11Ev,
  (VTBL_ENTRY)&_ZN7S5306C63v12Ev,
  (VTBL_ENTRY)&_ZN7S5306C63v13Ev,
};
extern VTBL_ENTRY _ZTI7S5306C1[];
extern  VTBL_ENTRY _ZTV7S5306C1[];
Class_Descriptor cd_S5306C1 = {  "S5306C1", // class name
  bases_S5306C1, 3,
  &(vtc_S5306C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,108), // object size
  NSPAIRA(_ZTI7S5306C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5306C1),21, //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  S4731C3  {
  ::S4473C12_nt s4731c3f0;
  int s4731c3f1[2];
  char s4731c3f2;
  virtual  ~S4731C3(); // _ZN7S4731C3D1Ev
  virtual void  v3(); // _ZN7S4731C32v3Ev
  virtual void  v4(); // _ZN7S4731C32v4Ev
  virtual void  v5(); // _ZN7S4731C32v5Ev
  S4731C3(); // tgen
};
//SIG(-1 S4731C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4731C3 ::~S4731C3(){ note_dtor("S4731C3", this);}
void  S4731C3 ::v3(){vfunc_called(this, "_ZN7S4731C32v3Ev");}
void  S4731C3 ::v4(){vfunc_called(this, "_ZN7S4731C32v4Ev");}
void  S4731C3 ::v5(){vfunc_called(this, "_ZN7S4731C32v5Ev");}
S4731C3 ::S4731C3(){ note_ctor("S4731C3", this);} // tgen

static void Test_S4731C3()
{
  extern Class_Descriptor cd_S4731C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4731C3, buf);
    S4731C3 *dp, &lv = *(dp=new (buf) S4731C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4731C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4731C3)");
    check_field_offset(lv, s4731c3f0, ABISELECT(8,4), "S4731C3.s4731c3f0");
    check_field_offset(lv, s4731c3f1, ABISELECT(24,16), "S4731C3.s4731c3f1");
    check_field_offset(lv, s4731c3f2, ABISELECT(32,24), "S4731C3.s4731c3f2");
    test_class_info(&lv, &cd_S4731C3);
    dp->~S4731C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4731C3(Test_S4731C3, "S4731C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4731C3C1Ev();
extern void _ZN7S4731C3D1Ev();
Name_Map name_map_S4731C3[] = {
  NSPAIR(_ZN7S4731C3C1Ev),
  NSPAIR(_ZN7S4731C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4731C3[];
extern void _ZN7S4731C3D1Ev();
extern void _ZN7S4731C3D0Ev();
extern void _ZN7S4731C32v3Ev();
extern void _ZN7S4731C32v4Ev();
extern void _ZN7S4731C32v5Ev();
static  VTBL_ENTRY vtc_S4731C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4731C3[0]),
  (VTBL_ENTRY)&_ZN7S4731C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4731C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4731C3[];
extern  VTBL_ENTRY _ZTV7S4731C3[];
Class_Descriptor cd_S4731C3 = {  "S4731C3", // class name
  0,0,//no base classes
  &(vtc_S4731C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4731C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4731C3),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  S4731C2  : S4731C3 {
  void *s4731c2f0;
  virtual void  v6(); // _ZN7S4731C22v6Ev
  virtual void  v7(); // _ZN7S4731C22v7Ev
  ~S4731C2(); // tgen
  S4731C2(); // tgen
};
//SIG(-1 S4731C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4731C2 ::v6(){vfunc_called(this, "_ZN7S4731C22v6Ev");}
void  S4731C2 ::v7(){vfunc_called(this, "_ZN7S4731C22v7Ev");}
S4731C2 ::~S4731C2(){ note_dtor("S4731C2", this);} // tgen
S4731C2 ::S4731C2(){ note_ctor("S4731C2", this);} // tgen

static void Test_S4731C2()
{
  extern Class_Descriptor cd_S4731C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4731C2, buf);
    S4731C2 *dp, &lv = *(dp=new (buf) S4731C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4731C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4731C2)");
    check_base_class_offset(lv, (S4731C3*), 0, "S4731C2");
    check_field_offset(lv, s4731c2f0, ABISELECT(40,28), "S4731C2.s4731c2f0");
    test_class_info(&lv, &cd_S4731C2);
    dp->~S4731C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4731C2(Test_S4731C2, "S4731C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4731C2C1Ev();
extern void _ZN7S4731C2D1Ev();
Name_Map name_map_S4731C2[] = {
  NSPAIR(_ZN7S4731C2C1Ev),
  NSPAIR(_ZN7S4731C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4731C3;
extern VTBL_ENTRY _ZTI7S4731C3[];
extern  VTBL_ENTRY _ZTV7S4731C3[];
static Base_Class bases_S4731C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4731C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4731C2[];
extern void _ZN7S4731C2D1Ev();
extern void _ZN7S4731C2D0Ev();
extern void _ZN7S4731C32v3Ev();
extern void _ZN7S4731C32v4Ev();
extern void _ZN7S4731C32v5Ev();
extern void _ZN7S4731C22v6Ev();
extern void _ZN7S4731C22v7Ev();
static  VTBL_ENTRY vtc_S4731C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4731C2[0]),
  (VTBL_ENTRY)&_ZN7S4731C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4731C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4731C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4731C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4731C2[];
extern  VTBL_ENTRY _ZTV7S4731C2[];
Class_Descriptor cd_S4731C2 = {  "S4731C2", // class name
  bases_S4731C2, 1,
  &(vtc_S4731C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4731C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4731C2),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  S4731C10  {
  int s4731c10f0[2];
  ::S4473C12_nt s4731c10f1;
  void  mf4731c10(); // _ZN8S4731C109mf4731c10Ev
};
//SIG(-1 S4731C10) C1{ m Fi[2] FC2{ m Fp Fi FC3{ m}}}


void  S4731C10 ::mf4731c10(){}

static void Test_S4731C10()
{
  {
    init_simple_test("S4731C10");
    S4731C10 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S4731C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4731C10)");
    check_field_offset(lv, s4731c10f0, 0, "S4731C10.s4731c10f0");
    check_field_offset(lv, s4731c10f1, 8, "S4731C10.s4731c10f1");
  }
}
static Arrange_To_Call_Me vS4731C10(Test_S4731C10, "S4731C10", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4731C1  : S4731C2 {
  ::S2173C10_nt s4731c1f0;
  ::S5305C9_nt s4731c1f1;
  ::S4731C10 s4731c1f2;
  int s4731c1f3;
  void *s4731c1f4[2];
  ::S2173C14 s4731c1f5;
  virtual void  v1(); // _ZN7S4731C12v1Ev
  virtual void  v2(); // _ZN7S4731C12v2Ev
  ~S4731C1(); // tgen
  S4731C1(); // tgen
};
//SIG(1 S4731C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} v1 v2 FC6{ m FC7{ FL[4]}} FC8{ m Fp FC9{ Fi[4]}} FC10{ m Fi[2] FC4} Fi Fp[2] FC11{ m Fp Fi[2] FC12{ m}}}


void  S4731C1 ::v1(){vfunc_called(this, "_ZN7S4731C12v1Ev");}
void  S4731C1 ::v2(){vfunc_called(this, "_ZN7S4731C12v2Ev");}
S4731C1 ::~S4731C1(){ note_dtor("S4731C1", this);} // tgen
S4731C1 ::S4731C1(){ note_ctor("S4731C1", this);} // tgen

static void Test_S4731C1()
{
  extern Class_Descriptor cd_S4731C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,34)];
    init_test(&cd_S4731C1, buf);
    S4731C1 *dp, &lv = *(dp=new (buf) S4731C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,132), "sizeof(S4731C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4731C1)");
    check_base_class_offset(lv, (S4731C3*)(S4731C2*), 0, "S4731C1");
    check_base_class_offset(lv, (S4731C2*), 0, "S4731C1");
    check_field_offset(lv, s4731c1f0, ABISELECT(48,32), "S4731C1.s4731c1f0");
    check_field_offset(lv, s4731c1f1, ABISELECT(80,64), "S4731C1.s4731c1f1");
    check_field_offset(lv, s4731c1f2, ABISELECT(104,84), "S4731C1.s4731c1f2");
    check_field_offset(lv, s4731c1f3, ABISELECT(128,104), "S4731C1.s4731c1f3");
    check_field_offset(lv, s4731c1f4, ABISELECT(136,108), "S4731C1.s4731c1f4");
    check_field_offset(lv, s4731c1f5, ABISELECT(152,116), "S4731C1.s4731c1f5");
    test_class_info(&lv, &cd_S4731C1);
    dp->~S4731C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4731C1(Test_S4731C1, "S4731C1", ABISELECT(176,132));

#else // __cplusplus

extern void _ZN7S4731C1C1Ev();
extern void _ZN7S4731C1D1Ev();
Name_Map name_map_S4731C1[] = {
  NSPAIR(_ZN7S4731C1C1Ev),
  NSPAIR(_ZN7S4731C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4731C3;
extern VTBL_ENTRY _ZTI7S4731C3[];
extern  VTBL_ENTRY _ZTV7S4731C3[];
extern Class_Descriptor cd_S4731C2;
extern VTBL_ENTRY _ZTI7S4731C2[];
extern  VTBL_ENTRY _ZTV7S4731C2[];
static Base_Class bases_S4731C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4731C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4731C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4731C1[];
extern void _ZN7S4731C1D1Ev();
extern void _ZN7S4731C1D0Ev();
extern void _ZN7S4731C32v3Ev();
extern void _ZN7S4731C32v4Ev();
extern void _ZN7S4731C32v5Ev();
extern void _ZN7S4731C22v6Ev();
extern void _ZN7S4731C22v7Ev();
extern void _ZN7S4731C12v1Ev();
extern void _ZN7S4731C12v2Ev();
static  VTBL_ENTRY vtc_S4731C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4731C1[0]),
  (VTBL_ENTRY)&_ZN7S4731C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4731C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4731C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4731C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4731C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4731C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4731C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4731C1[];
extern  VTBL_ENTRY _ZTV7S4731C1[];
Class_Descriptor cd_S4731C1 = {  "S4731C1", // class name
  bases_S4731C1, 2,
  &(vtc_S4731C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,132), // object size
  NSPAIRA(_ZTI7S4731C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4731C1),11, //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  S1334C4  {
  int s1334c4f0;
  virtual void  v2(); // _ZN7S1334C42v2Ev
  ~S1334C4(); // tgen
  S1334C4(); // tgen
};
//SIG(-1 S1334C4) C1{ v1 Fi}


void  S1334C4 ::v2(){vfunc_called(this, "_ZN7S1334C42v2Ev");}
S1334C4 ::~S1334C4(){ note_dtor("S1334C4", this);} // tgen
S1334C4 ::S1334C4(){ note_ctor("S1334C4", this);} // tgen

static void Test_S1334C4()
{
  extern Class_Descriptor cd_S1334C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1334C4, buf);
    S1334C4 *dp, &lv = *(dp=new (buf) S1334C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1334C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1334C4)");
    check_field_offset(lv, s1334c4f0, ABISELECT(8,4), "S1334C4.s1334c4f0");
    test_class_info(&lv, &cd_S1334C4);
    dp->~S1334C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1334C4(Test_S1334C4, "S1334C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1334C4C1Ev();
extern void _ZN7S1334C4D1Ev();
Name_Map name_map_S1334C4[] = {
  NSPAIR(_ZN7S1334C4C1Ev),
  NSPAIR(_ZN7S1334C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1334C4[];
extern void _ZN7S1334C42v2Ev();
static  VTBL_ENTRY vtc_S1334C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C4[0]),
  (VTBL_ENTRY)&_ZN7S1334C42v2Ev,
};
extern VTBL_ENTRY _ZTI7S1334C4[];
extern  VTBL_ENTRY _ZTV7S1334C4[];
Class_Descriptor cd_S1334C4 = {  "S1334C4", // class name
  0,0,//no base classes
  &(vtc_S1334C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1334C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1334C4),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  S1334C5  {
  short s1334c5f0:16;
  __tsi64 s1334c5f1;
  void *s1334c5f2[8];
  virtual void  v3(); // _ZN7S1334C52v3Ev
  virtual void  v4(); // _ZN7S1334C52v4Ev
  ~S1334C5(); // tgen
  S1334C5(); // tgen
};
//SIG(-1 S1334C5) C1{ v1 v2 Fs:16 FL Fp[8]}


void  S1334C5 ::v3(){vfunc_called(this, "_ZN7S1334C52v3Ev");}
void  S1334C5 ::v4(){vfunc_called(this, "_ZN7S1334C52v4Ev");}
S1334C5 ::~S1334C5(){ note_dtor("S1334C5", this);} // tgen
S1334C5 ::S1334C5(){ note_ctor("S1334C5", this);} // tgen

static void Test_S1334C5()
{
  extern Class_Descriptor cd_S1334C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,13)];
    init_test(&cd_S1334C5, buf);
    S1334C5 *dp, &lv = *(dp=new (buf) S1334C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S1334C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1334C5)");
    set_bf_and_test(lv, s1334c5f0, ABISELECT(8,4), 0, 16, 1, "S1334C5");
    set_bf_and_test(lv, s1334c5f0, ABISELECT(8,4), 0, 16, hide_sll(1LL<<15), "S1334C5");
    check_field_offset(lv, s1334c5f1, ABISELECT(16,8), "S1334C5.s1334c5f1");
    check_field_offset(lv, s1334c5f2, ABISELECT(24,16), "S1334C5.s1334c5f2");
    test_class_info(&lv, &cd_S1334C5);
    dp->~S1334C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1334C5(Test_S1334C5, "S1334C5", ABISELECT(88,48));

#else // __cplusplus

extern void _ZN7S1334C5C1Ev();
extern void _ZN7S1334C5D1Ev();
Name_Map name_map_S1334C5[] = {
  NSPAIR(_ZN7S1334C5C1Ev),
  NSPAIR(_ZN7S1334C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1334C5[];
extern void _ZN7S1334C52v3Ev();
extern void _ZN7S1334C52v4Ev();
static  VTBL_ENTRY vtc_S1334C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C5[0]),
  (VTBL_ENTRY)&_ZN7S1334C52v3Ev,
  (VTBL_ENTRY)&_ZN7S1334C52v4Ev,
};
extern VTBL_ENTRY _ZTI7S1334C5[];
extern  VTBL_ENTRY _ZTV7S1334C5[];
Class_Descriptor cd_S1334C5 = {  "S1334C5", // class name
  0,0,//no base classes
  &(vtc_S1334C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,48), // object size
  NSPAIRA(_ZTI7S1334C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1334C5),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  S1334C6  {
  virtual void  v5(); // _ZN7S1334C62v5Ev
  ~S1334C6(); // tgen
  S1334C6(); // tgen
};
//SIG(-1 S1334C6) C1{ v1}


void  S1334C6 ::v5(){vfunc_called(this, "_ZN7S1334C62v5Ev");}
S1334C6 ::~S1334C6(){ note_dtor("S1334C6", this);} // tgen
S1334C6 ::S1334C6(){ note_ctor("S1334C6", this);} // tgen

static void Test_S1334C6()
{
  extern Class_Descriptor cd_S1334C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1334C6, buf);
    S1334C6 *dp, &lv = *(dp=new (buf) S1334C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1334C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1334C6)");
    test_class_info(&lv, &cd_S1334C6);
    dp->~S1334C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1334C6(Test_S1334C6, "S1334C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1334C6C1Ev();
extern void _ZN7S1334C6D1Ev();
Name_Map name_map_S1334C6[] = {
  NSPAIR(_ZN7S1334C6C1Ev),
  NSPAIR(_ZN7S1334C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1334C6[];
extern void _ZN7S1334C62v5Ev();
static  VTBL_ENTRY vtc_S1334C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C6[0]),
  (VTBL_ENTRY)&_ZN7S1334C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S1334C6[];
extern  VTBL_ENTRY _ZTV7S1334C6[];
Class_Descriptor cd_S1334C6 = {  "S1334C6", // class name
  0,0,//no base classes
  &(vtc_S1334C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1334C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1334C6),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  S1334C8  {
  void *s1334c8f0[4];
  virtual void  v6(); // _ZN7S1334C82v6Ev
  virtual void  v7(); // _ZN7S1334C82v7Ev
  virtual void  v8(); // _ZN7S1334C82v8Ev
  virtual void  v9(); // _ZN7S1334C82v9Ev
  virtual void  v10(); // _ZN7S1334C83v10Ev
  virtual void  v11(); // _ZN7S1334C83v11Ev
  ~S1334C8(); // tgen
  S1334C8(); // tgen
};
//SIG(-1 S1334C8) C1{ v1 v2 v3 v4 v5 v6 Fp[4]}


void  S1334C8 ::v6(){vfunc_called(this, "_ZN7S1334C82v6Ev");}
void  S1334C8 ::v7(){vfunc_called(this, "_ZN7S1334C82v7Ev");}
void  S1334C8 ::v8(){vfunc_called(this, "_ZN7S1334C82v8Ev");}
void  S1334C8 ::v9(){vfunc_called(this, "_ZN7S1334C82v9Ev");}
void  S1334C8 ::v10(){vfunc_called(this, "_ZN7S1334C83v10Ev");}
void  S1334C8 ::v11(){vfunc_called(this, "_ZN7S1334C83v11Ev");}
S1334C8 ::~S1334C8(){ note_dtor("S1334C8", this);} // tgen
S1334C8 ::S1334C8(){ note_ctor("S1334C8", this);} // tgen

static void Test_S1334C8()
{
  extern Class_Descriptor cd_S1334C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S1334C8, buf);
    S1334C8 *dp, &lv = *(dp=new (buf) S1334C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S1334C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1334C8)");
    check_field_offset(lv, s1334c8f0, ABISELECT(8,4), "S1334C8.s1334c8f0");
    test_class_info(&lv, &cd_S1334C8);
    dp->~S1334C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1334C8(Test_S1334C8, "S1334C8", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S1334C8C1Ev();
extern void _ZN7S1334C8D1Ev();
Name_Map name_map_S1334C8[] = {
  NSPAIR(_ZN7S1334C8C1Ev),
  NSPAIR(_ZN7S1334C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1334C8[];
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
static  VTBL_ENTRY vtc_S1334C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C8[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
};
extern VTBL_ENTRY _ZTI7S1334C8[];
extern  VTBL_ENTRY _ZTV7S1334C8[];
Class_Descriptor cd_S1334C8 = {  "S1334C8", // class name
  0,0,//no base classes
  &(vtc_S1334C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S1334C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1334C8),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  S1334C7  : S1334C8 {
  __tsi64 s1334c7f0;
  virtual  ~S1334C7(); // _ZN7S1334C7D1Ev
  virtual void  v12(); // _ZN7S1334C73v12Ev
  virtual void  v13(); // _ZN7S1334C73v13Ev
  S1334C7(); // tgen
};
//SIG(-1 S1334C7) C1{ BC2{ v3 v4 v5 v6 v7 v8 Fp[4]} vd v1 v2 FL}


 S1334C7 ::~S1334C7(){ note_dtor("S1334C7", this);}
void  S1334C7 ::v12(){vfunc_called(this, "_ZN7S1334C73v12Ev");}
void  S1334C7 ::v13(){vfunc_called(this, "_ZN7S1334C73v13Ev");}
S1334C7 ::S1334C7(){ note_ctor("S1334C7", this);} // tgen

static void Test_S1334C7()
{
  extern Class_Descriptor cd_S1334C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1334C7, buf);
    S1334C7 *dp, &lv = *(dp=new (buf) S1334C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1334C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1334C7)");
    check_base_class_offset(lv, (S1334C8*), 0, "S1334C7");
    check_field_offset(lv, s1334c7f0, ABISELECT(40,20), "S1334C7.s1334c7f0");
    test_class_info(&lv, &cd_S1334C7);
    dp->~S1334C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1334C7(Test_S1334C7, "S1334C7", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1334C7C1Ev();
extern void _ZN7S1334C7D1Ev();
Name_Map name_map_S1334C7[] = {
  NSPAIR(_ZN7S1334C7C1Ev),
  NSPAIR(_ZN7S1334C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1334C8;
extern VTBL_ENTRY _ZTI7S1334C8[];
extern  VTBL_ENTRY _ZTV7S1334C8[];
static Base_Class bases_S1334C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1334C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S1334C7[];
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void _ZN7S1334C7D1Ev();
extern void _ZN7S1334C7D0Ev();
extern void _ZN7S1334C73v12Ev();
extern void _ZN7S1334C73v13Ev();
static  VTBL_ENTRY vtc_S1334C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C7[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  (VTBL_ENTRY)&_ZN7S1334C7D1Ev,
  (VTBL_ENTRY)&_ZN7S1334C7D0Ev,
  (VTBL_ENTRY)&_ZN7S1334C73v12Ev,
  (VTBL_ENTRY)&_ZN7S1334C73v13Ev,
};
extern VTBL_ENTRY _ZTI7S1334C7[];
extern  VTBL_ENTRY _ZTV7S1334C7[];
Class_Descriptor cd_S1334C7 = {  "S1334C7", // class name
  bases_S1334C7, 1,
  &(vtc_S1334C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1334C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1334C7),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  S1334C3  : S1334C4 , S1334C5 , S1334C6 , virtual S1334C7 , S1334C8 {
  int s1334c3f0;
  virtual  ~S1334C3(); // _ZN7S1334C3D2Ev
  virtual void  v14(); // _ZN7S1334C33v14Ev
  virtual void  v15(); // _ZN7S1334C33v15Ev
  virtual void  v16(); // _ZN7S1334C33v16Ev
  S1334C3(); // tgen
};
//SIG(-1 S1334C3) C1{ BC2{ v4 Fi} BC3{ v5 v6 Fs:16 FL Fp[8]} BC4{ v7} VBC5{ BC6{ v8 v9 v10 v11 v12 v13 Fp[4]} vd v14 v15 FL} BC6 vd v1 v2 v3 Fi}


 S1334C3 ::~S1334C3(){ note_dtor("S1334C3", this);}
void  S1334C3 ::v14(){vfunc_called(this, "_ZN7S1334C33v14Ev");}
void  S1334C3 ::v15(){vfunc_called(this, "_ZN7S1334C33v15Ev");}
void  S1334C3 ::v16(){vfunc_called(this, "_ZN7S1334C33v16Ev");}
S1334C3 ::S1334C3(){ note_ctor("S1334C3", this);} // tgen

static void Test_S1334C3()
{
  extern Class_Descriptor cd_S1334C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,29)];
    init_test(&cd_S1334C3, buf);
    S1334C3 *dp, &lv = *(dp=new (buf) S1334C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,112), "sizeof(S1334C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1334C3)");
    check_base_class_offset(lv, (S1334C4*), 0, "S1334C3");
    check_base_class_offset(lv, (S1334C5*), ABISELECT(16,8), "S1334C3");
    check_base_class_offset(lv, (S1334C6*), ABISELECT(104,56), "S1334C3");
    check_base_class_offset(lv, (S1334C8*)(S1334C7*), ABISELECT(160,84), "S1334C3");
    check_base_class_offset(lv, (S1334C7*), ABISELECT(160,84), "S1334C3");
    /*is_ambiguous_... S1334C3::S1334C8 */ AMB_check_base_class_offset(lv, (S1334C8*), ABISELECT(112,60), "S1334C3");
    check_field_offset(lv, s1334c3f0, ABISELECT(152,80), "S1334C3.s1334c3f0");
    test_class_info(&lv, &cd_S1334C3);
    dp->~S1334C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1334C3(Test_S1334C3, "S1334C3", ABISELECT(208,112));

#else // __cplusplus

extern void _ZN7S1334C3C1Ev();
extern void _ZN7S1334C3D2Ev();
Name_Map name_map_S1334C3[] = {
  NSPAIR(_ZN7S1334C3C1Ev),
  NSPAIR(_ZN7S1334C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1334C4;
extern VTBL_ENTRY _ZTI7S1334C4[];
extern  VTBL_ENTRY _ZTV7S1334C4[];
extern Class_Descriptor cd_S1334C5;
extern VTBL_ENTRY _ZTI7S1334C5[];
extern  VTBL_ENTRY _ZTV7S1334C5[];
extern Class_Descriptor cd_S1334C6;
extern VTBL_ENTRY _ZTI7S1334C6[];
extern  VTBL_ENTRY _ZTV7S1334C6[];
extern Class_Descriptor cd_S1334C8;
extern VTBL_ENTRY _ZTI7S1334C8[];
extern  VTBL_ENTRY _ZTV7S1334C8[];
extern Class_Descriptor cd_S1334C7;
extern VTBL_ENTRY _ZTI7S1334C7[];
extern  VTBL_ENTRY _ZTV7S1334C7[];
extern Class_Descriptor cd_S1334C8;
extern VTBL_ENTRY _ZTI7S1334C8[];
extern  VTBL_ENTRY _ZTV7S1334C8[];
static Base_Class bases_S1334C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1334C5,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_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_S1334C6,    ABISELECT(104,56), //bcp->offset
    13, //bcp->virtual_function_table_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_S1334C8,    ABISELECT(160,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1334C7,    ABISELECT(160,84), //bcp->offset
    24, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S1334C8,    ABISELECT(112,60), //bcp->offset
    16, //bcp->virtual_function_table_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 _ZTI7S1334C3[];
extern void _ZN7S1334C42v2Ev();
extern void _ZN7S1334C3D1Ev();
extern void _ZN7S1334C3D0Ev();
extern void _ZN7S1334C33v14Ev();
extern void _ZN7S1334C33v15Ev();
extern void _ZN7S1334C33v16Ev();
extern void _ZN7S1334C52v3Ev();
extern void _ZN7S1334C52v4Ev();
extern void _ZN7S1334C62v5Ev();
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev)();
extern void ABISELECT(_ZThn160_N7S1334C3D1Ev,_ZThn84_N7S1334C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev)();
extern void ABISELECT(_ZThn160_N7S1334C3D0Ev,_ZThn84_N7S1334C3D0Ev)() __attribute__((weak));
extern void _ZN7S1334C73v12Ev();
extern void _ZN7S1334C73v13Ev();
static  VTBL_ENTRY vtc_S1334C3[] = {
  ABISELECT(160,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1334C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1334C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v16Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C52v3Ev,
  (VTBL_ENTRY)&_ZN7S1334C52v4Ev,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C62v5Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  0,
  0,
  ABISELECT(-160,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1334C73v12Ev,
  (VTBL_ENTRY)&_ZN7S1334C73v13Ev,
};
extern VTBL_ENTRY _ZTV7S1334C3[];
static  VTT_ENTRY vtt_S1334C3[] = {
  {&(_ZTV7S1334C3[3]),  3,45},
  {&(_ZTV7S1334C3[35]),  35,45},
};
extern VTBL_ENTRY _ZTI7S1334C3[];
extern  VTBL_ENTRY _ZTV7S1334C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1334C3[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S1334C3D0Ev,_ZThn84_N7S1334C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N7S1334C3D1Ev,_ZThn84_N7S1334C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1334C3 = {  "S1334C3", // class name
  bases_S1334C3, 6,
  &(vtc_S1334C3[0]), // expected_vtbl_contents
  &(vtt_S1334C3[0]), // expected_vtt_contents
  ABISELECT(208,112), // object size
  NSPAIRA(_ZTI7S1334C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S1334C3),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1334C3),2, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1334C2  : S1334C3 {
  int s1334c2f0[7];
  virtual void  v17(); // _ZN7S1334C23v17Ev
  virtual void  v18(); // _ZN7S1334C23v18Ev
  virtual void  v19(); // _ZN7S1334C23v19Ev
  virtual void  v20(); // _ZN7S1334C23v20Ev
  ~S1334C2(); // tgen
  S1334C2(); // tgen
};
//SIG(-1 S1334C2) C1{ BC2{ BC3{ v5 Fi} BC4{ v6 v7 Fs:16 FL Fp[8]} BC5{ v8} VBC6{ BC7{ v9 v10 v11 v12 v13 v14 Fp[4]} vd v15 v16 FL} BC7 vd v17 v18 v19 Fi} v1 v2 v3 v4 Fi[7]}


void  S1334C2 ::v17(){vfunc_called(this, "_ZN7S1334C23v17Ev");}
void  S1334C2 ::v18(){vfunc_called(this, "_ZN7S1334C23v18Ev");}
void  S1334C2 ::v19(){vfunc_called(this, "_ZN7S1334C23v19Ev");}
void  S1334C2 ::v20(){vfunc_called(this, "_ZN7S1334C23v20Ev");}
S1334C2 ::~S1334C2(){ note_dtor("S1334C2", this);} // tgen
S1334C2 ::S1334C2(){ note_ctor("S1334C2", this);} // tgen

static void Test_S1334C2()
{
  extern Class_Descriptor cd_S1334C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,36)];
    init_test(&cd_S1334C2, buf);
    S1334C2 *dp, &lv = *(dp=new (buf) S1334C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,140), "sizeof(S1334C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1334C2)");
    check_base_class_offset(lv, (S1334C4*)(S1334C3*), 0, "S1334C2");
    check_base_class_offset(lv, (S1334C5*)(S1334C3*), ABISELECT(16,8), "S1334C2");
    check_base_class_offset(lv, (S1334C6*)(S1334C3*), ABISELECT(104,56), "S1334C2");
    check_base_class_offset(lv, (S1334C8*)(S1334C7*), ABISELECT(184,112), "S1334C2");
    check_base_class_offset(lv, (S1334C7*)(S1334C3*), ABISELECT(184,112), "S1334C2");
    /*is_ambiguous_... S1334C3::S1334C8 */ AMB_check_base_class_offset(lv, (S1334C8*)(S1334C3*), ABISELECT(112,60), "S1334C2");
    check_base_class_offset(lv, (S1334C3*), 0, "S1334C2");
    check_field_offset(lv, s1334c2f0, ABISELECT(156,84), "S1334C2.s1334c2f0");
    test_class_info(&lv, &cd_S1334C2);
    dp->~S1334C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1334C2(Test_S1334C2, "S1334C2", ABISELECT(232,140));

#else // __cplusplus

extern void _ZN7S1334C2C1Ev();
extern void _ZN7S1334C2D1Ev();
Name_Map name_map_S1334C2[] = {
  NSPAIR(_ZN7S1334C2C1Ev),
  NSPAIR(_ZN7S1334C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1334C4;
extern VTBL_ENTRY _ZTI7S1334C4[];
extern  VTBL_ENTRY _ZTV7S1334C4[];
extern Class_Descriptor cd_S1334C5;
extern VTBL_ENTRY _ZTI7S1334C5[];
extern  VTBL_ENTRY _ZTV7S1334C5[];
extern Class_Descriptor cd_S1334C6;
extern VTBL_ENTRY _ZTI7S1334C6[];
extern  VTBL_ENTRY _ZTV7S1334C6[];
extern Class_Descriptor cd_S1334C8;
extern VTBL_ENTRY _ZTI7S1334C8[];
extern  VTBL_ENTRY _ZTV7S1334C8[];
extern Class_Descriptor cd_S1334C7;
extern VTBL_ENTRY _ZTI7S1334C7[];
extern  VTBL_ENTRY _ZTV7S1334C7[];
extern Class_Descriptor cd_S1334C8;
extern VTBL_ENTRY _ZTI7S1334C8[];
extern  VTBL_ENTRY _ZTV7S1334C8[];
extern Class_Descriptor cd_S1334C3;
extern VTBL_ENTRY _ZTI7S1334C3[];
extern  VTBL_ENTRY _ZTV7S1334C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1334C3[];
static Base_Class bases_S1334C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S1334C5,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_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_S1334C6,    ABISELECT(104,56), //bcp->offset
    17, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S1334C8,    ABISELECT(184,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
    4, //immediately_derived
  0, 0},
  {&cd_S1334C7,    ABISELECT(184,112), //bcp->offset
    28, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1334C8,    ABISELECT(112,60), //bcp->offset
    20, //bcp->virtual_function_table_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_S1334C3,    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 _ZTI7S1334C2[];
extern void _ZN7S1334C42v2Ev();
extern void _ZN7S1334C2D1Ev();
extern void _ZN7S1334C2D0Ev();
extern void _ZN7S1334C33v14Ev();
extern void _ZN7S1334C33v15Ev();
extern void _ZN7S1334C33v16Ev();
extern void _ZN7S1334C23v17Ev();
extern void _ZN7S1334C23v18Ev();
extern void _ZN7S1334C23v19Ev();
extern void _ZN7S1334C23v20Ev();
extern void _ZN7S1334C52v3Ev();
extern void _ZN7S1334C52v4Ev();
extern void _ZN7S1334C62v5Ev();
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S1334C2D1Ev,_ZTv0_n36_N7S1334C2D1Ev)();
extern void ABISELECT(_ZThn184_N7S1334C2D1Ev,_ZThn112_N7S1334C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1334C2D0Ev,_ZTv0_n36_N7S1334C2D0Ev)();
extern void ABISELECT(_ZThn184_N7S1334C2D0Ev,_ZThn112_N7S1334C2D0Ev)() __attribute__((weak));
extern void _ZN7S1334C73v12Ev();
extern void _ZN7S1334C73v13Ev();
static  VTBL_ENTRY vtc_S1334C2[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C2[0]),
  (VTBL_ENTRY)&_ZN7S1334C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1334C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1334C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v20Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1334C2[0]),
  (VTBL_ENTRY)&_ZN7S1334C52v3Ev,
  (VTBL_ENTRY)&_ZN7S1334C52v4Ev,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S1334C2[0]),
  (VTBL_ENTRY)&_ZN7S1334C62v5Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S1334C2[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S1334C2[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C2D1Ev,_ZTv0_n36_N7S1334C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C2D0Ev,_ZTv0_n36_N7S1334C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1334C73v12Ev,
  (VTBL_ENTRY)&_ZN7S1334C73v13Ev,
};
extern VTBL_ENTRY _ZTV7S1334C2[];
extern void _ZN7S1334C42v2Ev();
extern void _ZN7S1334C3D1Ev();
extern void _ZN7S1334C3D0Ev();
extern void _ZN7S1334C33v14Ev();
extern void _ZN7S1334C33v15Ev();
extern void _ZN7S1334C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1334C3__7S1334C2[] = {
  ABISELECT(184,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1334C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1334C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v16Ev,
};
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev)();
extern void ABISELECT(_ZThn184_N7S1334C3D1Ev,_ZThn112_N7S1334C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev)();
extern void ABISELECT(_ZThn184_N7S1334C3D0Ev,_ZThn112_N7S1334C3D0Ev)() __attribute__((weak));
extern void _ZN7S1334C73v12Ev();
extern void _ZN7S1334C73v13Ev();
static  VTBL_ENTRY _tg__ZTV7S1334C7__7S1334C3__7S1334C2[] = {
  0,
  0,
  ABISELECT(-184,-112),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1334C73v12Ev,
  (VTBL_ENTRY)&_ZN7S1334C73v13Ev,
};
static  VTT_ENTRY vtt_S1334C2[] = {
  {&(_ZTV7S1334C2[3]),  3,49},
  {&(_tg__ZTV7S1334C3__7S1334C2[3]),  3,9},
  {&(_tg__ZTV7S1334C7__7S1334C3__7S1334C2[11]),  11,21},
  {&(_ZTV7S1334C2[39]),  39,49},
};
extern VTBL_ENTRY _ZTI7S1334C2[];
extern  VTBL_ENTRY _ZTV7S1334C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1334C2[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1334C3D0Ev,_ZThn112_N7S1334C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1334C3D1Ev,_ZThn112_N7S1334C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C2D0Ev,_ZTv0_n36_N7S1334C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1334C2D0Ev,_ZThn112_N7S1334C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C2D1Ev,_ZTv0_n36_N7S1334C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S1334C2D1Ev,_ZThn112_N7S1334C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1334C2 = {  "S1334C2", // class name
  bases_S1334C2, 7,
  &(vtc_S1334C2[0]), // expected_vtbl_contents
  &(vtt_S1334C2[0]), // expected_vtt_contents
  ABISELECT(232,140), // object size
  NSPAIRA(_ZTI7S1334C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1334C2),49, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1334C2),4, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1334C1  : S1334C2 , S1334C6 {
  virtual void  v1(); // _ZN7S1334C12v1Ev
  ~S1334C1(); // tgen
  S1334C1(); // tgen
};
//SIG(1 S1334C1) C1{ BC2{ BC3{ BC4{ v2 Fi} BC5{ v3 v4 Fs:16 FL Fp[8]} BC6{ v5} VBC7{ BC8{ v6 v7 v8 v9 v10 v11 Fp[4]} vd v12 v13 FL} BC8 vd v14 v15 v16 Fi} v17 v18 v19 v20 Fi[7]} BC6 v1}


void  S1334C1 ::v1(){vfunc_called(this, "_ZN7S1334C12v1Ev");}
S1334C1 ::~S1334C1(){ note_dtor("S1334C1", this);} // tgen
S1334C1 ::S1334C1(){ note_ctor("S1334C1", this);} // tgen

static void Test_S1334C1()
{
  extern Class_Descriptor cd_S1334C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,37)];
    init_test(&cd_S1334C1, buf);
    S1334C1 *dp, &lv = *(dp=new (buf) S1334C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,144), "sizeof(S1334C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1334C1)");
    check_base_class_offset(lv, (S1334C4*)(S1334C3*)(S1334C2*), 0, "S1334C1");
    check_base_class_offset(lv, (S1334C5*)(S1334C3*)(S1334C2*), ABISELECT(16,8), "S1334C1");
    check_base_class_offset(lv, (S1334C6*)(S1334C3*)(S1334C2*), ABISELECT(104,56), "S1334C1");
    check_base_class_offset(lv, (S1334C8*)(S1334C7*), ABISELECT(192,116), "S1334C1");
    check_base_class_offset(lv, (S1334C7*)(S1334C3*)(S1334C2*), ABISELECT(192,116), "S1334C1");
    /*is_ambiguous_... S1334C3::S1334C8 */ AMB_check_base_class_offset(lv, (S1334C8*)(S1334C3*)(S1334C2*), ABISELECT(112,60), "S1334C1");
    check_base_class_offset(lv, (S1334C3*)(S1334C2*), 0, "S1334C1");
    check_base_class_offset(lv, (S1334C2*), 0, "S1334C1");
    /*is_ambiguous_... S1334C1::S1334C6 */ AMB_check_base_class_offset(lv, (S1334C6*), ABISELECT(184,112), "S1334C1");
    test_class_info(&lv, &cd_S1334C1);
    dp->~S1334C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1334C1(Test_S1334C1, "S1334C1", ABISELECT(240,144));

#else // __cplusplus

extern void _ZN7S1334C1C1Ev();
extern void _ZN7S1334C1D1Ev();
Name_Map name_map_S1334C1[] = {
  NSPAIR(_ZN7S1334C1C1Ev),
  NSPAIR(_ZN7S1334C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1334C4;
extern VTBL_ENTRY _ZTI7S1334C4[];
extern  VTBL_ENTRY _ZTV7S1334C4[];
extern Class_Descriptor cd_S1334C5;
extern VTBL_ENTRY _ZTI7S1334C5[];
extern  VTBL_ENTRY _ZTV7S1334C5[];
extern Class_Descriptor cd_S1334C6;
extern VTBL_ENTRY _ZTI7S1334C6[];
extern  VTBL_ENTRY _ZTV7S1334C6[];
extern Class_Descriptor cd_S1334C8;
extern VTBL_ENTRY _ZTI7S1334C8[];
extern  VTBL_ENTRY _ZTV7S1334C8[];
extern Class_Descriptor cd_S1334C7;
extern VTBL_ENTRY _ZTI7S1334C7[];
extern  VTBL_ENTRY _ZTV7S1334C7[];
extern Class_Descriptor cd_S1334C8;
extern VTBL_ENTRY _ZTI7S1334C8[];
extern  VTBL_ENTRY _ZTV7S1334C8[];
extern Class_Descriptor cd_S1334C3;
extern VTBL_ENTRY _ZTI7S1334C3[];
extern  VTBL_ENTRY _ZTV7S1334C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1334C3[];
extern Class_Descriptor cd_S1334C2;
extern VTBL_ENTRY _ZTI7S1334C2[];
extern  VTBL_ENTRY _ZTV7S1334C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1334C2[];
extern Class_Descriptor cd_S1334C6;
extern VTBL_ENTRY _ZTI7S1334C6[];
extern  VTBL_ENTRY _ZTV7S1334C6[];
static Base_Class bases_S1334C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1334C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S1334C5,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_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_S1334C6,    ABISELECT(104,56), //bcp->offset
    18, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S1334C8,    ABISELECT(192,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1334C7,    ABISELECT(192,116), //bcp->offset
    32, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S1334C8,    ABISELECT(112,60), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1334C3,    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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S1334C2,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1334C6,    ABISELECT(184,112), //bcp->offset
    29, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1334C1[];
extern void _ZN7S1334C42v2Ev();
extern void _ZN7S1334C1D1Ev();
extern void _ZN7S1334C1D0Ev();
extern void _ZN7S1334C33v14Ev();
extern void _ZN7S1334C33v15Ev();
extern void _ZN7S1334C33v16Ev();
extern void _ZN7S1334C23v17Ev();
extern void _ZN7S1334C23v18Ev();
extern void _ZN7S1334C23v19Ev();
extern void _ZN7S1334C23v20Ev();
extern void _ZN7S1334C12v1Ev();
extern void _ZN7S1334C52v3Ev();
extern void _ZN7S1334C52v4Ev();
extern void _ZN7S1334C62v5Ev();
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void _ZN7S1334C62v5Ev();
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S1334C1D1Ev,_ZTv0_n36_N7S1334C1D1Ev)();
extern void ABISELECT(_ZThn192_N7S1334C1D1Ev,_ZThn116_N7S1334C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1334C1D0Ev,_ZTv0_n36_N7S1334C1D0Ev)();
extern void ABISELECT(_ZThn192_N7S1334C1D0Ev,_ZThn116_N7S1334C1D0Ev)() __attribute__((weak));
extern void _ZN7S1334C73v12Ev();
extern void _ZN7S1334C73v13Ev();
static  VTBL_ENTRY vtc_S1334C1[] = {
  ABISELECT(192,116),
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C1[0]),
  (VTBL_ENTRY)&_ZN7S1334C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1334C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1334C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v20Ev,
  (VTBL_ENTRY)&_ZN7S1334C12v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1334C1[0]),
  (VTBL_ENTRY)&_ZN7S1334C52v3Ev,
  (VTBL_ENTRY)&_ZN7S1334C52v4Ev,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S1334C1[0]),
  (VTBL_ENTRY)&_ZN7S1334C62v5Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S1334C1[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  ABISELECT(-184,-112),
  (VTBL_ENTRY)&(_ZTI7S1334C1[0]),
  (VTBL_ENTRY)&_ZN7S1334C62v5Ev,
  0,
  0,
  ABISELECT(-192,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-116),
  (VTBL_ENTRY)&(_ZTI7S1334C1[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C1D1Ev,_ZTv0_n36_N7S1334C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C1D0Ev,_ZTv0_n36_N7S1334C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1334C73v12Ev,
  (VTBL_ENTRY)&_ZN7S1334C73v13Ev,
};
extern VTBL_ENTRY _ZTV7S1334C1[];
extern void _ZN7S1334C42v2Ev();
extern void _ZN7S1334C2D1Ev();
extern void _ZN7S1334C2D0Ev();
extern void _ZN7S1334C33v14Ev();
extern void _ZN7S1334C33v15Ev();
extern void _ZN7S1334C33v16Ev();
extern void _ZN7S1334C23v17Ev();
extern void _ZN7S1334C23v18Ev();
extern void _ZN7S1334C23v19Ev();
extern void _ZN7S1334C23v20Ev();
static  VTBL_ENTRY _tg__ZTV7S1334C2__7S1334C1[] = {
  ABISELECT(192,116),
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C2[0]),
  (VTBL_ENTRY)&_ZN7S1334C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1334C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1334C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v16Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v18Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v19Ev,
  (VTBL_ENTRY)&_ZN7S1334C23v20Ev,
};
extern void _ZN7S1334C42v2Ev();
extern void _ZN7S1334C3D1Ev();
extern void _ZN7S1334C3D0Ev();
extern void _ZN7S1334C33v14Ev();
extern void _ZN7S1334C33v15Ev();
extern void _ZN7S1334C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S1334C37S1334C2__7S1334C1[] = {
  ABISELECT(192,116),
  0,
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C42v2Ev,
  (VTBL_ENTRY)&_ZN7S1334C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1334C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v14Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v15Ev,
  (VTBL_ENTRY)&_ZN7S1334C33v16Ev,
};
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev)();
extern void ABISELECT(_ZThn192_N7S1334C3D1Ev,_ZThn116_N7S1334C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev)();
extern void ABISELECT(_ZThn192_N7S1334C3D0Ev,_ZThn116_N7S1334C3D0Ev)() __attribute__((weak));
extern void _ZN7S1334C73v12Ev();
extern void _ZN7S1334C73v13Ev();
static  VTBL_ENTRY _tg__ZTV7S1334C7__7S1334C37S1334C2__7S1334C1[] = {
  0,
  0,
  ABISELECT(-192,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-116),
  (VTBL_ENTRY)&(_ZTI7S1334C3[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1334C73v12Ev,
  (VTBL_ENTRY)&_ZN7S1334C73v13Ev,
};
extern void _ZN7S1334C82v6Ev();
extern void _ZN7S1334C82v7Ev();
extern void _ZN7S1334C82v8Ev();
extern void _ZN7S1334C82v9Ev();
extern void _ZN7S1334C83v10Ev();
extern void _ZN7S1334C83v11Ev();
extern void ABISELECT(_ZTv0_n72_N7S1334C2D1Ev,_ZTv0_n36_N7S1334C2D1Ev)();
extern void ABISELECT(_ZThn192_N7S1334C2D1Ev,_ZThn116_N7S1334C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S1334C2D0Ev,_ZTv0_n36_N7S1334C2D0Ev)();
extern void ABISELECT(_ZThn192_N7S1334C2D0Ev,_ZThn116_N7S1334C2D0Ev)() __attribute__((weak));
extern void _ZN7S1334C73v12Ev();
extern void _ZN7S1334C73v13Ev();
static  VTBL_ENTRY _tg__ZTV7S1334C7__7S1334C2__7S1334C1[] = {
  0,
  0,
  ABISELECT(-192,-116),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-116),
  (VTBL_ENTRY)&(_ZTI7S1334C2[0]),
  (VTBL_ENTRY)&_ZN7S1334C82v6Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v7Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v8Ev,
  (VTBL_ENTRY)&_ZN7S1334C82v9Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v10Ev,
  (VTBL_ENTRY)&_ZN7S1334C83v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C2D1Ev,_ZTv0_n36_N7S1334C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S1334C2D0Ev,_ZTv0_n36_N7S1334C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1334C73v12Ev,
  (VTBL_ENTRY)&_ZN7S1334C73v13Ev,
};
static  VTT_ENTRY vtt_S1334C1[] = {
  {&(_ZTV7S1334C1[3]),  3,53},
  {&(_tg__ZTV7S1334C2__7S1334C1[3]),  3,13},
  {&(_tg__ZTV7S1334C37S1334C2__7S1334C1[3]),  3,9},
  {&(_tg__ZTV7S1334C7__7S1334C37S1334C2__7S1334C1[11]),  11,21},
  {&(_tg__ZTV7S1334C7__7S1334C2__7S1334C1[11]),  11,21},
  {&(_ZTV7S1334C1[43]),  43,53},
};
extern VTBL_ENTRY _ZTI7S1334C1[];
extern  VTBL_ENTRY _ZTV7S1334C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1334C1[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C2D0Ev,_ZTv0_n36_N7S1334C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S1334C2D0Ev,_ZThn116_N7S1334C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C2D1Ev,_ZTv0_n36_N7S1334C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S1334C2D1Ev,_ZThn116_N7S1334C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C3D0Ev,_ZTv0_n36_N7S1334C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S1334C3D0Ev,_ZThn116_N7S1334C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C3D1Ev,_ZTv0_n36_N7S1334C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S1334C3D1Ev,_ZThn116_N7S1334C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C1D0Ev,_ZTv0_n36_N7S1334C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S1334C1D0Ev,_ZThn116_N7S1334C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S1334C1D1Ev,_ZTv0_n36_N7S1334C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S1334C1D1Ev,_ZThn116_N7S1334C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S1334C1 = {  "S1334C1", // class name
  bases_S1334C1, 9,
  &(vtc_S1334C1[0]), // expected_vtbl_contents
  &(vtt_S1334C1[0]), // expected_vtt_contents
  ABISELECT(240,144), // object size
  NSPAIRA(_ZTI7S1334C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1334C1),53, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1334C1),6, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S867C5  {
  ::S4473C12_nt s867c5f0;
  int s867c5f1[2];
  char s867c5f2;
  virtual  ~S867C5(); // _ZN6S867C5D1Ev
  virtual void  v2(); // _ZN6S867C52v2Ev
  virtual void  v3(); // _ZN6S867C52v3Ev
  virtual void  v4(); // _ZN6S867C52v4Ev
  S867C5(); // tgen
};
//SIG(-1 S867C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S867C5 ::~S867C5(){ note_dtor("S867C5", this);}
void  S867C5 ::v2(){vfunc_called(this, "_ZN6S867C52v2Ev");}
void  S867C5 ::v3(){vfunc_called(this, "_ZN6S867C52v3Ev");}
void  S867C5 ::v4(){vfunc_called(this, "_ZN6S867C52v4Ev");}
S867C5 ::S867C5(){ note_ctor("S867C5", this);} // tgen

static void Test_S867C5()
{
  extern Class_Descriptor cd_S867C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S867C5, buf);
    S867C5 *dp, &lv = *(dp=new (buf) S867C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S867C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S867C5)");
    check_field_offset(lv, s867c5f0, ABISELECT(8,4), "S867C5.s867c5f0");
    check_field_offset(lv, s867c5f1, ABISELECT(24,16), "S867C5.s867c5f1");
    check_field_offset(lv, s867c5f2, ABISELECT(32,24), "S867C5.s867c5f2");
    test_class_info(&lv, &cd_S867C5);
    dp->~S867C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS867C5(Test_S867C5, "S867C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S867C5C1Ev();
extern void _ZN6S867C5D1Ev();
Name_Map name_map_S867C5[] = {
  NSPAIR(_ZN6S867C5C1Ev),
  NSPAIR(_ZN6S867C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S867C5[];
extern void _ZN6S867C5D1Ev();
extern void _ZN6S867C5D0Ev();
extern void _ZN6S867C52v2Ev();
extern void _ZN6S867C52v3Ev();
extern void _ZN6S867C52v4Ev();
static  VTBL_ENTRY vtc_S867C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S867C5[0]),
  (VTBL_ENTRY)&_ZN6S867C5D1Ev,
  (VTBL_ENTRY)&_ZN6S867C5D0Ev,
  (VTBL_ENTRY)&_ZN6S867C52v2Ev,
  (VTBL_ENTRY)&_ZN6S867C52v3Ev,
  (VTBL_ENTRY)&_ZN6S867C52v4Ev,
};
extern VTBL_ENTRY _ZTI6S867C5[];
extern  VTBL_ENTRY _ZTV6S867C5[];
Class_Descriptor cd_S867C5 = {  "S867C5", // class name
  0,0,//no base classes
  &(vtc_S867C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S867C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S867C5),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  S867C4  : S867C5 {
  void *s867c4f0;
  virtual void  v5(); // _ZN6S867C42v5Ev
  virtual void  v6(); // _ZN6S867C42v6Ev
  ~S867C4(); // tgen
  S867C4(); // tgen
};
//SIG(-1 S867C4) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S867C4 ::v5(){vfunc_called(this, "_ZN6S867C42v5Ev");}
void  S867C4 ::v6(){vfunc_called(this, "_ZN6S867C42v6Ev");}
S867C4 ::~S867C4(){ note_dtor("S867C4", this);} // tgen
S867C4 ::S867C4(){ note_ctor("S867C4", this);} // tgen

static void Test_S867C4()
{
  extern Class_Descriptor cd_S867C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S867C4, buf);
    S867C4 *dp, &lv = *(dp=new (buf) S867C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S867C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S867C4)");
    check_base_class_offset(lv, (S867C5*), 0, "S867C4");
    check_field_offset(lv, s867c4f0, ABISELECT(40,28), "S867C4.s867c4f0");
    test_class_info(&lv, &cd_S867C4);
    dp->~S867C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS867C4(Test_S867C4, "S867C4", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S867C4C1Ev();
extern void _ZN6S867C4D1Ev();
Name_Map name_map_S867C4[] = {
  NSPAIR(_ZN6S867C4C1Ev),
  NSPAIR(_ZN6S867C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S867C5;
extern VTBL_ENTRY _ZTI6S867C5[];
extern  VTBL_ENTRY _ZTV6S867C5[];
static Base_Class bases_S867C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S867C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI6S867C4[];
extern void _ZN6S867C4D1Ev();
extern void _ZN6S867C4D0Ev();
extern void _ZN6S867C52v2Ev();
extern void _ZN6S867C52v3Ev();
extern void _ZN6S867C52v4Ev();
extern void _ZN6S867C42v5Ev();
extern void _ZN6S867C42v6Ev();
static  VTBL_ENTRY vtc_S867C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S867C4[0]),
  (VTBL_ENTRY)&_ZN6S867C4D1Ev,
  (VTBL_ENTRY)&_ZN6S867C4D0Ev,
  (VTBL_ENTRY)&_ZN6S867C52v2Ev,
  (VTBL_ENTRY)&_ZN6S867C52v3Ev,
  (VTBL_ENTRY)&_ZN6S867C52v4Ev,
  (VTBL_ENTRY)&_ZN6S867C42v5Ev,
  (VTBL_ENTRY)&_ZN6S867C42v6Ev,
};
extern VTBL_ENTRY _ZTI6S867C4[];
extern  VTBL_ENTRY _ZTV6S867C4[];
Class_Descriptor cd_S867C4 = {  "S867C4", // class name
  bases_S867C4, 1,
  &(vtc_S867C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S867C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S867C4),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  S867C3  : S867C4 {
  void *s867c3f0;
  char s867c3f1;
  ::S2366C14_nt s867c3f2;
  virtual  ~S867C3(); // _ZN6S867C3D1Ev
  virtual void  v7(); // _ZN6S867C32v7Ev
  S867C3(); // tgen
};
//SIG(-1 S867C3) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S867C3 ::~S867C3(){ note_dtor("S867C3", this);}
void  S867C3 ::v7(){vfunc_called(this, "_ZN6S867C32v7Ev");}
S867C3 ::S867C3(){ note_ctor("S867C3", this);} // tgen

static void Test_S867C3()
{
  extern Class_Descriptor cd_S867C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S867C3, buf);
    S867C3 *dp, &lv = *(dp=new (buf) S867C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S867C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S867C3)");
    check_base_class_offset(lv, (S867C5*)(S867C4*), 0, "S867C3");
    check_base_class_offset(lv, (S867C4*), 0, "S867C3");
    check_field_offset(lv, s867c3f0, ABISELECT(48,32), "S867C3.s867c3f0");
    check_field_offset(lv, s867c3f1, ABISELECT(56,36), "S867C3.s867c3f1");
    check_field_offset(lv, s867c3f2, ABISELECT(60,40), "S867C3.s867c3f2");
    test_class_info(&lv, &cd_S867C3);
    dp->~S867C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS867C3(Test_S867C3, "S867C3", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S867C3C1Ev();
extern void _ZN6S867C3D1Ev();
Name_Map name_map_S867C3[] = {
  NSPAIR(_ZN6S867C3C1Ev),
  NSPAIR(_ZN6S867C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S867C5;
extern VTBL_ENTRY _ZTI6S867C5[];
extern  VTBL_ENTRY _ZTV6S867C5[];
extern Class_Descriptor cd_S867C4;
extern VTBL_ENTRY _ZTI6S867C4[];
extern  VTBL_ENTRY _ZTV6S867C4[];
static Base_Class bases_S867C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S867C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S867C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S867C3[];
extern void _ZN6S867C3D1Ev();
extern void _ZN6S867C3D0Ev();
extern void _ZN6S867C52v2Ev();
extern void _ZN6S867C52v3Ev();
extern void _ZN6S867C52v4Ev();
extern void _ZN6S867C42v5Ev();
extern void _ZN6S867C42v6Ev();
extern void _ZN6S867C32v7Ev();
static  VTBL_ENTRY vtc_S867C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S867C3[0]),
  (VTBL_ENTRY)&_ZN6S867C3D1Ev,
  (VTBL_ENTRY)&_ZN6S867C3D0Ev,
  (VTBL_ENTRY)&_ZN6S867C52v2Ev,
  (VTBL_ENTRY)&_ZN6S867C52v3Ev,
  (VTBL_ENTRY)&_ZN6S867C52v4Ev,
  (VTBL_ENTRY)&_ZN6S867C42v5Ev,
  (VTBL_ENTRY)&_ZN6S867C42v6Ev,
  (VTBL_ENTRY)&_ZN6S867C32v7Ev,
};
extern VTBL_ENTRY _ZTI6S867C3[];
extern  VTBL_ENTRY _ZTV6S867C3[];
Class_Descriptor cd_S867C3 = {  "S867C3", // class name
  bases_S867C3, 2,
  &(vtc_S867C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S867C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S867C3),10, //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  S867C2  : S867C3 {
  void *s867c2f0[3];
  int s867c2f1;
  ::S130C11_nt s867c2f2;
  virtual  ~S867C2(); // _ZN6S867C2D1Ev
  virtual void  v8(); // _ZN6S867C22v8Ev
  virtual void  v9(); // _ZN6S867C22v9Ev
  virtual void  v10(); // _ZN6S867C23v10Ev
  virtual void  v11(); // _ZN6S867C23v11Ev
  virtual void  v12(); // _ZN6S867C23v12Ev
  virtual void  v13(); // _ZN6S867C23v13Ev
  virtual void  v14(); // _ZN6S867C23v14Ev
  S867C2(); // tgen
};
//SIG(-1 S867C2) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v11 v12 Fp} vd v13 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 v4 v5 v6 v7 Fp[3] Fi FC8{ m Fp[2]}}


 S867C2 ::~S867C2(){ note_dtor("S867C2", this);}
void  S867C2 ::v8(){vfunc_called(this, "_ZN6S867C22v8Ev");}
void  S867C2 ::v9(){vfunc_called(this, "_ZN6S867C22v9Ev");}
void  S867C2 ::v10(){vfunc_called(this, "_ZN6S867C23v10Ev");}
void  S867C2 ::v11(){vfunc_called(this, "_ZN6S867C23v11Ev");}
void  S867C2 ::v12(){vfunc_called(this, "_ZN6S867C23v12Ev");}
void  S867C2 ::v13(){vfunc_called(this, "_ZN6S867C23v13Ev");}
void  S867C2 ::v14(){vfunc_called(this, "_ZN6S867C23v14Ev");}
S867C2 ::S867C2(){ note_ctor("S867C2", this);} // tgen

static void Test_S867C2()
{
  extern Class_Descriptor cd_S867C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S867C2, buf);
    S867C2 *dp, &lv = *(dp=new (buf) S867C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S867C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S867C2)");
    check_base_class_offset(lv, (S867C5*)(S867C4*)(S867C3*), 0, "S867C2");
    check_base_class_offset(lv, (S867C4*)(S867C3*), 0, "S867C2");
    check_base_class_offset(lv, (S867C3*), 0, "S867C2");
    check_field_offset(lv, s867c2f0, ABISELECT(72,48), "S867C2.s867c2f0");
    check_field_offset(lv, s867c2f1, ABISELECT(96,60), "S867C2.s867c2f1");
    check_field_offset(lv, s867c2f2, ABISELECT(104,64), "S867C2.s867c2f2");
    test_class_info(&lv, &cd_S867C2);
    dp->~S867C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS867C2(Test_S867C2, "S867C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN6S867C2C1Ev();
extern void _ZN6S867C2D1Ev();
Name_Map name_map_S867C2[] = {
  NSPAIR(_ZN6S867C2C1Ev),
  NSPAIR(_ZN6S867C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S867C5;
extern VTBL_ENTRY _ZTI6S867C5[];
extern  VTBL_ENTRY _ZTV6S867C5[];
extern Class_Descriptor cd_S867C4;
extern VTBL_ENTRY _ZTI6S867C4[];
extern  VTBL_ENTRY _ZTV6S867C4[];
extern Class_Descriptor cd_S867C3;
extern VTBL_ENTRY _ZTI6S867C3[];
extern  VTBL_ENTRY _ZTV6S867C3[];
static Base_Class bases_S867C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S867C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S867C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S867C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S867C2[];
extern void _ZN6S867C2D1Ev();
extern void _ZN6S867C2D0Ev();
extern void _ZN6S867C52v2Ev();
extern void _ZN6S867C52v3Ev();
extern void _ZN6S867C52v4Ev();
extern void _ZN6S867C42v5Ev();
extern void _ZN6S867C42v6Ev();
extern void _ZN6S867C32v7Ev();
extern void _ZN6S867C22v8Ev();
extern void _ZN6S867C22v9Ev();
extern void _ZN6S867C23v10Ev();
extern void _ZN6S867C23v11Ev();
extern void _ZN6S867C23v12Ev();
extern void _ZN6S867C23v13Ev();
extern void _ZN6S867C23v14Ev();
static  VTBL_ENTRY vtc_S867C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S867C2[0]),
  (VTBL_ENTRY)&_ZN6S867C2D1Ev,
  (VTBL_ENTRY)&_ZN6S867C2D0Ev,
  (VTBL_ENTRY)&_ZN6S867C52v2Ev,
  (VTBL_ENTRY)&_ZN6S867C52v3Ev,
  (VTBL_ENTRY)&_ZN6S867C52v4Ev,
  (VTBL_ENTRY)&_ZN6S867C42v5Ev,
  (VTBL_ENTRY)&_ZN6S867C42v6Ev,
  (VTBL_ENTRY)&_ZN6S867C32v7Ev,
  (VTBL_ENTRY)&_ZN6S867C22v8Ev,
  (VTBL_ENTRY)&_ZN6S867C22v9Ev,
  (VTBL_ENTRY)&_ZN6S867C23v10Ev,
  (VTBL_ENTRY)&_ZN6S867C23v11Ev,
  (VTBL_ENTRY)&_ZN6S867C23v12Ev,
  (VTBL_ENTRY)&_ZN6S867C23v13Ev,
  (VTBL_ENTRY)&_ZN6S867C23v14Ev,
};
extern VTBL_ENTRY _ZTI6S867C2[];
extern  VTBL_ENTRY _ZTV6S867C2[];
Class_Descriptor cd_S867C2 = {  "S867C2", // class name
  bases_S867C2, 3,
  &(vtc_S867C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI6S867C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S867C2),17, //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  S867C1  : S867C2 {
  void *s867c1f0;
  virtual  ~S867C1(); // _ZN6S867C1D1Ev
  virtual void  v1(); // _ZN6S867C12v1Ev
  S867C1(); // tgen
};
//SIG(1 S867C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v2 v3 v4 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v5 v6 Fp} vd v7 Fp Fc FC8{ m Fi[2]}} vd v8 v9 v10 v11 v12 v13 v14 Fp[3] Fi FC9{ m Fp[2]}} vd v1 Fp}


 S867C1 ::~S867C1(){ note_dtor("S867C1", this);}
void  S867C1 ::v1(){vfunc_called(this, "_ZN6S867C12v1Ev");}
S867C1 ::S867C1(){ note_ctor("S867C1", this);} // tgen

static void Test_S867C1()
{
  extern Class_Descriptor cd_S867C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,20)];
    init_test(&cd_S867C1, buf);
    S867C1 *dp, &lv = *(dp=new (buf) S867C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S867C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S867C1)");
    check_base_class_offset(lv, (S867C5*)(S867C4*)(S867C3*)(S867C2*), 0, "S867C1");
    check_base_class_offset(lv, (S867C4*)(S867C3*)(S867C2*), 0, "S867C1");
    check_base_class_offset(lv, (S867C3*)(S867C2*), 0, "S867C1");
    check_base_class_offset(lv, (S867C2*), 0, "S867C1");
    check_field_offset(lv, s867c1f0, ABISELECT(120,72), "S867C1.s867c1f0");
    test_class_info(&lv, &cd_S867C1);
    dp->~S867C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS867C1(Test_S867C1, "S867C1", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN6S867C1C1Ev();
extern void _ZN6S867C1D1Ev();
Name_Map name_map_S867C1[] = {
  NSPAIR(_ZN6S867C1C1Ev),
  NSPAIR(_ZN6S867C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S867C5;
extern VTBL_ENTRY _ZTI6S867C5[];
extern  VTBL_ENTRY _ZTV6S867C5[];
extern Class_Descriptor cd_S867C4;
extern VTBL_ENTRY _ZTI6S867C4[];
extern  VTBL_ENTRY _ZTV6S867C4[];
extern Class_Descriptor cd_S867C3;
extern VTBL_ENTRY _ZTI6S867C3[];
extern  VTBL_ENTRY _ZTV6S867C3[];
extern Class_Descriptor cd_S867C2;
extern VTBL_ENTRY _ZTI6S867C2[];
extern  VTBL_ENTRY _ZTV6S867C2[];
static Base_Class bases_S867C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S867C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S867C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S867C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S867C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S867C1[];
extern void _ZN6S867C1D1Ev();
extern void _ZN6S867C1D0Ev();
extern void _ZN6S867C52v2Ev();
extern void _ZN6S867C52v3Ev();
extern void _ZN6S867C52v4Ev();
extern void _ZN6S867C42v5Ev();
extern void _ZN6S867C42v6Ev();
extern void _ZN6S867C32v7Ev();
extern void _ZN6S867C22v8Ev();
extern void _ZN6S867C22v9Ev();
extern void _ZN6S867C23v10Ev();
extern void _ZN6S867C23v11Ev();
extern void _ZN6S867C23v12Ev();
extern void _ZN6S867C23v13Ev();
extern void _ZN6S867C23v14Ev();
extern void _ZN6S867C12v1Ev();
static  VTBL_ENTRY vtc_S867C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S867C1[0]),
  (VTBL_ENTRY)&_ZN6S867C1D1Ev,
  (VTBL_ENTRY)&_ZN6S867C1D0Ev,
  (VTBL_ENTRY)&_ZN6S867C52v2Ev,
  (VTBL_ENTRY)&_ZN6S867C52v3Ev,
  (VTBL_ENTRY)&_ZN6S867C52v4Ev,
  (VTBL_ENTRY)&_ZN6S867C42v5Ev,
  (VTBL_ENTRY)&_ZN6S867C42v6Ev,
  (VTBL_ENTRY)&_ZN6S867C32v7Ev,
  (VTBL_ENTRY)&_ZN6S867C22v8Ev,
  (VTBL_ENTRY)&_ZN6S867C22v9Ev,
  (VTBL_ENTRY)&_ZN6S867C23v10Ev,
  (VTBL_ENTRY)&_ZN6S867C23v11Ev,
  (VTBL_ENTRY)&_ZN6S867C23v12Ev,
  (VTBL_ENTRY)&_ZN6S867C23v13Ev,
  (VTBL_ENTRY)&_ZN6S867C23v14Ev,
  (VTBL_ENTRY)&_ZN6S867C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S867C1[];
extern  VTBL_ENTRY _ZTV6S867C1[];
Class_Descriptor cd_S867C1 = {  "S867C1", // class name
  bases_S867C1, 4,
  &(vtc_S867C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI6S867C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S867C1),18, //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  S4729C3  {
  ::S4473C12_nt s4729c3f0;
  int s4729c3f1[2];
  char s4729c3f2;
  virtual  ~S4729C3(); // _ZN7S4729C3D1Ev
  virtual void  v3(); // _ZN7S4729C32v3Ev
  virtual void  v4(); // _ZN7S4729C32v4Ev
  virtual void  v5(); // _ZN7S4729C32v5Ev
  S4729C3(); // tgen
};
//SIG(-1 S4729C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4729C3 ::~S4729C3(){ note_dtor("S4729C3", this);}
void  S4729C3 ::v3(){vfunc_called(this, "_ZN7S4729C32v3Ev");}
void  S4729C3 ::v4(){vfunc_called(this, "_ZN7S4729C32v4Ev");}
void  S4729C3 ::v5(){vfunc_called(this, "_ZN7S4729C32v5Ev");}
S4729C3 ::S4729C3(){ note_ctor("S4729C3", this);} // tgen

static void Test_S4729C3()
{
  extern Class_Descriptor cd_S4729C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4729C3, buf);
    S4729C3 *dp, &lv = *(dp=new (buf) S4729C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4729C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4729C3)");
    check_field_offset(lv, s4729c3f0, ABISELECT(8,4), "S4729C3.s4729c3f0");
    check_field_offset(lv, s4729c3f1, ABISELECT(24,16), "S4729C3.s4729c3f1");
    check_field_offset(lv, s4729c3f2, ABISELECT(32,24), "S4729C3.s4729c3f2");
    test_class_info(&lv, &cd_S4729C3);
    dp->~S4729C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4729C3(Test_S4729C3, "S4729C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4729C3C1Ev();
extern void _ZN7S4729C3D1Ev();
Name_Map name_map_S4729C3[] = {
  NSPAIR(_ZN7S4729C3C1Ev),
  NSPAIR(_ZN7S4729C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4729C3[];
extern void _ZN7S4729C3D1Ev();
extern void _ZN7S4729C3D0Ev();
extern void _ZN7S4729C32v3Ev();
extern void _ZN7S4729C32v4Ev();
extern void _ZN7S4729C32v5Ev();
static  VTBL_ENTRY vtc_S4729C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4729C3[0]),
  (VTBL_ENTRY)&_ZN7S4729C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4729C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4729C3[];
extern  VTBL_ENTRY _ZTV7S4729C3[];
Class_Descriptor cd_S4729C3 = {  "S4729C3", // class name
  0,0,//no base classes
  &(vtc_S4729C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4729C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4729C3),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  S4729C2  : S4729C3 {
  void *s4729c2f0;
  virtual void  v6(); // _ZN7S4729C22v6Ev
  virtual void  v7(); // _ZN7S4729C22v7Ev
  ~S4729C2(); // tgen
  S4729C2(); // tgen
};
//SIG(-1 S4729C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4729C2 ::v6(){vfunc_called(this, "_ZN7S4729C22v6Ev");}
void  S4729C2 ::v7(){vfunc_called(this, "_ZN7S4729C22v7Ev");}
S4729C2 ::~S4729C2(){ note_dtor("S4729C2", this);} // tgen
S4729C2 ::S4729C2(){ note_ctor("S4729C2", this);} // tgen

static void Test_S4729C2()
{
  extern Class_Descriptor cd_S4729C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4729C2, buf);
    S4729C2 *dp, &lv = *(dp=new (buf) S4729C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4729C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4729C2)");
    check_base_class_offset(lv, (S4729C3*), 0, "S4729C2");
    check_field_offset(lv, s4729c2f0, ABISELECT(40,28), "S4729C2.s4729c2f0");
    test_class_info(&lv, &cd_S4729C2);
    dp->~S4729C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4729C2(Test_S4729C2, "S4729C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4729C2C1Ev();
extern void _ZN7S4729C2D1Ev();
Name_Map name_map_S4729C2[] = {
  NSPAIR(_ZN7S4729C2C1Ev),
  NSPAIR(_ZN7S4729C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4729C3;
extern VTBL_ENTRY _ZTI7S4729C3[];
extern  VTBL_ENTRY _ZTV7S4729C3[];
static Base_Class bases_S4729C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4729C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4729C2[];
extern void _ZN7S4729C2D1Ev();
extern void _ZN7S4729C2D0Ev();
extern void _ZN7S4729C32v3Ev();
extern void _ZN7S4729C32v4Ev();
extern void _ZN7S4729C32v5Ev();
extern void _ZN7S4729C22v6Ev();
extern void _ZN7S4729C22v7Ev();
static  VTBL_ENTRY vtc_S4729C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4729C2[0]),
  (VTBL_ENTRY)&_ZN7S4729C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4729C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4729C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4729C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4729C2[];
extern  VTBL_ENTRY _ZTV7S4729C2[];
Class_Descriptor cd_S4729C2 = {  "S4729C2", // class name
  bases_S4729C2, 1,
  &(vtc_S4729C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4729C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4729C2),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  S4729C11_nt  {
  __tsi64 s4729c11f0;
  void  mf4729c11(); // _ZN11S4729C11_nt9mf4729c11Ev
};
//SIG(-1 S4729C11_nt) C1{ m FL}


void  S4729C11_nt ::mf4729c11(){}

//skip512 S4729C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4729C10_nt  {
  ::S4729C11_nt s4729c10f0;
  void  mf4729c10(); // _ZN11S4729C10_nt9mf4729c10Ev
};
//SIG(-1 S4729C10_nt) C1{ m FC2{ m FL}}


void  S4729C10_nt ::mf4729c10(){}

//skip512 S4729C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4729C6  {
  ::S2366C5_nt s4729c6f0;
  void *s4729c6f1[2];
  ::S2366C19 s4729c6f2;
  ::S4729C10_nt s4729c6f3;
  ::S2366C14_nt s4729c6f4;
};
//SIG(-1 S4729C6) C1{ FC2{ m Fp Fi FC3{ m}} Fp[2] FC4{ m Fp} FC5{ m FC6{ m FL}} FC7{ m Fi[2]}}



static void Test_S4729C6()
{
  {
    init_simple_test("S4729C6");
    S4729C6 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S4729C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4729C6)");
    check_field_offset(lv, s4729c6f0, 0, "S4729C6.s4729c6f0");
    check_field_offset(lv, s4729c6f1, ABISELECT(16,12), "S4729C6.s4729c6f1");
    check_field_offset(lv, s4729c6f2, ABISELECT(32,20), "S4729C6.s4729c6f2");
    check_field_offset(lv, s4729c6f3, ABISELECT(40,24), "S4729C6.s4729c6f3");
    check_field_offset(lv, s4729c6f4, ABISELECT(48,32), "S4729C6.s4729c6f4");
  }
}
static Arrange_To_Call_Me vS4729C6(Test_S4729C6, "S4729C6", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4729C1  : S4729C2 {
  ::S4729C6 s4729c1f0;
  void *s4729c1f1[2];
  ::S2366C19 s4729c1f2;
  virtual void  v1(); // _ZN7S4729C12v1Ev
  virtual void  v2(); // _ZN7S4729C12v2Ev
  ~S4729C1(); // tgen
  S4729C1(); // tgen
};
//SIG(1 S4729C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} v1 v2 FC6{ FC7{ m Fp Fi FC5} Fp[2] FC8{ m Fp} FC9{ m FC10{ m FL}} FC11{ m Fi[2]}} Fp[2] FC8}


void  S4729C1 ::v1(){vfunc_called(this, "_ZN7S4729C12v1Ev");}
void  S4729C1 ::v2(){vfunc_called(this, "_ZN7S4729C12v2Ev");}
S4729C1 ::~S4729C1(){ note_dtor("S4729C1", this);} // tgen
S4729C1 ::S4729C1(){ note_ctor("S4729C1", this);} // tgen

static void Test_S4729C1()
{
  extern Class_Descriptor cd_S4729C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S4729C1, buf);
    S4729C1 *dp, &lv = *(dp=new (buf) S4729C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S4729C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4729C1)");
    check_base_class_offset(lv, (S4729C3*)(S4729C2*), 0, "S4729C1");
    check_base_class_offset(lv, (S4729C2*), 0, "S4729C1");
    check_field_offset(lv, s4729c1f0, ABISELECT(48,32), "S4729C1.s4729c1f0");
    check_field_offset(lv, s4729c1f1, ABISELECT(104,72), "S4729C1.s4729c1f1");
    check_field_offset(lv, s4729c1f2, ABISELECT(120,80), "S4729C1.s4729c1f2");
    test_class_info(&lv, &cd_S4729C1);
    dp->~S4729C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4729C1(Test_S4729C1, "S4729C1", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN7S4729C1C1Ev();
extern void _ZN7S4729C1D1Ev();
Name_Map name_map_S4729C1[] = {
  NSPAIR(_ZN7S4729C1C1Ev),
  NSPAIR(_ZN7S4729C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4729C3;
extern VTBL_ENTRY _ZTI7S4729C3[];
extern  VTBL_ENTRY _ZTV7S4729C3[];
extern Class_Descriptor cd_S4729C2;
extern VTBL_ENTRY _ZTI7S4729C2[];
extern  VTBL_ENTRY _ZTV7S4729C2[];
static Base_Class bases_S4729C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4729C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4729C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4729C1[];
extern void _ZN7S4729C1D1Ev();
extern void _ZN7S4729C1D0Ev();
extern void _ZN7S4729C32v3Ev();
extern void _ZN7S4729C32v4Ev();
extern void _ZN7S4729C32v5Ev();
extern void _ZN7S4729C22v6Ev();
extern void _ZN7S4729C22v7Ev();
extern void _ZN7S4729C12v1Ev();
extern void _ZN7S4729C12v2Ev();
static  VTBL_ENTRY vtc_S4729C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4729C1[0]),
  (VTBL_ENTRY)&_ZN7S4729C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4729C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4729C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4729C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4729C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4729C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4729C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4729C1[];
extern  VTBL_ENTRY _ZTV7S4729C1[];
Class_Descriptor cd_S4729C1 = {  "S4729C1", // class name
  bases_S4729C1, 2,
  &(vtc_S4729C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI7S4729C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4729C1),11, //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  S4360C3  {
  ::S4473C12_nt s4360c3f0;
  int s4360c3f1[2];
  char s4360c3f2;
  virtual  ~S4360C3(); // _ZN7S4360C3D1Ev
  virtual void  v2(); // _ZN7S4360C32v2Ev
  virtual void  v3(); // _ZN7S4360C32v3Ev
  virtual void  v4(); // _ZN7S4360C32v4Ev
  S4360C3(); // tgen
};
//SIG(-1 S4360C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4360C3 ::~S4360C3(){ note_dtor("S4360C3", this);}
void  S4360C3 ::v2(){vfunc_called(this, "_ZN7S4360C32v2Ev");}
void  S4360C3 ::v3(){vfunc_called(this, "_ZN7S4360C32v3Ev");}
void  S4360C3 ::v4(){vfunc_called(this, "_ZN7S4360C32v4Ev");}
S4360C3 ::S4360C3(){ note_ctor("S4360C3", this);} // tgen

static void Test_S4360C3()
{
  extern Class_Descriptor cd_S4360C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4360C3, buf);
    S4360C3 *dp, &lv = *(dp=new (buf) S4360C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4360C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4360C3)");
    check_field_offset(lv, s4360c3f0, ABISELECT(8,4), "S4360C3.s4360c3f0");
    check_field_offset(lv, s4360c3f1, ABISELECT(24,16), "S4360C3.s4360c3f1");
    check_field_offset(lv, s4360c3f2, ABISELECT(32,24), "S4360C3.s4360c3f2");
    test_class_info(&lv, &cd_S4360C3);
    dp->~S4360C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4360C3(Test_S4360C3, "S4360C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4360C3C1Ev();
extern void _ZN7S4360C3D1Ev();
Name_Map name_map_S4360C3[] = {
  NSPAIR(_ZN7S4360C3C1Ev),
  NSPAIR(_ZN7S4360C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4360C3[];
extern void _ZN7S4360C3D1Ev();
extern void _ZN7S4360C3D0Ev();
extern void _ZN7S4360C32v2Ev();
extern void _ZN7S4360C32v3Ev();
extern void _ZN7S4360C32v4Ev();
static  VTBL_ENTRY vtc_S4360C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4360C3[0]),
  (VTBL_ENTRY)&_ZN7S4360C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4360C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4360C3[];
extern  VTBL_ENTRY _ZTV7S4360C3[];
Class_Descriptor cd_S4360C3 = {  "S4360C3", // class name
  0,0,//no base classes
  &(vtc_S4360C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4360C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4360C3),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  S4360C2  : S4360C3 {
  void *s4360c2f0;
  virtual void  v5(); // _ZN7S4360C22v5Ev
  virtual void  v6(); // _ZN7S4360C22v6Ev
  ~S4360C2(); // tgen
  S4360C2(); // tgen
};
//SIG(-1 S4360C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4360C2 ::v5(){vfunc_called(this, "_ZN7S4360C22v5Ev");}
void  S4360C2 ::v6(){vfunc_called(this, "_ZN7S4360C22v6Ev");}
S4360C2 ::~S4360C2(){ note_dtor("S4360C2", this);} // tgen
S4360C2 ::S4360C2(){ note_ctor("S4360C2", this);} // tgen

static void Test_S4360C2()
{
  extern Class_Descriptor cd_S4360C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4360C2, buf);
    S4360C2 *dp, &lv = *(dp=new (buf) S4360C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4360C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4360C2)");
    check_base_class_offset(lv, (S4360C3*), 0, "S4360C2");
    check_field_offset(lv, s4360c2f0, ABISELECT(40,28), "S4360C2.s4360c2f0");
    test_class_info(&lv, &cd_S4360C2);
    dp->~S4360C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4360C2(Test_S4360C2, "S4360C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4360C2C1Ev();
extern void _ZN7S4360C2D1Ev();
Name_Map name_map_S4360C2[] = {
  NSPAIR(_ZN7S4360C2C1Ev),
  NSPAIR(_ZN7S4360C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4360C3;
extern VTBL_ENTRY _ZTI7S4360C3[];
extern  VTBL_ENTRY _ZTV7S4360C3[];
static Base_Class bases_S4360C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4360C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4360C2[];
extern void _ZN7S4360C2D1Ev();
extern void _ZN7S4360C2D0Ev();
extern void _ZN7S4360C32v2Ev();
extern void _ZN7S4360C32v3Ev();
extern void _ZN7S4360C32v4Ev();
extern void _ZN7S4360C22v5Ev();
extern void _ZN7S4360C22v6Ev();
static  VTBL_ENTRY vtc_S4360C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4360C2[0]),
  (VTBL_ENTRY)&_ZN7S4360C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4360C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4360C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4360C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4360C2[];
extern  VTBL_ENTRY _ZTV7S4360C2[];
Class_Descriptor cd_S4360C2 = {  "S4360C2", // class name
  bases_S4360C2, 1,
  &(vtc_S4360C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4360C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4360C2),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  S4360C6_nt  {
  char s4360c6f0[1280];
  ::S4473C12_nt s4360c6f1;
  __tsi64 s4360c6f2;
  char s4360c6f3[2];
};
//SIG(-1 S4360C6_nt) C1{ Fc[1280] FC2{ m Fp Fi FC3{ m}} FL Fc[2]}



//skip512 S4360C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4360C1  : S4360C2 {
  ::S4473C12_nt s4360c1f0;
  ::S4473C12_nt s4360c1f1;
  ::S4473C12_nt s4360c1f2;
  ::S4473C12_nt s4360c1f3;
  int s4360c1f4[2];
  char s4360c1f5;
  ::S4473C12_nt s4360c1f6;
  ::S4360C6_nt s4360c1f7;
  ::S2173C14 s4360c1f8;
  void *s4360c1f9;
  virtual void  v1(); // _ZN7S4360C12v1Ev
  ~S4360C1(); // tgen
  S4360C1(); // tgen
};
//SIG(1 S4360C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC4 FC4 FC4 FC4 Fi[2] Fc FC4 FC6{ Fc[1280] FC4 FL Fc[2]} FC7{ m Fp Fi[2] FC8{ m}} Fp}


void  S4360C1 ::v1(){vfunc_called(this, "_ZN7S4360C12v1Ev");}
S4360C1 ::~S4360C1(){ note_dtor("S4360C1", this);} // tgen
S4360C1 ::S4360C1(){ note_ctor("S4360C1", this);} // tgen

static void Test_S4360C1()
{
  extern Class_Descriptor cd_S4360C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(187,358)];
    init_test(&cd_S4360C1, buf);
    S4360C1 *dp, &lv = *(dp=new (buf) S4360C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1488,1428), "sizeof(S4360C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4360C1)");
    check_base_class_offset(lv, (S4360C3*)(S4360C2*), 0, "S4360C1");
    check_base_class_offset(lv, (S4360C2*), 0, "S4360C1");
    check_field_offset(lv, s4360c1f0, ABISELECT(48,32), "S4360C1.s4360c1f0");
    check_field_offset(lv, s4360c1f1, ABISELECT(64,44), "S4360C1.s4360c1f1");
    check_field_offset(lv, s4360c1f2, ABISELECT(80,56), "S4360C1.s4360c1f2");
    check_field_offset(lv, s4360c1f3, ABISELECT(96,68), "S4360C1.s4360c1f3");
    check_field_offset(lv, s4360c1f4, ABISELECT(112,80), "S4360C1.s4360c1f4");
    check_field_offset(lv, s4360c1f5, ABISELECT(120,88), "S4360C1.s4360c1f5");
    check_field_offset(lv, s4360c1f6, ABISELECT(128,92), "S4360C1.s4360c1f6");
    check_field_offset(lv, s4360c1f7, ABISELECT(144,104), "S4360C1.s4360c1f7");
    check_field_offset(lv, s4360c1f8, ABISELECT(1456,1408), "S4360C1.s4360c1f8");
    check_field_offset(lv, s4360c1f9, ABISELECT(1480,1424), "S4360C1.s4360c1f9");
    test_class_info(&lv, &cd_S4360C1);
    dp->~S4360C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4360C1(Test_S4360C1, "S4360C1", ABISELECT(1488,1428));

#else // __cplusplus

extern void _ZN7S4360C1C1Ev();
extern void _ZN7S4360C1D1Ev();
Name_Map name_map_S4360C1[] = {
  NSPAIR(_ZN7S4360C1C1Ev),
  NSPAIR(_ZN7S4360C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4360C3;
extern VTBL_ENTRY _ZTI7S4360C3[];
extern  VTBL_ENTRY _ZTV7S4360C3[];
extern Class_Descriptor cd_S4360C2;
extern VTBL_ENTRY _ZTI7S4360C2[];
extern  VTBL_ENTRY _ZTV7S4360C2[];
static Base_Class bases_S4360C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4360C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4360C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4360C1[];
extern void _ZN7S4360C1D1Ev();
extern void _ZN7S4360C1D0Ev();
extern void _ZN7S4360C32v2Ev();
extern void _ZN7S4360C32v3Ev();
extern void _ZN7S4360C32v4Ev();
extern void _ZN7S4360C22v5Ev();
extern void _ZN7S4360C22v6Ev();
extern void _ZN7S4360C12v1Ev();
static  VTBL_ENTRY vtc_S4360C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4360C1[0]),
  (VTBL_ENTRY)&_ZN7S4360C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4360C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4360C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4360C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4360C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4360C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4360C1[];
extern  VTBL_ENTRY _ZTV7S4360C1[];
Class_Descriptor cd_S4360C1 = {  "S4360C1", // class name
  bases_S4360C1, 2,
  &(vtc_S4360C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1488,1428), // object size
  NSPAIRA(_ZTI7S4360C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4360C1),10, //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  S4733C3  {
  ::S4473C12_nt s4733c3f0;
  int s4733c3f1[2];
  char s4733c3f2;
  virtual  ~S4733C3(); // _ZN7S4733C3D1Ev
  virtual void  v3(); // _ZN7S4733C32v3Ev
  virtual void  v4(); // _ZN7S4733C32v4Ev
  virtual void  v5(); // _ZN7S4733C32v5Ev
  S4733C3(); // tgen
};
//SIG(-1 S4733C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4733C3 ::~S4733C3(){ note_dtor("S4733C3", this);}
void  S4733C3 ::v3(){vfunc_called(this, "_ZN7S4733C32v3Ev");}
void  S4733C3 ::v4(){vfunc_called(this, "_ZN7S4733C32v4Ev");}
void  S4733C3 ::v5(){vfunc_called(this, "_ZN7S4733C32v5Ev");}
S4733C3 ::S4733C3(){ note_ctor("S4733C3", this);} // tgen

static void Test_S4733C3()
{
  extern Class_Descriptor cd_S4733C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4733C3, buf);
    S4733C3 *dp, &lv = *(dp=new (buf) S4733C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4733C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4733C3)");
    check_field_offset(lv, s4733c3f0, ABISELECT(8,4), "S4733C3.s4733c3f0");
    check_field_offset(lv, s4733c3f1, ABISELECT(24,16), "S4733C3.s4733c3f1");
    check_field_offset(lv, s4733c3f2, ABISELECT(32,24), "S4733C3.s4733c3f2");
    test_class_info(&lv, &cd_S4733C3);
    dp->~S4733C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4733C3(Test_S4733C3, "S4733C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4733C3C1Ev();
extern void _ZN7S4733C3D1Ev();
Name_Map name_map_S4733C3[] = {
  NSPAIR(_ZN7S4733C3C1Ev),
  NSPAIR(_ZN7S4733C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4733C3[];
extern void _ZN7S4733C3D1Ev();
extern void _ZN7S4733C3D0Ev();
extern void _ZN7S4733C32v3Ev();
extern void _ZN7S4733C32v4Ev();
extern void _ZN7S4733C32v5Ev();
static  VTBL_ENTRY vtc_S4733C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4733C3[0]),
  (VTBL_ENTRY)&_ZN7S4733C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4733C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4733C3[];
extern  VTBL_ENTRY _ZTV7S4733C3[];
Class_Descriptor cd_S4733C3 = {  "S4733C3", // class name
  0,0,//no base classes
  &(vtc_S4733C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4733C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4733C3),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  S4733C2  : S4733C3 {
  void *s4733c2f0;
  virtual void  v6(); // _ZN7S4733C22v6Ev
  virtual void  v7(); // _ZN7S4733C22v7Ev
  ~S4733C2(); // tgen
  S4733C2(); // tgen
};
//SIG(-1 S4733C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4733C2 ::v6(){vfunc_called(this, "_ZN7S4733C22v6Ev");}
void  S4733C2 ::v7(){vfunc_called(this, "_ZN7S4733C22v7Ev");}
S4733C2 ::~S4733C2(){ note_dtor("S4733C2", this);} // tgen
S4733C2 ::S4733C2(){ note_ctor("S4733C2", this);} // tgen

static void Test_S4733C2()
{
  extern Class_Descriptor cd_S4733C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4733C2, buf);
    S4733C2 *dp, &lv = *(dp=new (buf) S4733C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4733C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4733C2)");
    check_base_class_offset(lv, (S4733C3*), 0, "S4733C2");
    check_field_offset(lv, s4733c2f0, ABISELECT(40,28), "S4733C2.s4733c2f0");
    test_class_info(&lv, &cd_S4733C2);
    dp->~S4733C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4733C2(Test_S4733C2, "S4733C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4733C2C1Ev();
extern void _ZN7S4733C2D1Ev();
Name_Map name_map_S4733C2[] = {
  NSPAIR(_ZN7S4733C2C1Ev),
  NSPAIR(_ZN7S4733C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4733C3;
extern VTBL_ENTRY _ZTI7S4733C3[];
extern  VTBL_ENTRY _ZTV7S4733C3[];
static Base_Class bases_S4733C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4733C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4733C2[];
extern void _ZN7S4733C2D1Ev();
extern void _ZN7S4733C2D0Ev();
extern void _ZN7S4733C32v3Ev();
extern void _ZN7S4733C32v4Ev();
extern void _ZN7S4733C32v5Ev();
extern void _ZN7S4733C22v6Ev();
extern void _ZN7S4733C22v7Ev();
static  VTBL_ENTRY vtc_S4733C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4733C2[0]),
  (VTBL_ENTRY)&_ZN7S4733C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4733C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4733C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4733C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4733C2[];
extern  VTBL_ENTRY _ZTV7S4733C2[];
Class_Descriptor cd_S4733C2 = {  "S4733C2", // class name
  bases_S4733C2, 1,
  &(vtc_S4733C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4733C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4733C2),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  S4733C1  : S4733C2 {
  ::S2173C10_nt s4733c1f0;
  ::S5305C9_nt s4733c1f1;
  int s4733c1f2[2];
  void *s4733c1f3[2];
  ::S2173C14 s4733c1f4;
  char s4733c1f5;
  virtual void  v1(); // _ZN7S4733C12v1Ev
  virtual void  v2(); // _ZN7S4733C12v2Ev
  ~S4733C1(); // tgen
  S4733C1(); // tgen
};
//SIG(1 S4733C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} v1 v2 FC6{ m FC7{ FL[4]}} FC8{ m Fp FC9{ Fi[4]}} Fi[2] Fp[2] FC10{ m Fp Fi[2] FC11{ m}} Fc}


void  S4733C1 ::v1(){vfunc_called(this, "_ZN7S4733C12v1Ev");}
void  S4733C1 ::v2(){vfunc_called(this, "_ZN7S4733C12v2Ev");}
S4733C1 ::~S4733C1(){ note_dtor("S4733C1", this);} // tgen
S4733C1 ::S4733C1(){ note_ctor("S4733C1", this);} // tgen

static void Test_S4733C1()
{
  extern Class_Descriptor cd_S4733C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,31)];
    init_test(&cd_S4733C1, buf);
    S4733C1 *dp, &lv = *(dp=new (buf) S4733C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,120), "sizeof(S4733C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4733C1)");
    check_base_class_offset(lv, (S4733C3*)(S4733C2*), 0, "S4733C1");
    check_base_class_offset(lv, (S4733C2*), 0, "S4733C1");
    check_field_offset(lv, s4733c1f0, ABISELECT(48,32), "S4733C1.s4733c1f0");
    check_field_offset(lv, s4733c1f1, ABISELECT(80,64), "S4733C1.s4733c1f1");
    check_field_offset(lv, s4733c1f2, ABISELECT(104,84), "S4733C1.s4733c1f2");
    check_field_offset(lv, s4733c1f3, ABISELECT(112,92), "S4733C1.s4733c1f3");
    check_field_offset(lv, s4733c1f4, ABISELECT(128,100), "S4733C1.s4733c1f4");
    check_field_offset(lv, s4733c1f5, ABISELECT(152,116), "S4733C1.s4733c1f5");
    test_class_info(&lv, &cd_S4733C1);
    dp->~S4733C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4733C1(Test_S4733C1, "S4733C1", ABISELECT(160,120));

#else // __cplusplus

extern void _ZN7S4733C1C1Ev();
extern void _ZN7S4733C1D1Ev();
Name_Map name_map_S4733C1[] = {
  NSPAIR(_ZN7S4733C1C1Ev),
  NSPAIR(_ZN7S4733C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4733C3;
extern VTBL_ENTRY _ZTI7S4733C3[];
extern  VTBL_ENTRY _ZTV7S4733C3[];
extern Class_Descriptor cd_S4733C2;
extern VTBL_ENTRY _ZTI7S4733C2[];
extern  VTBL_ENTRY _ZTV7S4733C2[];
static Base_Class bases_S4733C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4733C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4733C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4733C1[];
extern void _ZN7S4733C1D1Ev();
extern void _ZN7S4733C1D0Ev();
extern void _ZN7S4733C32v3Ev();
extern void _ZN7S4733C32v4Ev();
extern void _ZN7S4733C32v5Ev();
extern void _ZN7S4733C22v6Ev();
extern void _ZN7S4733C22v7Ev();
extern void _ZN7S4733C12v1Ev();
extern void _ZN7S4733C12v2Ev();
static  VTBL_ENTRY vtc_S4733C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4733C1[0]),
  (VTBL_ENTRY)&_ZN7S4733C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4733C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4733C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4733C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4733C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4733C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4733C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4733C1[];
extern  VTBL_ENTRY _ZTV7S4733C1[];
Class_Descriptor cd_S4733C1 = {  "S4733C1", // class name
  bases_S4733C1, 2,
  &(vtc_S4733C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,120), // object size
  NSPAIRA(_ZTI7S4733C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4733C1),11, //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  S4384C3  {
  ::S4473C12_nt s4384c3f0;
  int s4384c3f1[2];
  char s4384c3f2;
  virtual  ~S4384C3(); // _ZN7S4384C3D1Ev
  virtual void  v2(); // _ZN7S4384C32v2Ev
  virtual void  v3(); // _ZN7S4384C32v3Ev
  virtual void  v4(); // _ZN7S4384C32v4Ev
  S4384C3(); // tgen
};
//SIG(-1 S4384C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4384C3 ::~S4384C3(){ note_dtor("S4384C3", this);}
void  S4384C3 ::v2(){vfunc_called(this, "_ZN7S4384C32v2Ev");}
void  S4384C3 ::v3(){vfunc_called(this, "_ZN7S4384C32v3Ev");}
void  S4384C3 ::v4(){vfunc_called(this, "_ZN7S4384C32v4Ev");}
S4384C3 ::S4384C3(){ note_ctor("S4384C3", this);} // tgen

static void Test_S4384C3()
{
  extern Class_Descriptor cd_S4384C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4384C3, buf);
    S4384C3 *dp, &lv = *(dp=new (buf) S4384C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4384C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4384C3)");
    check_field_offset(lv, s4384c3f0, ABISELECT(8,4), "S4384C3.s4384c3f0");
    check_field_offset(lv, s4384c3f1, ABISELECT(24,16), "S4384C3.s4384c3f1");
    check_field_offset(lv, s4384c3f2, ABISELECT(32,24), "S4384C3.s4384c3f2");
    test_class_info(&lv, &cd_S4384C3);
    dp->~S4384C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4384C3(Test_S4384C3, "S4384C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4384C3C1Ev();
extern void _ZN7S4384C3D1Ev();
Name_Map name_map_S4384C3[] = {
  NSPAIR(_ZN7S4384C3C1Ev),
  NSPAIR(_ZN7S4384C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4384C3[];
extern void _ZN7S4384C3D1Ev();
extern void _ZN7S4384C3D0Ev();
extern void _ZN7S4384C32v2Ev();
extern void _ZN7S4384C32v3Ev();
extern void _ZN7S4384C32v4Ev();
static  VTBL_ENTRY vtc_S4384C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4384C3[0]),
  (VTBL_ENTRY)&_ZN7S4384C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4384C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4384C3[];
extern  VTBL_ENTRY _ZTV7S4384C3[];
Class_Descriptor cd_S4384C3 = {  "S4384C3", // class name
  0,0,//no base classes
  &(vtc_S4384C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4384C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4384C3),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  S4384C2  : S4384C3 {
  void *s4384c2f0;
  virtual void  v5(); // _ZN7S4384C22v5Ev
  virtual void  v6(); // _ZN7S4384C22v6Ev
  ~S4384C2(); // tgen
  S4384C2(); // tgen
};
//SIG(-1 S4384C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4384C2 ::v5(){vfunc_called(this, "_ZN7S4384C22v5Ev");}
void  S4384C2 ::v6(){vfunc_called(this, "_ZN7S4384C22v6Ev");}
S4384C2 ::~S4384C2(){ note_dtor("S4384C2", this);} // tgen
S4384C2 ::S4384C2(){ note_ctor("S4384C2", this);} // tgen

static void Test_S4384C2()
{
  extern Class_Descriptor cd_S4384C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4384C2, buf);
    S4384C2 *dp, &lv = *(dp=new (buf) S4384C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4384C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4384C2)");
    check_base_class_offset(lv, (S4384C3*), 0, "S4384C2");
    check_field_offset(lv, s4384c2f0, ABISELECT(40,28), "S4384C2.s4384c2f0");
    test_class_info(&lv, &cd_S4384C2);
    dp->~S4384C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4384C2(Test_S4384C2, "S4384C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4384C2C1Ev();
extern void _ZN7S4384C2D1Ev();
Name_Map name_map_S4384C2[] = {
  NSPAIR(_ZN7S4384C2C1Ev),
  NSPAIR(_ZN7S4384C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4384C3;
extern VTBL_ENTRY _ZTI7S4384C3[];
extern  VTBL_ENTRY _ZTV7S4384C3[];
static Base_Class bases_S4384C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4384C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4384C2[];
extern void _ZN7S4384C2D1Ev();
extern void _ZN7S4384C2D0Ev();
extern void _ZN7S4384C32v2Ev();
extern void _ZN7S4384C32v3Ev();
extern void _ZN7S4384C32v4Ev();
extern void _ZN7S4384C22v5Ev();
extern void _ZN7S4384C22v6Ev();
static  VTBL_ENTRY vtc_S4384C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4384C2[0]),
  (VTBL_ENTRY)&_ZN7S4384C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4384C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4384C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4384C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4384C2[];
extern  VTBL_ENTRY _ZTV7S4384C2[];
Class_Descriptor cd_S4384C2 = {  "S4384C2", // class name
  bases_S4384C2, 1,
  &(vtc_S4384C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4384C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4384C2),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  S4384C8_nt  : S4465C14_nt {
};
//SIG(-1 S4384C8_nt) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



//skip512 S4384C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S4465C14_nt;
static Base_Class bases_S4384C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4465C14_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  S4384C1  : S4384C2 {
  ::S2173C14 s4384c1f0;
  ::S2173C14 s4384c1f1;
  ::S4384C8_nt s4384c1f2;
  ::S4473C12_nt s4384c1f3;
  ::S4473C12_nt s4384c1f4;
  int s4384c1f5[2];
  char s4384c1f6;
  virtual void  v1(); // _ZN7S4384C12v1Ev
  ~S4384C1(); // tgen
  S4384C1(); // tgen
};
//SIG(1 S4384C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC6{ m Fp Fi[2] FC7{ m}} FC6 FC8{ BC9{ m Fp Fi FC5 FC7}} FC4 FC4 Fi[2] Fc}


void  S4384C1 ::v1(){vfunc_called(this, "_ZN7S4384C12v1Ev");}
S4384C1 ::~S4384C1(){ note_dtor("S4384C1", this);} // tgen
S4384C1 ::S4384C1(){ note_ctor("S4384C1", this);} // tgen

static void Test_S4384C1()
{
  extern Class_Descriptor cd_S4384C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S4384C1, buf);
    S4384C1 *dp, &lv = *(dp=new (buf) S4384C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S4384C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4384C1)");
    check_base_class_offset(lv, (S4384C3*)(S4384C2*), 0, "S4384C1");
    check_base_class_offset(lv, (S4384C2*), 0, "S4384C1");
    check_field_offset(lv, s4384c1f0, ABISELECT(48,32), "S4384C1.s4384c1f0");
    check_field_offset(lv, s4384c1f1, ABISELECT(72,48), "S4384C1.s4384c1f1");
    check_field_offset(lv, s4384c1f2, ABISELECT(96,64), "S4384C1.s4384c1f2");
    check_field_offset(lv, s4384c1f3, ABISELECT(112,76), "S4384C1.s4384c1f3");
    check_field_offset(lv, s4384c1f4, ABISELECT(128,88), "S4384C1.s4384c1f4");
    check_field_offset(lv, s4384c1f5, ABISELECT(144,100), "S4384C1.s4384c1f5");
    check_field_offset(lv, s4384c1f6, ABISELECT(152,108), "S4384C1.s4384c1f6");
    test_class_info(&lv, &cd_S4384C1);
    dp->~S4384C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4384C1(Test_S4384C1, "S4384C1", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN7S4384C1C1Ev();
extern void _ZN7S4384C1D1Ev();
Name_Map name_map_S4384C1[] = {
  NSPAIR(_ZN7S4384C1C1Ev),
  NSPAIR(_ZN7S4384C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4384C3;
extern VTBL_ENTRY _ZTI7S4384C3[];
extern  VTBL_ENTRY _ZTV7S4384C3[];
extern Class_Descriptor cd_S4384C2;
extern VTBL_ENTRY _ZTI7S4384C2[];
extern  VTBL_ENTRY _ZTV7S4384C2[];
static Base_Class bases_S4384C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4384C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4384C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4384C1[];
extern void _ZN7S4384C1D1Ev();
extern void _ZN7S4384C1D0Ev();
extern void _ZN7S4384C32v2Ev();
extern void _ZN7S4384C32v3Ev();
extern void _ZN7S4384C32v4Ev();
extern void _ZN7S4384C22v5Ev();
extern void _ZN7S4384C22v6Ev();
extern void _ZN7S4384C12v1Ev();
static  VTBL_ENTRY vtc_S4384C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4384C1[0]),
  (VTBL_ENTRY)&_ZN7S4384C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4384C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4384C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4384C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4384C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4384C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4384C1[];
extern  VTBL_ENTRY _ZTV7S4384C1[];
Class_Descriptor cd_S4384C1 = {  "S4384C1", // class name
  bases_S4384C1, 2,
  &(vtc_S4384C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI7S4384C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4384C1),10, //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  S4735C3  {
  ::S4473C12_nt s4735c3f0;
  int s4735c3f1[2];
  char s4735c3f2;
  virtual  ~S4735C3(); // _ZN7S4735C3D1Ev
  virtual void  v3(); // _ZN7S4735C32v3Ev
  virtual void  v4(); // _ZN7S4735C32v4Ev
  virtual void  v5(); // _ZN7S4735C32v5Ev
  S4735C3(); // tgen
};
//SIG(-1 S4735C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4735C3 ::~S4735C3(){ note_dtor("S4735C3", this);}
void  S4735C3 ::v3(){vfunc_called(this, "_ZN7S4735C32v3Ev");}
void  S4735C3 ::v4(){vfunc_called(this, "_ZN7S4735C32v4Ev");}
void  S4735C3 ::v5(){vfunc_called(this, "_ZN7S4735C32v5Ev");}
S4735C3 ::S4735C3(){ note_ctor("S4735C3", this);} // tgen

static void Test_S4735C3()
{
  extern Class_Descriptor cd_S4735C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4735C3, buf);
    S4735C3 *dp, &lv = *(dp=new (buf) S4735C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4735C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4735C3)");
    check_field_offset(lv, s4735c3f0, ABISELECT(8,4), "S4735C3.s4735c3f0");
    check_field_offset(lv, s4735c3f1, ABISELECT(24,16), "S4735C3.s4735c3f1");
    check_field_offset(lv, s4735c3f2, ABISELECT(32,24), "S4735C3.s4735c3f2");
    test_class_info(&lv, &cd_S4735C3);
    dp->~S4735C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4735C3(Test_S4735C3, "S4735C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4735C3C1Ev();
extern void _ZN7S4735C3D1Ev();
Name_Map name_map_S4735C3[] = {
  NSPAIR(_ZN7S4735C3C1Ev),
  NSPAIR(_ZN7S4735C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4735C3[];
extern void _ZN7S4735C3D1Ev();
extern void _ZN7S4735C3D0Ev();
extern void _ZN7S4735C32v3Ev();
extern void _ZN7S4735C32v4Ev();
extern void _ZN7S4735C32v5Ev();
static  VTBL_ENTRY vtc_S4735C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4735C3[0]),
  (VTBL_ENTRY)&_ZN7S4735C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4735C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4735C3[];
extern  VTBL_ENTRY _ZTV7S4735C3[];
Class_Descriptor cd_S4735C3 = {  "S4735C3", // class name
  0,0,//no base classes
  &(vtc_S4735C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4735C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4735C3),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  S4735C2  : S4735C3 {
  void *s4735c2f0;
  virtual void  v6(); // _ZN7S4735C22v6Ev
  virtual void  v7(); // _ZN7S4735C22v7Ev
  ~S4735C2(); // tgen
  S4735C2(); // tgen
};
//SIG(-1 S4735C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4735C2 ::v6(){vfunc_called(this, "_ZN7S4735C22v6Ev");}
void  S4735C2 ::v7(){vfunc_called(this, "_ZN7S4735C22v7Ev");}
S4735C2 ::~S4735C2(){ note_dtor("S4735C2", this);} // tgen
S4735C2 ::S4735C2(){ note_ctor("S4735C2", this);} // tgen

static void Test_S4735C2()
{
  extern Class_Descriptor cd_S4735C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4735C2, buf);
    S4735C2 *dp, &lv = *(dp=new (buf) S4735C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4735C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4735C2)");
    check_base_class_offset(lv, (S4735C3*), 0, "S4735C2");
    check_field_offset(lv, s4735c2f0, ABISELECT(40,28), "S4735C2.s4735c2f0");
    test_class_info(&lv, &cd_S4735C2);
    dp->~S4735C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4735C2(Test_S4735C2, "S4735C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4735C2C1Ev();
extern void _ZN7S4735C2D1Ev();
Name_Map name_map_S4735C2[] = {
  NSPAIR(_ZN7S4735C2C1Ev),
  NSPAIR(_ZN7S4735C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4735C3;
extern VTBL_ENTRY _ZTI7S4735C3[];
extern  VTBL_ENTRY _ZTV7S4735C3[];
static Base_Class bases_S4735C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4735C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4735C2[];
extern void _ZN7S4735C2D1Ev();
extern void _ZN7S4735C2D0Ev();
extern void _ZN7S4735C32v3Ev();
extern void _ZN7S4735C32v4Ev();
extern void _ZN7S4735C32v5Ev();
extern void _ZN7S4735C22v6Ev();
extern void _ZN7S4735C22v7Ev();
static  VTBL_ENTRY vtc_S4735C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4735C2[0]),
  (VTBL_ENTRY)&_ZN7S4735C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4735C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4735C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4735C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4735C2[];
extern  VTBL_ENTRY _ZTV7S4735C2[];
Class_Descriptor cd_S4735C2 = {  "S4735C2", // class name
  bases_S4735C2, 1,
  &(vtc_S4735C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4735C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4735C2),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  S4735C1  : S4735C2 {
  ::S5306C7_nt s4735c1f0;
  ::S5305C9_nt s4735c1f1;
  int s4735c1f2[2];
  void *s4735c1f3[2];
  ::S2173C14 s4735c1f4;
  char s4735c1f5;
  virtual void  v1(); // _ZN7S4735C12v1Ev
  virtual void  v2(); // _ZN7S4735C12v2Ev
  ~S4735C1(); // tgen
  S4735C1(); // tgen
};
//SIG(1 S4735C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} v1 v2 FC6{ m FL[4]} FC7{ m Fp FC8{ Fi[4]}} Fi[2] Fp[2] FC9{ m Fp Fi[2] FC10{ m}} Fc}


void  S4735C1 ::v1(){vfunc_called(this, "_ZN7S4735C12v1Ev");}
void  S4735C1 ::v2(){vfunc_called(this, "_ZN7S4735C12v2Ev");}
S4735C1 ::~S4735C1(){ note_dtor("S4735C1", this);} // tgen
S4735C1 ::S4735C1(){ note_ctor("S4735C1", this);} // tgen

static void Test_S4735C1()
{
  extern Class_Descriptor cd_S4735C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,31)];
    init_test(&cd_S4735C1, buf);
    S4735C1 *dp, &lv = *(dp=new (buf) S4735C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,120), "sizeof(S4735C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4735C1)");
    check_base_class_offset(lv, (S4735C3*)(S4735C2*), 0, "S4735C1");
    check_base_class_offset(lv, (S4735C2*), 0, "S4735C1");
    check_field_offset(lv, s4735c1f0, ABISELECT(48,32), "S4735C1.s4735c1f0");
    check_field_offset(lv, s4735c1f1, ABISELECT(80,64), "S4735C1.s4735c1f1");
    check_field_offset(lv, s4735c1f2, ABISELECT(104,84), "S4735C1.s4735c1f2");
    check_field_offset(lv, s4735c1f3, ABISELECT(112,92), "S4735C1.s4735c1f3");
    check_field_offset(lv, s4735c1f4, ABISELECT(128,100), "S4735C1.s4735c1f4");
    check_field_offset(lv, s4735c1f5, ABISELECT(152,116), "S4735C1.s4735c1f5");
    test_class_info(&lv, &cd_S4735C1);
    dp->~S4735C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4735C1(Test_S4735C1, "S4735C1", ABISELECT(160,120));

#else // __cplusplus

extern void _ZN7S4735C1C1Ev();
extern void _ZN7S4735C1D1Ev();
Name_Map name_map_S4735C1[] = {
  NSPAIR(_ZN7S4735C1C1Ev),
  NSPAIR(_ZN7S4735C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4735C3;
extern VTBL_ENTRY _ZTI7S4735C3[];
extern  VTBL_ENTRY _ZTV7S4735C3[];
extern Class_Descriptor cd_S4735C2;
extern VTBL_ENTRY _ZTI7S4735C2[];
extern  VTBL_ENTRY _ZTV7S4735C2[];
static Base_Class bases_S4735C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4735C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4735C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4735C1[];
extern void _ZN7S4735C1D1Ev();
extern void _ZN7S4735C1D0Ev();
extern void _ZN7S4735C32v3Ev();
extern void _ZN7S4735C32v4Ev();
extern void _ZN7S4735C32v5Ev();
extern void _ZN7S4735C22v6Ev();
extern void _ZN7S4735C22v7Ev();
extern void _ZN7S4735C12v1Ev();
extern void _ZN7S4735C12v2Ev();
static  VTBL_ENTRY vtc_S4735C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4735C1[0]),
  (VTBL_ENTRY)&_ZN7S4735C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4735C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4735C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4735C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4735C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4735C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4735C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4735C1[];
extern  VTBL_ENTRY _ZTV7S4735C1[];
Class_Descriptor cd_S4735C1 = {  "S4735C1", // class name
  bases_S4735C1, 2,
  &(vtc_S4735C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,120), // object size
  NSPAIRA(_ZTI7S4735C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4735C1),11, //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  S5082C3  {
  ::S4473C12_nt s5082c3f0;
  int s5082c3f1[2];
  char s5082c3f2;
  virtual  ~S5082C3(); // _ZN7S5082C3D1Ev
  virtual void  v4(); // _ZN7S5082C32v4Ev
  virtual void  v5(); // _ZN7S5082C32v5Ev
  virtual void  v6(); // _ZN7S5082C32v6Ev
  S5082C3(); // tgen
};
//SIG(-1 S5082C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5082C3 ::~S5082C3(){ note_dtor("S5082C3", this);}
void  S5082C3 ::v4(){vfunc_called(this, "_ZN7S5082C32v4Ev");}
void  S5082C3 ::v5(){vfunc_called(this, "_ZN7S5082C32v5Ev");}
void  S5082C3 ::v6(){vfunc_called(this, "_ZN7S5082C32v6Ev");}
S5082C3 ::S5082C3(){ note_ctor("S5082C3", this);} // tgen

static void Test_S5082C3()
{
  extern Class_Descriptor cd_S5082C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5082C3, buf);
    S5082C3 *dp, &lv = *(dp=new (buf) S5082C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5082C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5082C3)");
    check_field_offset(lv, s5082c3f0, ABISELECT(8,4), "S5082C3.s5082c3f0");
    check_field_offset(lv, s5082c3f1, ABISELECT(24,16), "S5082C3.s5082c3f1");
    check_field_offset(lv, s5082c3f2, ABISELECT(32,24), "S5082C3.s5082c3f2");
    test_class_info(&lv, &cd_S5082C3);
    dp->~S5082C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5082C3(Test_S5082C3, "S5082C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5082C3C1Ev();
extern void _ZN7S5082C3D1Ev();
Name_Map name_map_S5082C3[] = {
  NSPAIR(_ZN7S5082C3C1Ev),
  NSPAIR(_ZN7S5082C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5082C3[];
extern void _ZN7S5082C3D1Ev();
extern void _ZN7S5082C3D0Ev();
extern void _ZN7S5082C32v4Ev();
extern void _ZN7S5082C32v5Ev();
extern void _ZN7S5082C32v6Ev();
static  VTBL_ENTRY vtc_S5082C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5082C3[0]),
  (VTBL_ENTRY)&_ZN7S5082C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5082C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5082C3[];
extern  VTBL_ENTRY _ZTV7S5082C3[];
Class_Descriptor cd_S5082C3 = {  "S5082C3", // class name
  0,0,//no base classes
  &(vtc_S5082C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5082C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5082C3),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  S5082C2  : S5082C3 {
  void *s5082c2f0;
  virtual void  v7(); // _ZN7S5082C22v7Ev
  virtual void  v8(); // _ZN7S5082C22v8Ev
  ~S5082C2(); // tgen
  S5082C2(); // tgen
};
//SIG(-1 S5082C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5082C2 ::v7(){vfunc_called(this, "_ZN7S5082C22v7Ev");}
void  S5082C2 ::v8(){vfunc_called(this, "_ZN7S5082C22v8Ev");}
S5082C2 ::~S5082C2(){ note_dtor("S5082C2", this);} // tgen
S5082C2 ::S5082C2(){ note_ctor("S5082C2", this);} // tgen

static void Test_S5082C2()
{
  extern Class_Descriptor cd_S5082C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5082C2, buf);
    S5082C2 *dp, &lv = *(dp=new (buf) S5082C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5082C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5082C2)");
    check_base_class_offset(lv, (S5082C3*), 0, "S5082C2");
    check_field_offset(lv, s5082c2f0, ABISELECT(40,28), "S5082C2.s5082c2f0");
    test_class_info(&lv, &cd_S5082C2);
    dp->~S5082C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5082C2(Test_S5082C2, "S5082C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5082C2C1Ev();
extern void _ZN7S5082C2D1Ev();
Name_Map name_map_S5082C2[] = {
  NSPAIR(_ZN7S5082C2C1Ev),
  NSPAIR(_ZN7S5082C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5082C3;
extern VTBL_ENTRY _ZTI7S5082C3[];
extern  VTBL_ENTRY _ZTV7S5082C3[];
static Base_Class bases_S5082C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5082C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S5082C2[];
extern void _ZN7S5082C2D1Ev();
extern void _ZN7S5082C2D0Ev();
extern void _ZN7S5082C32v4Ev();
extern void _ZN7S5082C32v5Ev();
extern void _ZN7S5082C32v6Ev();
extern void _ZN7S5082C22v7Ev();
extern void _ZN7S5082C22v8Ev();
static  VTBL_ENTRY vtc_S5082C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5082C2[0]),
  (VTBL_ENTRY)&_ZN7S5082C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5082C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5082C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5082C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5082C2[];
extern  VTBL_ENTRY _ZTV7S5082C2[];
Class_Descriptor cd_S5082C2 = {  "S5082C2", // class name
  bases_S5082C2, 1,
  &(vtc_S5082C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5082C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5082C2),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  S5082C10_nt  {
  char s5082c10f0[20];
};
//SIG(-1 S5082C10_nt) C1{ Fc[20]}



//skip512 S5082C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5082C9_nt  {
  ::S5082C10_nt s5082c9f0;
  char s5082c9f1[16];
};
//SIG(-1 S5082C9_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S5082C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5082C1  : S5082C2 {
  ::S2173C10_nt s5082c1f0;
  int s5082c1f1[2];
  void *s5082c1f2;
  ::S2366C19 s5082c1f3;
  void *s5082c1f4;
  ::S5082C9_nt s5082c1f5;
  virtual  ~S5082C1(); // _ZN7S5082C1D1Ev
  virtual void  v1(); // _ZN7S5082C12v1Ev
  virtual void  v2(); // _ZN7S5082C12v2Ev
  virtual void  v3(); // _ZN7S5082C12v3Ev
  S5082C1(); // tgen
};
//SIG(1 S5082C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 FC6{ m FC7{ FL[4]}} Fi[2] Fp FC8{ m Fp} Fp FC9{ FC10{ Fc[20]} Fc[16]}}


 S5082C1 ::~S5082C1(){ note_dtor("S5082C1", this);}
void  S5082C1 ::v1(){vfunc_called(this, "_ZN7S5082C12v1Ev");}
void  S5082C1 ::v2(){vfunc_called(this, "_ZN7S5082C12v2Ev");}
void  S5082C1 ::v3(){vfunc_called(this, "_ZN7S5082C12v3Ev");}
S5082C1 ::S5082C1(){ note_ctor("S5082C1", this);} // tgen

static void Test_S5082C1()
{
  extern Class_Descriptor cd_S5082C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,31)];
    init_test(&cd_S5082C1, buf);
    S5082C1 *dp, &lv = *(dp=new (buf) S5082C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,120), "sizeof(S5082C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5082C1)");
    check_base_class_offset(lv, (S5082C3*)(S5082C2*), 0, "S5082C1");
    check_base_class_offset(lv, (S5082C2*), 0, "S5082C1");
    check_field_offset(lv, s5082c1f0, ABISELECT(48,32), "S5082C1.s5082c1f0");
    check_field_offset(lv, s5082c1f1, ABISELECT(80,64), "S5082C1.s5082c1f1");
    check_field_offset(lv, s5082c1f2, ABISELECT(88,72), "S5082C1.s5082c1f2");
    check_field_offset(lv, s5082c1f3, ABISELECT(96,76), "S5082C1.s5082c1f3");
    check_field_offset(lv, s5082c1f4, ABISELECT(104,80), "S5082C1.s5082c1f4");
    check_field_offset(lv, s5082c1f5, ABISELECT(112,84), "S5082C1.s5082c1f5");
    test_class_info(&lv, &cd_S5082C1);
    dp->~S5082C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5082C1(Test_S5082C1, "S5082C1", ABISELECT(152,120));

#else // __cplusplus

extern void _ZN7S5082C1C1Ev();
extern void _ZN7S5082C1D1Ev();
Name_Map name_map_S5082C1[] = {
  NSPAIR(_ZN7S5082C1C1Ev),
  NSPAIR(_ZN7S5082C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5082C3;
extern VTBL_ENTRY _ZTI7S5082C3[];
extern  VTBL_ENTRY _ZTV7S5082C3[];
extern Class_Descriptor cd_S5082C2;
extern VTBL_ENTRY _ZTI7S5082C2[];
extern  VTBL_ENTRY _ZTV7S5082C2[];
static Base_Class bases_S5082C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5082C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5082C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5082C1[];
extern void _ZN7S5082C1D1Ev();
extern void _ZN7S5082C1D0Ev();
extern void _ZN7S5082C32v4Ev();
extern void _ZN7S5082C32v5Ev();
extern void _ZN7S5082C32v6Ev();
extern void _ZN7S5082C22v7Ev();
extern void _ZN7S5082C22v8Ev();
extern void _ZN7S5082C12v1Ev();
extern void _ZN7S5082C12v2Ev();
extern void _ZN7S5082C12v3Ev();
static  VTBL_ENTRY vtc_S5082C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5082C1[0]),
  (VTBL_ENTRY)&_ZN7S5082C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5082C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5082C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5082C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5082C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5082C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5082C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5082C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5082C1[];
extern  VTBL_ENTRY _ZTV7S5082C1[];
Class_Descriptor cd_S5082C1 = {  "S5082C1", // class name
  bases_S5082C1, 2,
  &(vtc_S5082C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,120), // object size
  NSPAIRA(_ZTI7S5082C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5082C1),12, //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  S16485C1  {
  ::S19572C18 s16485c1f0;
  void  mf16485c1(); // _ZN8S16485C19mf16485c1Ev
};
//SIG(1 S16485C1) C1{ m FC2{ VBC3{ BC4{ m Fs:13}} VBC5{ VBC3} VBC6{ VBC4 VBC3 BC5 BC7{ BC8{ VBC4} BC3 vd} BC8 vd FD[5]} BC8 v1 FC9{ VBC10{ VBC4} VBC8 BC4 VBC3 vd Fi}}}


void  S16485C1 ::mf16485c1(){}

static void Test_S16485C1()
{
  {
    init_simple_test("S16485C1");
    static S16485C1 lv;
    check2(sizeof(lv), ABISELECT(192,116), "sizeof(S16485C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16485C1)");
    check_field_offset(lv, s16485c1f0, 0, "S16485C1.s16485c1f0");
  }
}
static Arrange_To_Call_Me vS16485C1(Test_S16485C1, "S16485C1", ABISELECT(192,116));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4378C3  {
  ::S4473C12_nt s4378c3f0;
  int s4378c3f1[2];
  char s4378c3f2;
  virtual  ~S4378C3(); // _ZN7S4378C3D1Ev
  virtual void  v2(); // _ZN7S4378C32v2Ev
  virtual void  v3(); // _ZN7S4378C32v3Ev
  virtual void  v4(); // _ZN7S4378C32v4Ev
  S4378C3(); // tgen
};
//SIG(-1 S4378C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4378C3 ::~S4378C3(){ note_dtor("S4378C3", this);}
void  S4378C3 ::v2(){vfunc_called(this, "_ZN7S4378C32v2Ev");}
void  S4378C3 ::v3(){vfunc_called(this, "_ZN7S4378C32v3Ev");}
void  S4378C3 ::v4(){vfunc_called(this, "_ZN7S4378C32v4Ev");}
S4378C3 ::S4378C3(){ note_ctor("S4378C3", this);} // tgen

static void Test_S4378C3()
{
  extern Class_Descriptor cd_S4378C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4378C3, buf);
    S4378C3 *dp, &lv = *(dp=new (buf) S4378C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4378C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4378C3)");
    check_field_offset(lv, s4378c3f0, ABISELECT(8,4), "S4378C3.s4378c3f0");
    check_field_offset(lv, s4378c3f1, ABISELECT(24,16), "S4378C3.s4378c3f1");
    check_field_offset(lv, s4378c3f2, ABISELECT(32,24), "S4378C3.s4378c3f2");
    test_class_info(&lv, &cd_S4378C3);
    dp->~S4378C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4378C3(Test_S4378C3, "S4378C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4378C3C1Ev();
extern void _ZN7S4378C3D1Ev();
Name_Map name_map_S4378C3[] = {
  NSPAIR(_ZN7S4378C3C1Ev),
  NSPAIR(_ZN7S4378C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4378C3[];
extern void _ZN7S4378C3D1Ev();
extern void _ZN7S4378C3D0Ev();
extern void _ZN7S4378C32v2Ev();
extern void _ZN7S4378C32v3Ev();
extern void _ZN7S4378C32v4Ev();
static  VTBL_ENTRY vtc_S4378C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4378C3[0]),
  (VTBL_ENTRY)&_ZN7S4378C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4378C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4378C3[];
extern  VTBL_ENTRY _ZTV7S4378C3[];
Class_Descriptor cd_S4378C3 = {  "S4378C3", // class name
  0,0,//no base classes
  &(vtc_S4378C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4378C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4378C3),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  S4378C2  : S4378C3 {
  void *s4378c2f0;
  virtual void  v5(); // _ZN7S4378C22v5Ev
  virtual void  v6(); // _ZN7S4378C22v6Ev
  ~S4378C2(); // tgen
  S4378C2(); // tgen
};
//SIG(-1 S4378C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4378C2 ::v5(){vfunc_called(this, "_ZN7S4378C22v5Ev");}
void  S4378C2 ::v6(){vfunc_called(this, "_ZN7S4378C22v6Ev");}
S4378C2 ::~S4378C2(){ note_dtor("S4378C2", this);} // tgen
S4378C2 ::S4378C2(){ note_ctor("S4378C2", this);} // tgen

static void Test_S4378C2()
{
  extern Class_Descriptor cd_S4378C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4378C2, buf);
    S4378C2 *dp, &lv = *(dp=new (buf) S4378C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4378C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4378C2)");
    check_base_class_offset(lv, (S4378C3*), 0, "S4378C2");
    check_field_offset(lv, s4378c2f0, ABISELECT(40,28), "S4378C2.s4378c2f0");
    test_class_info(&lv, &cd_S4378C2);
    dp->~S4378C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4378C2(Test_S4378C2, "S4378C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4378C2C1Ev();
extern void _ZN7S4378C2D1Ev();
Name_Map name_map_S4378C2[] = {
  NSPAIR(_ZN7S4378C2C1Ev),
  NSPAIR(_ZN7S4378C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4378C3;
extern VTBL_ENTRY _ZTI7S4378C3[];
extern  VTBL_ENTRY _ZTV7S4378C3[];
static Base_Class bases_S4378C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4378C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4378C2[];
extern void _ZN7S4378C2D1Ev();
extern void _ZN7S4378C2D0Ev();
extern void _ZN7S4378C32v2Ev();
extern void _ZN7S4378C32v3Ev();
extern void _ZN7S4378C32v4Ev();
extern void _ZN7S4378C22v5Ev();
extern void _ZN7S4378C22v6Ev();
static  VTBL_ENTRY vtc_S4378C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4378C2[0]),
  (VTBL_ENTRY)&_ZN7S4378C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4378C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4378C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4378C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4378C2[];
extern  VTBL_ENTRY _ZTV7S4378C2[];
Class_Descriptor cd_S4378C2 = {  "S4378C2", // class name
  bases_S4378C2, 1,
  &(vtc_S4378C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4378C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4378C2),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  S4378C1  : S4378C2 {
  ::S2173C10_nt s4378c1f0;
  ::S5305C9_nt s4378c1f1;
  void *s4378c1f2[2];
  ::S2173C14 s4378c1f3;
  virtual void  v1(); // _ZN7S4378C12v1Ev
  ~S4378C1(); // tgen
  S4378C1(); // tgen
};
//SIG(1 S4378C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC6{ m FC7{ FL[4]}} FC8{ m Fp FC9{ Fi[4]}} Fp[2] FC10{ m Fp Fi[2] FC11{ m}}}


void  S4378C1 ::v1(){vfunc_called(this, "_ZN7S4378C12v1Ev");}
S4378C1 ::~S4378C1(){ note_dtor("S4378C1", this);} // tgen
S4378C1 ::S4378C1(){ note_ctor("S4378C1", this);} // tgen

static void Test_S4378C1()
{
  extern Class_Descriptor cd_S4378C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,28)];
    init_test(&cd_S4378C1, buf);
    S4378C1 *dp, &lv = *(dp=new (buf) S4378C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,108), "sizeof(S4378C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4378C1)");
    check_base_class_offset(lv, (S4378C3*)(S4378C2*), 0, "S4378C1");
    check_base_class_offset(lv, (S4378C2*), 0, "S4378C1");
    check_field_offset(lv, s4378c1f0, ABISELECT(48,32), "S4378C1.s4378c1f0");
    check_field_offset(lv, s4378c1f1, ABISELECT(80,64), "S4378C1.s4378c1f1");
    check_field_offset(lv, s4378c1f2, ABISELECT(104,84), "S4378C1.s4378c1f2");
    check_field_offset(lv, s4378c1f3, ABISELECT(120,92), "S4378C1.s4378c1f3");
    test_class_info(&lv, &cd_S4378C1);
    dp->~S4378C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4378C1(Test_S4378C1, "S4378C1", ABISELECT(144,108));

#else // __cplusplus

extern void _ZN7S4378C1C1Ev();
extern void _ZN7S4378C1D1Ev();
Name_Map name_map_S4378C1[] = {
  NSPAIR(_ZN7S4378C1C1Ev),
  NSPAIR(_ZN7S4378C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4378C3;
extern VTBL_ENTRY _ZTI7S4378C3[];
extern  VTBL_ENTRY _ZTV7S4378C3[];
extern Class_Descriptor cd_S4378C2;
extern VTBL_ENTRY _ZTI7S4378C2[];
extern  VTBL_ENTRY _ZTV7S4378C2[];
static Base_Class bases_S4378C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4378C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4378C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4378C1[];
extern void _ZN7S4378C1D1Ev();
extern void _ZN7S4378C1D0Ev();
extern void _ZN7S4378C32v2Ev();
extern void _ZN7S4378C32v3Ev();
extern void _ZN7S4378C32v4Ev();
extern void _ZN7S4378C22v5Ev();
extern void _ZN7S4378C22v6Ev();
extern void _ZN7S4378C12v1Ev();
static  VTBL_ENTRY vtc_S4378C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4378C1[0]),
  (VTBL_ENTRY)&_ZN7S4378C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4378C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4378C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4378C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4378C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4378C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4378C1[];
extern  VTBL_ENTRY _ZTV7S4378C1[];
Class_Descriptor cd_S4378C1 = {  "S4378C1", // class name
  bases_S4378C1, 2,
  &(vtc_S4378C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,108), // object size
  NSPAIRA(_ZTI7S4378C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4378C1),10, //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  S4479C3  {
  int s4479c3f0[4];
  ::S4474C4_nt s4479c3f1;
  int s4479c3f2;
  char s4479c3f3;
  ::S4474C5_nt s4479c3f4;
  int s4479c3f5;
  virtual  ~S4479C3(); // _ZN7S4479C3D1Ev
  virtual void  v2(); // _ZN7S4479C32v2Ev
  virtual void  v3(); // _ZN7S4479C32v3Ev
  virtual void  v4(); // _ZN7S4479C32v4Ev
  S4479C3(); // tgen
};
//SIG(-1 S4479C3) C1{ vd v1 v2 v3 Fi[4] FC2{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp} Fi Fc FC3{ vd m Fi[2]} Fi}


 S4479C3 ::~S4479C3(){ note_dtor("S4479C3", this);}
void  S4479C3 ::v2(){vfunc_called(this, "_ZN7S4479C32v2Ev");}
void  S4479C3 ::v3(){vfunc_called(this, "_ZN7S4479C32v3Ev");}
void  S4479C3 ::v4(){vfunc_called(this, "_ZN7S4479C32v4Ev");}
S4479C3 ::S4479C3(){ note_ctor("S4479C3", this);} // tgen

static void Test_S4479C3()
{
  extern Class_Descriptor cd_S4479C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4479C3, buf);
    S4479C3 *dp, &lv = *(dp=new (buf) S4479C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4479C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4479C3)");
    check_field_offset(lv, s4479c3f0, ABISELECT(8,4), "S4479C3.s4479c3f0");
    check_field_offset(lv, s4479c3f1, ABISELECT(24,20), "S4479C3.s4479c3f1");
    check_field_offset(lv, s4479c3f2, ABISELECT(40,28), "S4479C3.s4479c3f2");
    check_field_offset(lv, s4479c3f3, ABISELECT(44,32), "S4479C3.s4479c3f3");
    check_field_offset(lv, s4479c3f4, ABISELECT(48,36), "S4479C3.s4479c3f4");
    check_field_offset(lv, s4479c3f5, ABISELECT(64,48), "S4479C3.s4479c3f5");
    test_class_info(&lv, &cd_S4479C3);
    dp->~S4479C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4479C3(Test_S4479C3, "S4479C3", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4479C3C1Ev();
extern void _ZN7S4479C3D1Ev();
Name_Map name_map_S4479C3[] = {
  NSPAIR(_ZN7S4479C3C1Ev),
  NSPAIR(_ZN7S4479C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4479C3[];
extern void _ZN7S4479C3D1Ev();
extern void _ZN7S4479C3D0Ev();
extern void _ZN7S4479C32v2Ev();
extern void _ZN7S4479C32v3Ev();
extern void _ZN7S4479C32v4Ev();
static  VTBL_ENTRY vtc_S4479C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4479C3[0]),
  (VTBL_ENTRY)&_ZN7S4479C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4479C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4479C3[];
extern  VTBL_ENTRY _ZTV7S4479C3[];
Class_Descriptor cd_S4479C3 = {  "S4479C3", // class name
  0,0,//no base classes
  &(vtc_S4479C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4479C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4479C3),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  S4479C6  {
  virtual  ~S4479C6(); // _ZN7S4479C6D1Ev
  virtual void  v5(); // _ZN7S4479C62v5Ev
  S4479C6(); // tgen
};
//SIG(-1 S4479C6) C1{ vd v1}


 S4479C6 ::~S4479C6(){ note_dtor("S4479C6", this);}
void  S4479C6 ::v5(){vfunc_called(this, "_ZN7S4479C62v5Ev");}
S4479C6 ::S4479C6(){ note_ctor("S4479C6", this);} // tgen

static void Test_S4479C6()
{
  extern Class_Descriptor cd_S4479C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4479C6, buf);
    S4479C6 *dp, &lv = *(dp=new (buf) S4479C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4479C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4479C6)");
    test_class_info(&lv, &cd_S4479C6);
    dp->~S4479C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4479C6(Test_S4479C6, "S4479C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4479C6C1Ev();
extern void _ZN7S4479C6D1Ev();
Name_Map name_map_S4479C6[] = {
  NSPAIR(_ZN7S4479C6C1Ev),
  NSPAIR(_ZN7S4479C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4479C6[];
extern void _ZN7S4479C6D1Ev();
extern void _ZN7S4479C6D0Ev();
extern void _ZN7S4479C62v5Ev();
static  VTBL_ENTRY vtc_S4479C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4479C6[0]),
  (VTBL_ENTRY)&_ZN7S4479C6D1Ev,
  (VTBL_ENTRY)&_ZN7S4479C6D0Ev,
  (VTBL_ENTRY)&_ZN7S4479C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4479C6[];
extern  VTBL_ENTRY _ZTV7S4479C6[];
Class_Descriptor cd_S4479C6 = {  "S4479C6", // class name
  0,0,//no base classes
  &(vtc_S4479C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4479C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4479C6),5, //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  S4479C2  : S4479C3 , S4479C6 {
  void *s4479c2f0;
  int s4479c2f1;
  void *s4479c2f2;
  virtual  ~S4479C2(); // _ZN7S4479C2D1Ev
  virtual void  v6(); // _ZN7S4479C22v6Ev
  virtual void  v7(); // _ZN7S4479C22v7Ev
  S4479C2(); // tgen
};
//SIG(-1 S4479C2) C1{ BC2{ vd v3 v4 v5 Fi[4] FC3{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 Fp} Fi Fc FC4{ vd m Fi[2]} Fi} BC5{ vd v6} vd v1 v2 Fp Fi Fp}


 S4479C2 ::~S4479C2(){ note_dtor("S4479C2", this);}
void  S4479C2 ::v6(){vfunc_called(this, "_ZN7S4479C22v6Ev");}
void  S4479C2 ::v7(){vfunc_called(this, "_ZN7S4479C22v7Ev");}
S4479C2 ::S4479C2(){ note_ctor("S4479C2", this);} // tgen

static void Test_S4479C2()
{
  extern Class_Descriptor cd_S4479C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4479C2, buf);
    S4479C2 *dp, &lv = *(dp=new (buf) S4479C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4479C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4479C2)");
    check_base_class_offset(lv, (S4479C3*), 0, "S4479C2");
    check_base_class_offset(lv, (S4479C6*), ABISELECT(72,52), "S4479C2");
    check_field_offset(lv, s4479c2f0, ABISELECT(80,56), "S4479C2.s4479c2f0");
    check_field_offset(lv, s4479c2f1, ABISELECT(88,60), "S4479C2.s4479c2f1");
    check_field_offset(lv, s4479c2f2, ABISELECT(96,64), "S4479C2.s4479c2f2");
    test_class_info(&lv, &cd_S4479C2);
    dp->~S4479C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4479C2(Test_S4479C2, "S4479C2", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4479C2C1Ev();
extern void _ZN7S4479C2D1Ev();
Name_Map name_map_S4479C2[] = {
  NSPAIR(_ZN7S4479C2C1Ev),
  NSPAIR(_ZN7S4479C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4479C3;
extern VTBL_ENTRY _ZTI7S4479C3[];
extern  VTBL_ENTRY _ZTV7S4479C3[];
extern Class_Descriptor cd_S4479C6;
extern VTBL_ENTRY _ZTI7S4479C6[];
extern  VTBL_ENTRY _ZTV7S4479C6[];
static Base_Class bases_S4479C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4479C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S4479C6,    ABISELECT(72,52), //bcp->offset
    9, //bcp->virtual_function_table_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 _ZTI7S4479C2[];
extern void _ZN7S4479C2D1Ev();
extern void _ZN7S4479C2D0Ev();
extern void _ZN7S4479C32v2Ev();
extern void _ZN7S4479C32v3Ev();
extern void _ZN7S4479C32v4Ev();
extern void _ZN7S4479C22v6Ev();
extern void _ZN7S4479C22v7Ev();
extern void ABISELECT(_ZThn72_N7S4479C2D1Ev,_ZThn52_N7S4479C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S4479C2D0Ev,_ZThn52_N7S4479C2D0Ev)();
extern void _ZN7S4479C62v5Ev();
static  VTBL_ENTRY vtc_S4479C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4479C2[0]),
  (VTBL_ENTRY)&_ZN7S4479C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4479C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4479C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4479C22v7Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4479C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4479C2D1Ev,_ZThn52_N7S4479C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4479C2D0Ev,_ZThn52_N7S4479C2D0Ev),
  (VTBL_ENTRY)&_ZN7S4479C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4479C2[];
extern  VTBL_ENTRY _ZTV7S4479C2[];
Class_Descriptor cd_S4479C2 = {  "S4479C2", // class name
  bases_S4479C2, 2,
  &(vtc_S4479C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4479C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4479C2),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  S4479C1  : S4479C2 {
  virtual  ~S4479C1(); // _ZN7S4479C1D1Ev
  virtual void  v1(); // _ZN7S4479C12v1Ev
  S4479C1(); // tgen
};
//SIG(1 S4479C1) C1{ BC2{ BC3{ vd v2 v3 v4 Fi[4] FC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} Fi Fc FC5{ vd m Fi[2]} Fi} BC6{ vd v5} vd v6 v7 Fp Fi Fp} vd v1}


 S4479C1 ::~S4479C1(){ note_dtor("S4479C1", this);}
void  S4479C1 ::v1(){vfunc_called(this, "_ZN7S4479C12v1Ev");}
S4479C1 ::S4479C1(){ note_ctor("S4479C1", this);} // tgen

static void Test_S4479C1()
{
  extern Class_Descriptor cd_S4479C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4479C1, buf);
    S4479C1 *dp, &lv = *(dp=new (buf) S4479C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4479C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4479C1)");
    check_base_class_offset(lv, (S4479C3*)(S4479C2*), 0, "S4479C1");
    check_base_class_offset(lv, (S4479C6*)(S4479C2*), ABISELECT(72,52), "S4479C1");
    check_base_class_offset(lv, (S4479C2*), 0, "S4479C1");
    test_class_info(&lv, &cd_S4479C1);
    dp->~S4479C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4479C1(Test_S4479C1, "S4479C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4479C1C1Ev();
extern void _ZN7S4479C1D1Ev();
Name_Map name_map_S4479C1[] = {
  NSPAIR(_ZN7S4479C1C1Ev),
  NSPAIR(_ZN7S4479C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4479C3;
extern VTBL_ENTRY _ZTI7S4479C3[];
extern  VTBL_ENTRY _ZTV7S4479C3[];
extern Class_Descriptor cd_S4479C6;
extern VTBL_ENTRY _ZTI7S4479C6[];
extern  VTBL_ENTRY _ZTV7S4479C6[];
extern Class_Descriptor cd_S4479C2;
extern VTBL_ENTRY _ZTI7S4479C2[];
extern  VTBL_ENTRY _ZTV7S4479C2[];
static Base_Class bases_S4479C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4479C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S4479C6,    ABISELECT(72,52), //bcp->offset
    10, //bcp->virtual_function_table_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_S4479C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4479C1[];
extern void _ZN7S4479C1D1Ev();
extern void _ZN7S4479C1D0Ev();
extern void _ZN7S4479C32v2Ev();
extern void _ZN7S4479C32v3Ev();
extern void _ZN7S4479C32v4Ev();
extern void _ZN7S4479C22v6Ev();
extern void _ZN7S4479C22v7Ev();
extern void _ZN7S4479C12v1Ev();
extern void ABISELECT(_ZThn72_N7S4479C1D1Ev,_ZThn52_N7S4479C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S4479C1D0Ev,_ZThn52_N7S4479C1D0Ev)();
extern void _ZN7S4479C62v5Ev();
static  VTBL_ENTRY vtc_S4479C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4479C1[0]),
  (VTBL_ENTRY)&_ZN7S4479C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4479C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4479C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4479C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4479C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4479C12v1Ev,
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S4479C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4479C1D1Ev,_ZThn52_N7S4479C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S4479C1D0Ev,_ZThn52_N7S4479C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4479C62v5Ev,
};
extern VTBL_ENTRY _ZTI7S4479C1[];
extern  VTBL_ENTRY _ZTV7S4479C1[];
Class_Descriptor cd_S4479C1 = {  "S4479C1", // class name
  bases_S4479C1, 3,
  &(vtc_S4479C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4479C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4479C1),15, //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  S3013C3  {
  void *s3013c3f0;
  long double s3013c3f1;
  int s3013c3f2;
  virtual void  v11(); // _ZN7S3013C33v11Ev
  virtual void  v12(); // _ZN7S3013C33v12Ev
  ~S3013C3(); // tgen
  S3013C3(); // tgen
};
//SIG(-1 S3013C3) C1{ v1 v2 Fp FD Fi}


void  S3013C3 ::v11(){vfunc_called(this, "_ZN7S3013C33v11Ev");}
void  S3013C3 ::v12(){vfunc_called(this, "_ZN7S3013C33v12Ev");}
S3013C3 ::~S3013C3(){ note_dtor("S3013C3", this);} // tgen
S3013C3 ::S3013C3(){ note_ctor("S3013C3", this);} // tgen

static void Test_S3013C3()
{
  extern Class_Descriptor cd_S3013C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S3013C3, buf);
    S3013C3 *dp, &lv = *(dp=new (buf) S3013C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3013C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3013C3)");
    check_field_offset(lv, s3013c3f0, ABISELECT(8,4), "S3013C3.s3013c3f0");
    check_field_offset(lv, s3013c3f1, ABISELECT(16,8), "S3013C3.s3013c3f1");
    check_field_offset(lv, s3013c3f2, ABISELECT(32,20), "S3013C3.s3013c3f2");
    test_class_info(&lv, &cd_S3013C3);
    dp->~S3013C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3013C3(Test_S3013C3, "S3013C3", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3013C3C1Ev();
extern void _ZN7S3013C3D1Ev();
Name_Map name_map_S3013C3[] = {
  NSPAIR(_ZN7S3013C3C1Ev),
  NSPAIR(_ZN7S3013C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3013C3[];
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
static  VTBL_ENTRY vtc_S3013C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3013C3[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
Class_Descriptor cd_S3013C3 = {  "S3013C3", // class name
  0,0,//no base classes
  &(vtc_S3013C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3013C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3013C3),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  S3013C5  : S3013C3 {
  virtual void  v13(); // _ZN7S3013C53v13Ev
  virtual void  v14(); // _ZN7S3013C53v14Ev
  ~S3013C5(); // tgen
  S3013C5(); // tgen
};
//SIG(-1 S3013C5) C1{ BC2{ v3 v4 Fp FD Fi} v1 v2}


void  S3013C5 ::v13(){vfunc_called(this, "_ZN7S3013C53v13Ev");}
void  S3013C5 ::v14(){vfunc_called(this, "_ZN7S3013C53v14Ev");}
S3013C5 ::~S3013C5(){ note_dtor("S3013C5", this);} // tgen
S3013C5 ::S3013C5(){ note_ctor("S3013C5", this);} // tgen

static void Test_S3013C5()
{
  extern Class_Descriptor cd_S3013C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S3013C5, buf);
    S3013C5 *dp, &lv = *(dp=new (buf) S3013C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3013C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3013C5)");
    check_base_class_offset(lv, (S3013C3*), 0, "S3013C5");
    test_class_info(&lv, &cd_S3013C5);
    dp->~S3013C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3013C5(Test_S3013C5, "S3013C5", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3013C5C1Ev();
extern void _ZN7S3013C5D1Ev();
Name_Map name_map_S3013C5[] = {
  NSPAIR(_ZN7S3013C5C1Ev),
  NSPAIR(_ZN7S3013C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
static Base_Class bases_S3013C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3013C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S3013C5[];
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
extern void _ZN7S3013C53v13Ev();
extern void _ZN7S3013C53v14Ev();
static  VTBL_ENTRY vtc_S3013C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3013C5[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v14Ev,
};
extern VTBL_ENTRY _ZTI7S3013C5[];
extern  VTBL_ENTRY _ZTV7S3013C5[];
Class_Descriptor cd_S3013C5 = {  "S3013C5", // class name
  bases_S3013C5, 1,
  &(vtc_S3013C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3013C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3013C5),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  S3013C4  : S3013C5 , S3013C3 {
  virtual void  v15(); // _ZN7S3013C43v15Ev
  virtual void  v16(); // _ZN7S3013C43v16Ev
  virtual void  v17(); // _ZN7S3013C43v17Ev
  virtual void  v18(); // _ZN7S3013C43v18Ev
  ~S3013C4(); // tgen
  S3013C4(); // tgen
};
//SIG(-1 S3013C4) C1{ BC2{ BC3{ v5 v6 Fp FD Fi} v7 v8} BC3 v1 v2 v3 v4}


void  S3013C4 ::v15(){vfunc_called(this, "_ZN7S3013C43v15Ev");}
void  S3013C4 ::v16(){vfunc_called(this, "_ZN7S3013C43v16Ev");}
void  S3013C4 ::v17(){vfunc_called(this, "_ZN7S3013C43v17Ev");}
void  S3013C4 ::v18(){vfunc_called(this, "_ZN7S3013C43v18Ev");}
S3013C4 ::~S3013C4(){ note_dtor("S3013C4", this);} // tgen
S3013C4 ::S3013C4(){ note_ctor("S3013C4", this);} // tgen

static void Test_S3013C4()
{
  extern Class_Descriptor cd_S3013C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,13)];
    init_test(&cd_S3013C4, buf);
    S3013C4 *dp, &lv = *(dp=new (buf) S3013C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S3013C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3013C4)");
    check_base_class_offset(lv, (S3013C3*)(S3013C5*), 0, "S3013C4");
    check_base_class_offset(lv, (S3013C5*), 0, "S3013C4");
    /*is_ambiguous_... S3013C4::S3013C3 */ AMB_check_base_class_offset(lv, (S3013C3*), ABISELECT(48,24), "S3013C4");
    test_class_info(&lv, &cd_S3013C4);
    dp->~S3013C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3013C4(Test_S3013C4, "S3013C4", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN7S3013C4C1Ev();
extern void _ZN7S3013C4D1Ev();
Name_Map name_map_S3013C4[] = {
  NSPAIR(_ZN7S3013C4C1Ev),
  NSPAIR(_ZN7S3013C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
extern Class_Descriptor cd_S3013C5;
extern VTBL_ENTRY _ZTI7S3013C5[];
extern  VTBL_ENTRY _ZTV7S3013C5[];
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
static Base_Class bases_S3013C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3013C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3013C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S3013C3,    ABISELECT(48,24), //bcp->offset
    10, //bcp->virtual_function_table_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 _ZTI7S3013C4[];
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
extern void _ZN7S3013C53v13Ev();
extern void _ZN7S3013C53v14Ev();
extern void _ZN7S3013C43v15Ev();
extern void _ZN7S3013C43v16Ev();
extern void _ZN7S3013C43v17Ev();
extern void _ZN7S3013C43v18Ev();
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
static  VTBL_ENTRY vtc_S3013C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3013C4[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v18Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3013C4[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S3013C4[];
extern  VTBL_ENTRY _ZTV7S3013C4[];
Class_Descriptor cd_S3013C4 = {  "S3013C4", // class name
  bases_S3013C4, 3,
  &(vtc_S3013C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI7S3013C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3013C4),14, //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  S3013C2  : S3013C3 , virtual S3013C4 {
  __tsi64 s3013c2f0;
  int s3013c2f1;
  virtual  ~S3013C2(); // _ZN7S3013C2D2Ev
  virtual void  v19(); // _ZN7S3013C23v19Ev
  S3013C2(); // tgen
};
//SIG(-1 S3013C2) C1{ BC2{ v2 v3 Fp FD Fi} VBC3{ BC4{ BC2 v4 v5} BC2 v6 v7 v8 v9} vd v1 FL Fi}


 S3013C2 ::~S3013C2(){ note_dtor("S3013C2", this);}
void  S3013C2 ::v19(){vfunc_called(this, "_ZN7S3013C23v19Ev");}
S3013C2 ::S3013C2(){ note_ctor("S3013C2", this);} // tgen

static void Test_S3013C2()
{
  extern Class_Descriptor cd_S3013C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(11,22)];
    init_test(&cd_S3013C2, buf);
    S3013C2 *dp, &lv = *(dp=new (buf) S3013C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,84), "sizeof(S3013C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3013C2)");
    /*is_ambiguous_... S3013C2::S3013C3 */ AMB_check_base_class_offset(lv, (S3013C3*), 0, "S3013C2");
    check_base_class_offset(lv, (S3013C3*)(S3013C5*)(S3013C4*), ABISELECT(64,36), "S3013C2");
    check_base_class_offset(lv, (S3013C5*)(S3013C4*), ABISELECT(64,36), "S3013C2");
    /*is_ambiguous_... S3013C4::S3013C3 */ AMB_check_base_class_offset(lv, (S3013C3*)(S3013C4*), ABISELECT(112,60), "S3013C2");
    check_base_class_offset(lv, (S3013C4*), ABISELECT(64,36), "S3013C2");
    check_field_offset(lv, s3013c2f0, ABISELECT(40,24), "S3013C2.s3013c2f0");
    check_field_offset(lv, s3013c2f1, ABISELECT(48,32), "S3013C2.s3013c2f1");
    test_class_info(&lv, &cd_S3013C2);
    dp->~S3013C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3013C2(Test_S3013C2, "S3013C2", ABISELECT(160,84));

#else // __cplusplus

extern void _ZN7S3013C2C1Ev();
extern void _ZN7S3013C2D2Ev();
Name_Map name_map_S3013C2[] = {
  NSPAIR(_ZN7S3013C2C1Ev),
  NSPAIR(_ZN7S3013C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
extern Class_Descriptor cd_S3013C5;
extern VTBL_ENTRY _ZTI7S3013C5[];
extern  VTBL_ENTRY _ZTV7S3013C5[];
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
extern Class_Descriptor cd_S3013C4;
extern VTBL_ENTRY _ZTI7S3013C4[];
extern  VTBL_ENTRY _ZTV7S3013C4[];
static Base_Class bases_S3013C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3013C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3013C3,    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
    2, //immediately_derived
  0, 0},
  {&cd_S3013C5,    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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3013C3,    ABISELECT(112,60), //bcp->offset
    26, //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
    4, //immediately_derived
  0, 0},
  {&cd_S3013C4,    ABISELECT(64,36), //bcp->offset
    8, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S3013C2[];
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
extern void _ZN7S3013C2D1Ev();
extern void _ZN7S3013C2D0Ev();
extern void _ZN7S3013C23v19Ev();
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
extern void _ZN7S3013C53v13Ev();
extern void _ZN7S3013C53v14Ev();
extern void _ZN7S3013C43v15Ev();
extern void _ZN7S3013C43v16Ev();
extern void _ZN7S3013C43v17Ev();
extern void _ZN7S3013C43v18Ev();
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
static  VTBL_ENTRY vtc_S3013C2[] = {
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S3013C2[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3013C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3013C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3013C23v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3013C2[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v18Ev,
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S3013C2[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
};
extern VTBL_ENTRY _ZTV7S3013C2[];
static  VTT_ENTRY vtt_S3013C2[] = {
  {&(_ZTV7S3013C2[3]),  3,30},
  {&(_ZTV7S3013C2[18]),  18,30},
  {&(_ZTV7S3013C2[28]),  28,30},
};
extern VTBL_ENTRY _ZTI7S3013C2[];
extern  VTBL_ENTRY _ZTV7S3013C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3013C2[];
Class_Descriptor cd_S3013C2 = {  "S3013C2", // class name
  bases_S3013C2, 5,
  &(vtc_S3013C2[0]), // expected_vtbl_contents
  &(vtt_S3013C2[0]), // expected_vtt_contents
  ABISELECT(160,84), // object size
  NSPAIRA(_ZTI7S3013C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3013C2),30, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3013C2),3, //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  S3013C6_nt  {
  ::S3013C5 s3013c6f0[2];
  virtual void  v20(); // _ZN10S3013C6_nt3v20Ev
  ~S3013C6_nt(); // tgen
  S3013C6_nt(); // tgen
};
//SIG(-1 S3013C6_nt) C1{ v1 FC2{ BC3{ v4 v5 Fp FD Fi} v2 v3}[2]}


void  S3013C6_nt ::v20(){vfunc_called(this, "_ZN10S3013C6_nt3v20Ev");}
S3013C6_nt ::~S3013C6_nt(){ note_dtor("S3013C6_nt", this);} // tgen
S3013C6_nt ::S3013C6_nt(){ note_ctor("S3013C6_nt", this);} // tgen

//skip512 S3013C6_nt

#else // __cplusplus

extern void _ZN10S3013C6_ntC1Ev();
extern void _ZN10S3013C6_ntD1Ev();
Name_Map name_map_S3013C6_nt[] = {
  NSPAIR(_ZN10S3013C6_ntC1Ev),
  NSPAIR(_ZN10S3013C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3013C6_nt[];
extern void _ZN10S3013C6_nt3v20Ev();
static  VTBL_ENTRY vtc_S3013C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3013C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S3013C6_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI10S3013C6_nt[];
VTBL_ENTRY *P__ZTI10S3013C6_nt = _ZTI10S3013C6_nt; 
extern  VTBL_ENTRY _ZTV10S3013C6_nt[];
Class_Descriptor cd_S3013C6_nt = {  "S3013C6_nt", // class name
  0,0,//no base classes
  &(vtc_S3013C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,52), // object size
  NSPAIRA(_ZTI10S3013C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3013C6_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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3013C1  : S3013C2 , S3013C6_nt {
  virtual void  v1(); // _ZN7S3013C12v1Ev
  virtual void  v2(); // _ZN7S3013C12v2Ev
  virtual void  v3(); // _ZN7S3013C12v3Ev
  virtual void  v4(); // _ZN7S3013C12v4Ev
  virtual void  v5(); // _ZN7S3013C12v5Ev
  virtual void  v6(); // _ZN7S3013C12v6Ev
  virtual void  v7(); // _ZN7S3013C12v7Ev
  virtual void  v8(); // _ZN7S3013C12v8Ev
  virtual void  v9(); // _ZN7S3013C12v9Ev
  virtual void  v10(); // _ZN7S3013C13v10Ev
  ~S3013C1(); // tgen
  S3013C1(); // tgen
};
//SIG(1 S3013C1) C1{ BC2{ BC3{ v11 v12 Fp FD Fi} VBC4{ BC5{ BC3 v13 v14} BC3 v15 v16 v17 v18} vd v19 FL Fi} BC6{ v20 FC5[2]} v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


void  S3013C1 ::v1(){vfunc_called(this, "_ZN7S3013C12v1Ev");}
void  S3013C1 ::v2(){vfunc_called(this, "_ZN7S3013C12v2Ev");}
void  S3013C1 ::v3(){vfunc_called(this, "_ZN7S3013C12v3Ev");}
void  S3013C1 ::v4(){vfunc_called(this, "_ZN7S3013C12v4Ev");}
void  S3013C1 ::v5(){vfunc_called(this, "_ZN7S3013C12v5Ev");}
void  S3013C1 ::v6(){vfunc_called(this, "_ZN7S3013C12v6Ev");}
void  S3013C1 ::v7(){vfunc_called(this, "_ZN7S3013C12v7Ev");}
void  S3013C1 ::v8(){vfunc_called(this, "_ZN7S3013C12v8Ev");}
void  S3013C1 ::v9(){vfunc_called(this, "_ZN7S3013C12v9Ev");}
void  S3013C1 ::v10(){vfunc_called(this, "_ZN7S3013C13v10Ev");}
S3013C1 ::~S3013C1(){ note_dtor("S3013C1", this);} // tgen
S3013C1 ::S3013C1(){ note_ctor("S3013C1", this);} // tgen

static void Test_S3013C1()
{
  extern Class_Descriptor cd_S3013C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(18,35)];
    init_test(&cd_S3013C1, buf);
    S3013C1 *dp, &lv = *(dp=new (buf) S3013C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,136), "sizeof(S3013C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3013C1)");
    /*is_ambiguous_... S3013C2::S3013C3 */ AMB_check_base_class_offset(lv, (S3013C3*)(S3013C2*), 0, "S3013C1");
    check_base_class_offset(lv, (S3013C3*)(S3013C5*)(S3013C4*), ABISELECT(176,88), "S3013C1");
    check_base_class_offset(lv, (S3013C5*)(S3013C4*), ABISELECT(176,88), "S3013C1");
    /*is_ambiguous_... S3013C4::S3013C3 */ AMB_check_base_class_offset(lv, (S3013C3*)(S3013C4*), ABISELECT(224,112), "S3013C1");
    check_base_class_offset(lv, (S3013C4*)(S3013C2*), ABISELECT(176,88), "S3013C1");
    check_base_class_offset(lv, (S3013C2*), 0, "S3013C1");
    check_base_class_offset(lv, (S3013C6_nt*), ABISELECT(64,36), "S3013C1");
    test_class_info(&lv, &cd_S3013C1);
    dp->~S3013C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3013C1(Test_S3013C1, "S3013C1", ABISELECT(272,136));

#else // __cplusplus

extern void _ZN7S3013C1C1Ev();
extern void _ZN7S3013C1D1Ev();
Name_Map name_map_S3013C1[] = {
  NSPAIR(_ZN7S3013C1C1Ev),
  NSPAIR(_ZN7S3013C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
extern Class_Descriptor cd_S3013C5;
extern VTBL_ENTRY _ZTI7S3013C5[];
extern  VTBL_ENTRY _ZTV7S3013C5[];
extern Class_Descriptor cd_S3013C3;
extern VTBL_ENTRY _ZTI7S3013C3[];
extern  VTBL_ENTRY _ZTV7S3013C3[];
extern Class_Descriptor cd_S3013C4;
extern VTBL_ENTRY _ZTI7S3013C4[];
extern  VTBL_ENTRY _ZTV7S3013C4[];
extern Class_Descriptor cd_S3013C2;
extern VTBL_ENTRY _ZTI7S3013C2[];
extern  VTBL_ENTRY _ZTV7S3013C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3013C2[];
extern Class_Descriptor cd_S3013C6_nt;
extern VTBL_ENTRY _ZTI10S3013C6_nt[];
extern  VTBL_ENTRY _ZTV10S3013C6_nt[];
static Base_Class bases_S3013C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3013C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3013C3,    ABISELECT(176,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
    2, //immediately_derived
  0, 0},
  {&cd_S3013C5,    ABISELECT(176,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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3013C3,    ABISELECT(224,112), //bcp->offset
    39, //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
    4, //immediately_derived
  0, 0},
  {&cd_S3013C4,    ABISELECT(176,88), //bcp->offset
    21, //bcp->virtual_function_table_offset
    10, //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
    5, //immediately_derived
  0, 1},
  {&cd_S3013C2,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3013C6_nt,    ABISELECT(64,36), //bcp->offset
    18, //bcp->virtual_function_table_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 _ZTI7S3013C1[];
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
extern void _ZN7S3013C1D1Ev();
extern void _ZN7S3013C1D0Ev();
extern void _ZN7S3013C23v19Ev();
extern void _ZN7S3013C12v1Ev();
extern void _ZN7S3013C12v2Ev();
extern void _ZN7S3013C12v3Ev();
extern void _ZN7S3013C12v4Ev();
extern void _ZN7S3013C12v5Ev();
extern void _ZN7S3013C12v6Ev();
extern void _ZN7S3013C12v7Ev();
extern void _ZN7S3013C12v8Ev();
extern void _ZN7S3013C12v9Ev();
extern void _ZN7S3013C13v10Ev();
extern void _ZN10S3013C6_nt3v20Ev();
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
extern void _ZN7S3013C53v13Ev();
extern void _ZN7S3013C53v14Ev();
extern void _ZN7S3013C43v15Ev();
extern void _ZN7S3013C43v16Ev();
extern void _ZN7S3013C43v17Ev();
extern void _ZN7S3013C43v18Ev();
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
static  VTBL_ENTRY vtc_S3013C1[] = {
  ABISELECT(176,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S3013C1[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3013C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3013C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3013C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v8Ev,
  (VTBL_ENTRY)&_ZN7S3013C12v9Ev,
  (VTBL_ENTRY)&_ZN7S3013C13v10Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S3013C1[0]),
  (VTBL_ENTRY)&_ZN10S3013C6_nt3v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI7S3013C1[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v18Ev,
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI7S3013C1[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
};
extern VTBL_ENTRY _ZTV7S3013C1[];
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
extern void _ZN7S3013C2D1Ev();
extern void _ZN7S3013C2D0Ev();
extern void _ZN7S3013C23v19Ev();
static  VTBL_ENTRY _tg__ZTV7S3013C2__7S3013C1[] = {
  ABISELECT(176,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S3013C2[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3013C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3013C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3013C23v19Ev,
};
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
extern void _ZN7S3013C53v13Ev();
extern void _ZN7S3013C53v14Ev();
extern void _ZN7S3013C43v15Ev();
extern void _ZN7S3013C43v16Ev();
extern void _ZN7S3013C43v17Ev();
extern void _ZN7S3013C43v18Ev();
static  VTBL_ENTRY _tg__ZTV7S3013C4__7S3013C2__7S3013C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI7S3013C2[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3013C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v15Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v16Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v17Ev,
  (VTBL_ENTRY)&_ZN7S3013C43v18Ev,
};
extern void _ZN7S3013C33v11Ev();
extern void _ZN7S3013C33v12Ev();
static  VTBL_ENTRY _tg__ZTV7S3013C37S3013C4__A2__7S3013C2__7S3013C1[] = {
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI7S3013C2[0]),
  (VTBL_ENTRY)&_ZN7S3013C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3013C33v12Ev,
};
static  VTT_ENTRY vtt_S3013C1[] = {
  {&(_ZTV7S3013C1[3]),  3,43},
  {&(_tg__ZTV7S3013C2__7S3013C1[3]),  3,8},
  {&(_tg__ZTV7S3013C4__7S3013C2__7S3013C1[10]),  10,18},
  {&(_tg__ZTV7S3013C37S3013C4__A2__7S3013C2__7S3013C1[2]),  2,4},
  {&(_ZTV7S3013C1[31]),  31,43},
  {&(_ZTV7S3013C1[41]),  41,43},
};
extern VTBL_ENTRY _ZTI7S3013C1[];
extern  VTBL_ENTRY _ZTV7S3013C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3013C1[];
Class_Descriptor cd_S3013C1 = {  "S3013C1", // class name
  bases_S3013C1, 7,
  &(vtc_S3013C1[0]), // expected_vtbl_contents
  &(vtt_S3013C1[0]), // expected_vtt_contents
  ABISELECT(272,136), // object size
  NSPAIRA(_ZTI7S3013C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3013C1),43, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3013C1),6, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2160C4  {
  ::S4473C12_nt s2160c4f0;
  int s2160c4f1[2];
  char s2160c4f2;
  virtual  ~S2160C4(); // _ZN7S2160C4D1Ev
  virtual void  v3(); // _ZN7S2160C42v3Ev
  virtual void  v4(); // _ZN7S2160C42v4Ev
  virtual void  v5(); // _ZN7S2160C42v5Ev
  S2160C4(); // tgen
};
//SIG(-1 S2160C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2160C4 ::~S2160C4(){ note_dtor("S2160C4", this);}
void  S2160C4 ::v3(){vfunc_called(this, "_ZN7S2160C42v3Ev");}
void  S2160C4 ::v4(){vfunc_called(this, "_ZN7S2160C42v4Ev");}
void  S2160C4 ::v5(){vfunc_called(this, "_ZN7S2160C42v5Ev");}
S2160C4 ::S2160C4(){ note_ctor("S2160C4", this);} // tgen

static void Test_S2160C4()
{
  extern Class_Descriptor cd_S2160C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2160C4, buf);
    S2160C4 *dp, &lv = *(dp=new (buf) S2160C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2160C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2160C4)");
    check_field_offset(lv, s2160c4f0, ABISELECT(8,4), "S2160C4.s2160c4f0");
    check_field_offset(lv, s2160c4f1, ABISELECT(24,16), "S2160C4.s2160c4f1");
    check_field_offset(lv, s2160c4f2, ABISELECT(32,24), "S2160C4.s2160c4f2");
    test_class_info(&lv, &cd_S2160C4);
    dp->~S2160C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2160C4(Test_S2160C4, "S2160C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2160C4C1Ev();
extern void _ZN7S2160C4D1Ev();
Name_Map name_map_S2160C4[] = {
  NSPAIR(_ZN7S2160C4C1Ev),
  NSPAIR(_ZN7S2160C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2160C4[];
extern void _ZN7S2160C4D1Ev();
extern void _ZN7S2160C4D0Ev();
extern void _ZN7S2160C42v3Ev();
extern void _ZN7S2160C42v4Ev();
extern void _ZN7S2160C42v5Ev();
static  VTBL_ENTRY vtc_S2160C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2160C4[0]),
  (VTBL_ENTRY)&_ZN7S2160C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2160C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2160C4[];
extern  VTBL_ENTRY _ZTV7S2160C4[];
Class_Descriptor cd_S2160C4 = {  "S2160C4", // class name
  0,0,//no base classes
  &(vtc_S2160C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2160C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2160C4),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  S2160C3  : S2160C4 {
  void *s2160c3f0;
  virtual void  v6(); // _ZN7S2160C32v6Ev
  virtual void  v7(); // _ZN7S2160C32v7Ev
  ~S2160C3(); // tgen
  S2160C3(); // tgen
};
//SIG(-1 S2160C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2160C3 ::v6(){vfunc_called(this, "_ZN7S2160C32v6Ev");}
void  S2160C3 ::v7(){vfunc_called(this, "_ZN7S2160C32v7Ev");}
S2160C3 ::~S2160C3(){ note_dtor("S2160C3", this);} // tgen
S2160C3 ::S2160C3(){ note_ctor("S2160C3", this);} // tgen

static void Test_S2160C3()
{
  extern Class_Descriptor cd_S2160C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2160C3, buf);
    S2160C3 *dp, &lv = *(dp=new (buf) S2160C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2160C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2160C3)");
    check_base_class_offset(lv, (S2160C4*), 0, "S2160C3");
    check_field_offset(lv, s2160c3f0, ABISELECT(40,28), "S2160C3.s2160c3f0");
    test_class_info(&lv, &cd_S2160C3);
    dp->~S2160C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2160C3(Test_S2160C3, "S2160C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2160C3C1Ev();
extern void _ZN7S2160C3D1Ev();
Name_Map name_map_S2160C3[] = {
  NSPAIR(_ZN7S2160C3C1Ev),
  NSPAIR(_ZN7S2160C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2160C4;
extern VTBL_ENTRY _ZTI7S2160C4[];
extern  VTBL_ENTRY _ZTV7S2160C4[];
static Base_Class bases_S2160C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2160C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2160C3[];
extern void _ZN7S2160C3D1Ev();
extern void _ZN7S2160C3D0Ev();
extern void _ZN7S2160C42v3Ev();
extern void _ZN7S2160C42v4Ev();
extern void _ZN7S2160C42v5Ev();
extern void _ZN7S2160C32v6Ev();
extern void _ZN7S2160C32v7Ev();
static  VTBL_ENTRY vtc_S2160C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2160C3[0]),
  (VTBL_ENTRY)&_ZN7S2160C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2160C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2160C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2160C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2160C3[];
extern  VTBL_ENTRY _ZTV7S2160C3[];
Class_Descriptor cd_S2160C3 = {  "S2160C3", // class name
  bases_S2160C3, 1,
  &(vtc_S2160C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2160C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2160C3),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  S2160C2  : S2160C3 {
  void *s2160c2f0;
  char s2160c2f1;
  ::S2366C14_nt s2160c2f2;
  virtual  ~S2160C2(); // _ZN7S2160C2D1Ev
  virtual void  v8(); // _ZN7S2160C22v8Ev
  S2160C2(); // tgen
};
//SIG(-1 S2160C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S2160C2 ::~S2160C2(){ note_dtor("S2160C2", this);}
void  S2160C2 ::v8(){vfunc_called(this, "_ZN7S2160C22v8Ev");}
S2160C2 ::S2160C2(){ note_ctor("S2160C2", this);} // tgen

static void Test_S2160C2()
{
  extern Class_Descriptor cd_S2160C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2160C2, buf);
    S2160C2 *dp, &lv = *(dp=new (buf) S2160C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2160C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2160C2)");
    check_base_class_offset(lv, (S2160C4*)(S2160C3*), 0, "S2160C2");
    check_base_class_offset(lv, (S2160C3*), 0, "S2160C2");
    check_field_offset(lv, s2160c2f0, ABISELECT(48,32), "S2160C2.s2160c2f0");
    check_field_offset(lv, s2160c2f1, ABISELECT(56,36), "S2160C2.s2160c2f1");
    check_field_offset(lv, s2160c2f2, ABISELECT(60,40), "S2160C2.s2160c2f2");
    test_class_info(&lv, &cd_S2160C2);
    dp->~S2160C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2160C2(Test_S2160C2, "S2160C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2160C2C1Ev();
extern void _ZN7S2160C2D1Ev();
Name_Map name_map_S2160C2[] = {
  NSPAIR(_ZN7S2160C2C1Ev),
  NSPAIR(_ZN7S2160C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2160C4;
extern VTBL_ENTRY _ZTI7S2160C4[];
extern  VTBL_ENTRY _ZTV7S2160C4[];
extern Class_Descriptor cd_S2160C3;
extern VTBL_ENTRY _ZTI7S2160C3[];
extern  VTBL_ENTRY _ZTV7S2160C3[];
static Base_Class bases_S2160C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2160C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2160C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2160C2[];
extern void _ZN7S2160C2D1Ev();
extern void _ZN7S2160C2D0Ev();
extern void _ZN7S2160C42v3Ev();
extern void _ZN7S2160C42v4Ev();
extern void _ZN7S2160C42v5Ev();
extern void _ZN7S2160C32v6Ev();
extern void _ZN7S2160C32v7Ev();
extern void _ZN7S2160C22v8Ev();
static  VTBL_ENTRY vtc_S2160C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2160C2[0]),
  (VTBL_ENTRY)&_ZN7S2160C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2160C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2160C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2160C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2160C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S2160C2[];
extern  VTBL_ENTRY _ZTV7S2160C2[];
Class_Descriptor cd_S2160C2 = {  "S2160C2", // class name
  bases_S2160C2, 2,
  &(vtc_S2160C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2160C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2160C2),10, //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  S2160C1  : S2160C2 {
  void *s2160c1f0;
  ::S4473C12_nt s2160c1f1;
  ::S2173C14 s2160c1f2;
  virtual  ~S2160C1(); // _ZN7S2160C1D1Ev
  virtual void  v1(); // _ZN7S2160C12v1Ev
  virtual void  v2(); // _ZN7S2160C12v2Ev
  S2160C1(); // tgen
};
//SIG(1 S2160C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 Fp Fc FC7{ m Fi[2]}} vd v1 v2 Fp FC5 FC8{ m Fp Fi[2] FC9{ m}}}


 S2160C1 ::~S2160C1(){ note_dtor("S2160C1", this);}
void  S2160C1 ::v1(){vfunc_called(this, "_ZN7S2160C12v1Ev");}
void  S2160C1 ::v2(){vfunc_called(this, "_ZN7S2160C12v2Ev");}
S2160C1 ::S2160C1(){ note_ctor("S2160C1", this);} // tgen

static void Test_S2160C1()
{
  extern Class_Descriptor cd_S2160C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,21)];
    init_test(&cd_S2160C1, buf);
    S2160C1 *dp, &lv = *(dp=new (buf) S2160C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,80), "sizeof(S2160C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2160C1)");
    check_base_class_offset(lv, (S2160C4*)(S2160C3*)(S2160C2*), 0, "S2160C1");
    check_base_class_offset(lv, (S2160C3*)(S2160C2*), 0, "S2160C1");
    check_base_class_offset(lv, (S2160C2*), 0, "S2160C1");
    check_field_offset(lv, s2160c1f0, ABISELECT(72,48), "S2160C1.s2160c1f0");
    check_field_offset(lv, s2160c1f1, ABISELECT(80,52), "S2160C1.s2160c1f1");
    check_field_offset(lv, s2160c1f2, ABISELECT(96,64), "S2160C1.s2160c1f2");
    test_class_info(&lv, &cd_S2160C1);
    dp->~S2160C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2160C1(Test_S2160C1, "S2160C1", ABISELECT(120,80));

#else // __cplusplus

extern void _ZN7S2160C1C1Ev();
extern void _ZN7S2160C1D1Ev();
Name_Map name_map_S2160C1[] = {
  NSPAIR(_ZN7S2160C1C1Ev),
  NSPAIR(_ZN7S2160C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2160C4;
extern VTBL_ENTRY _ZTI7S2160C4[];
extern  VTBL_ENTRY _ZTV7S2160C4[];
extern Class_Descriptor cd_S2160C3;
extern VTBL_ENTRY _ZTI7S2160C3[];
extern  VTBL_ENTRY _ZTV7S2160C3[];
extern Class_Descriptor cd_S2160C2;
extern VTBL_ENTRY _ZTI7S2160C2[];
extern  VTBL_ENTRY _ZTV7S2160C2[];
static Base_Class bases_S2160C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2160C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2160C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2160C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2160C1[];
extern void _ZN7S2160C1D1Ev();
extern void _ZN7S2160C1D0Ev();
extern void _ZN7S2160C42v3Ev();
extern void _ZN7S2160C42v4Ev();
extern void _ZN7S2160C42v5Ev();
extern void _ZN7S2160C32v6Ev();
extern void _ZN7S2160C32v7Ev();
extern void _ZN7S2160C22v8Ev();
extern void _ZN7S2160C12v1Ev();
extern void _ZN7S2160C12v2Ev();
static  VTBL_ENTRY vtc_S2160C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2160C1[0]),
  (VTBL_ENTRY)&_ZN7S2160C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2160C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2160C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2160C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2160C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2160C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2160C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2160C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2160C1[];
extern  VTBL_ENTRY _ZTV7S2160C1[];
Class_Descriptor cd_S2160C1 = {  "S2160C1", // class name
  bases_S2160C1, 3,
  &(vtc_S2160C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,80), // object size
  NSPAIRA(_ZTI7S2160C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2160C1),12, //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  S5075C3  {
  ::S4473C12_nt s5075c3f0;
  int s5075c3f1[2];
  char s5075c3f2;
  virtual  ~S5075C3(); // _ZN7S5075C3D1Ev
  virtual void  v4(); // _ZN7S5075C32v4Ev
  virtual void  v5(); // _ZN7S5075C32v5Ev
  virtual void  v6(); // _ZN7S5075C32v6Ev
  S5075C3(); // tgen
};
//SIG(-1 S5075C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5075C3 ::~S5075C3(){ note_dtor("S5075C3", this);}
void  S5075C3 ::v4(){vfunc_called(this, "_ZN7S5075C32v4Ev");}
void  S5075C3 ::v5(){vfunc_called(this, "_ZN7S5075C32v5Ev");}
void  S5075C3 ::v6(){vfunc_called(this, "_ZN7S5075C32v6Ev");}
S5075C3 ::S5075C3(){ note_ctor("S5075C3", this);} // tgen

static void Test_S5075C3()
{
  extern Class_Descriptor cd_S5075C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5075C3, buf);
    S5075C3 *dp, &lv = *(dp=new (buf) S5075C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5075C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5075C3)");
    check_field_offset(lv, s5075c3f0, ABISELECT(8,4), "S5075C3.s5075c3f0");
    check_field_offset(lv, s5075c3f1, ABISELECT(24,16), "S5075C3.s5075c3f1");
    check_field_offset(lv, s5075c3f2, ABISELECT(32,24), "S5075C3.s5075c3f2");
    test_class_info(&lv, &cd_S5075C3);
    dp->~S5075C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5075C3(Test_S5075C3, "S5075C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5075C3C1Ev();
extern void _ZN7S5075C3D1Ev();
Name_Map name_map_S5075C3[] = {
  NSPAIR(_ZN7S5075C3C1Ev),
  NSPAIR(_ZN7S5075C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5075C3[];
extern void _ZN7S5075C3D1Ev();
extern void _ZN7S5075C3D0Ev();
extern void _ZN7S5075C32v4Ev();
extern void _ZN7S5075C32v5Ev();
extern void _ZN7S5075C32v6Ev();
static  VTBL_ENTRY vtc_S5075C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5075C3[0]),
  (VTBL_ENTRY)&_ZN7S5075C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5075C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5075C3[];
extern  VTBL_ENTRY _ZTV7S5075C3[];
Class_Descriptor cd_S5075C3 = {  "S5075C3", // class name
  0,0,//no base classes
  &(vtc_S5075C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5075C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5075C3),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  S5075C2  : S5075C3 {
  void *s5075c2f0;
  virtual void  v7(); // _ZN7S5075C22v7Ev
  virtual void  v8(); // _ZN7S5075C22v8Ev
  ~S5075C2(); // tgen
  S5075C2(); // tgen
};
//SIG(-1 S5075C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5075C2 ::v7(){vfunc_called(this, "_ZN7S5075C22v7Ev");}
void  S5075C2 ::v8(){vfunc_called(this, "_ZN7S5075C22v8Ev");}
S5075C2 ::~S5075C2(){ note_dtor("S5075C2", this);} // tgen
S5075C2 ::S5075C2(){ note_ctor("S5075C2", this);} // tgen

static void Test_S5075C2()
{
  extern Class_Descriptor cd_S5075C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5075C2, buf);
    S5075C2 *dp, &lv = *(dp=new (buf) S5075C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5075C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5075C2)");
    check_base_class_offset(lv, (S5075C3*), 0, "S5075C2");
    check_field_offset(lv, s5075c2f0, ABISELECT(40,28), "S5075C2.s5075c2f0");
    test_class_info(&lv, &cd_S5075C2);
    dp->~S5075C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5075C2(Test_S5075C2, "S5075C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5075C2C1Ev();
extern void _ZN7S5075C2D1Ev();
Name_Map name_map_S5075C2[] = {
  NSPAIR(_ZN7S5075C2C1Ev),
  NSPAIR(_ZN7S5075C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5075C3;
extern VTBL_ENTRY _ZTI7S5075C3[];
extern  VTBL_ENTRY _ZTV7S5075C3[];
static Base_Class bases_S5075C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5075C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S5075C2[];
extern void _ZN7S5075C2D1Ev();
extern void _ZN7S5075C2D0Ev();
extern void _ZN7S5075C32v4Ev();
extern void _ZN7S5075C32v5Ev();
extern void _ZN7S5075C32v6Ev();
extern void _ZN7S5075C22v7Ev();
extern void _ZN7S5075C22v8Ev();
static  VTBL_ENTRY vtc_S5075C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5075C2[0]),
  (VTBL_ENTRY)&_ZN7S5075C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5075C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5075C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5075C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5075C2[];
extern  VTBL_ENTRY _ZTV7S5075C2[];
Class_Descriptor cd_S5075C2 = {  "S5075C2", // class name
  bases_S5075C2, 1,
  &(vtc_S5075C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5075C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5075C2),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  S5075C8_nt  {
  void *s5075c8f0[2];
  void  mf5075c8(); // _ZN10S5075C8_nt8mf5075c8Ev
};
//SIG(-1 S5075C8_nt) C1{ m Fp[2]}


void  S5075C8_nt ::mf5075c8(){}

//skip512 S5075C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5075C1  : S5075C2 {
  ::S4473C12_nt s5075c1f0;
  ::S2366C19 s5075c1f1;
  ::S130C11_nt s5075c1f2;
  int s5075c1f3;
  ::S2366C19 s5075c1f4;
  void *s5075c1f5[2];
  ::S5075C8_nt s5075c1f6;
  virtual  ~S5075C1(); // _ZN7S5075C1D1Ev
  virtual void  v1(); // _ZN7S5075C12v1Ev
  virtual void  v2(); // _ZN7S5075C12v2Ev
  virtual void  v3(); // _ZN7S5075C12v3Ev
  S5075C1(); // tgen
};
//SIG(1 S5075C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 FC4 FC6{ m Fp} FC7{ m Fp[2]} Fi FC6 Fp[2] FC8{ m Fp[2]}}


 S5075C1 ::~S5075C1(){ note_dtor("S5075C1", this);}
void  S5075C1 ::v1(){vfunc_called(this, "_ZN7S5075C12v1Ev");}
void  S5075C1 ::v2(){vfunc_called(this, "_ZN7S5075C12v2Ev");}
void  S5075C1 ::v3(){vfunc_called(this, "_ZN7S5075C12v3Ev");}
S5075C1 ::S5075C1(){ note_ctor("S5075C1", this);} // tgen

static void Test_S5075C1()
{
  extern Class_Descriptor cd_S5075C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S5075C1, buf);
    S5075C1 *dp, &lv = *(dp=new (buf) S5075C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S5075C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5075C1)");
    check_base_class_offset(lv, (S5075C3*)(S5075C2*), 0, "S5075C1");
    check_base_class_offset(lv, (S5075C2*), 0, "S5075C1");
    check_field_offset(lv, s5075c1f0, ABISELECT(48,32), "S5075C1.s5075c1f0");
    check_field_offset(lv, s5075c1f1, ABISELECT(64,44), "S5075C1.s5075c1f1");
    check_field_offset(lv, s5075c1f2, ABISELECT(72,48), "S5075C1.s5075c1f2");
    check_field_offset(lv, s5075c1f3, ABISELECT(88,56), "S5075C1.s5075c1f3");
    check_field_offset(lv, s5075c1f4, ABISELECT(96,60), "S5075C1.s5075c1f4");
    check_field_offset(lv, s5075c1f5, ABISELECT(104,64), "S5075C1.s5075c1f5");
    check_field_offset(lv, s5075c1f6, ABISELECT(120,72), "S5075C1.s5075c1f6");
    test_class_info(&lv, &cd_S5075C1);
    dp->~S5075C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5075C1(Test_S5075C1, "S5075C1", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S5075C1C1Ev();
extern void _ZN7S5075C1D1Ev();
Name_Map name_map_S5075C1[] = {
  NSPAIR(_ZN7S5075C1C1Ev),
  NSPAIR(_ZN7S5075C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5075C3;
extern VTBL_ENTRY _ZTI7S5075C3[];
extern  VTBL_ENTRY _ZTV7S5075C3[];
extern Class_Descriptor cd_S5075C2;
extern VTBL_ENTRY _ZTI7S5075C2[];
extern  VTBL_ENTRY _ZTV7S5075C2[];
static Base_Class bases_S5075C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5075C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5075C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5075C1[];
extern void _ZN7S5075C1D1Ev();
extern void _ZN7S5075C1D0Ev();
extern void _ZN7S5075C32v4Ev();
extern void _ZN7S5075C32v5Ev();
extern void _ZN7S5075C32v6Ev();
extern void _ZN7S5075C22v7Ev();
extern void _ZN7S5075C22v8Ev();
extern void _ZN7S5075C12v1Ev();
extern void _ZN7S5075C12v2Ev();
extern void _ZN7S5075C12v3Ev();
static  VTBL_ENTRY vtc_S5075C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5075C1[0]),
  (VTBL_ENTRY)&_ZN7S5075C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5075C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5075C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5075C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5075C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5075C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5075C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5075C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5075C1[];
extern  VTBL_ENTRY _ZTV7S5075C1[];
Class_Descriptor cd_S5075C1 = {  "S5075C1", // class name
  bases_S5075C1, 2,
  &(vtc_S5075C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S5075C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5075C1),12, //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  S4764C3  {
  ::S4473C12_nt s4764c3f0;
  int s4764c3f1[2];
  char s4764c3f2;
  virtual  ~S4764C3(); // _ZN7S4764C3D1Ev
  virtual void  v3(); // _ZN7S4764C32v3Ev
  virtual void  v4(); // _ZN7S4764C32v4Ev
  virtual void  v5(); // _ZN7S4764C32v5Ev
  S4764C3(); // tgen
};
//SIG(-1 S4764C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4764C3 ::~S4764C3(){ note_dtor("S4764C3", this);}
void  S4764C3 ::v3(){vfunc_called(this, "_ZN7S4764C32v3Ev");}
void  S4764C3 ::v4(){vfunc_called(this, "_ZN7S4764C32v4Ev");}
void  S4764C3 ::v5(){vfunc_called(this, "_ZN7S4764C32v5Ev");}
S4764C3 ::S4764C3(){ note_ctor("S4764C3", this);} // tgen

static void Test_S4764C3()
{
  extern Class_Descriptor cd_S4764C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4764C3, buf);
    S4764C3 *dp, &lv = *(dp=new (buf) S4764C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4764C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4764C3)");
    check_field_offset(lv, s4764c3f0, ABISELECT(8,4), "S4764C3.s4764c3f0");
    check_field_offset(lv, s4764c3f1, ABISELECT(24,16), "S4764C3.s4764c3f1");
    check_field_offset(lv, s4764c3f2, ABISELECT(32,24), "S4764C3.s4764c3f2");
    test_class_info(&lv, &cd_S4764C3);
    dp->~S4764C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4764C3(Test_S4764C3, "S4764C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4764C3C1Ev();
extern void _ZN7S4764C3D1Ev();
Name_Map name_map_S4764C3[] = {
  NSPAIR(_ZN7S4764C3C1Ev),
  NSPAIR(_ZN7S4764C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4764C3[];
extern void _ZN7S4764C3D1Ev();
extern void _ZN7S4764C3D0Ev();
extern void _ZN7S4764C32v3Ev();
extern void _ZN7S4764C32v4Ev();
extern void _ZN7S4764C32v5Ev();
static  VTBL_ENTRY vtc_S4764C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4764C3[0]),
  (VTBL_ENTRY)&_ZN7S4764C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4764C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4764C3[];
extern  VTBL_ENTRY _ZTV7S4764C3[];
Class_Descriptor cd_S4764C3 = {  "S4764C3", // class name
  0,0,//no base classes
  &(vtc_S4764C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4764C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4764C3),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  S4764C2  : S4764C3 {
  void *s4764c2f0;
  virtual void  v6(); // _ZN7S4764C22v6Ev
  virtual void  v7(); // _ZN7S4764C22v7Ev
  ~S4764C2(); // tgen
  S4764C2(); // tgen
};
//SIG(-1 S4764C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4764C2 ::v6(){vfunc_called(this, "_ZN7S4764C22v6Ev");}
void  S4764C2 ::v7(){vfunc_called(this, "_ZN7S4764C22v7Ev");}
S4764C2 ::~S4764C2(){ note_dtor("S4764C2", this);} // tgen
S4764C2 ::S4764C2(){ note_ctor("S4764C2", this);} // tgen

static void Test_S4764C2()
{
  extern Class_Descriptor cd_S4764C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4764C2, buf);
    S4764C2 *dp, &lv = *(dp=new (buf) S4764C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4764C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4764C2)");
    check_base_class_offset(lv, (S4764C3*), 0, "S4764C2");
    check_field_offset(lv, s4764c2f0, ABISELECT(40,28), "S4764C2.s4764c2f0");
    test_class_info(&lv, &cd_S4764C2);
    dp->~S4764C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4764C2(Test_S4764C2, "S4764C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4764C2C1Ev();
extern void _ZN7S4764C2D1Ev();
Name_Map name_map_S4764C2[] = {
  NSPAIR(_ZN7S4764C2C1Ev),
  NSPAIR(_ZN7S4764C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4764C3;
extern VTBL_ENTRY _ZTI7S4764C3[];
extern  VTBL_ENTRY _ZTV7S4764C3[];
static Base_Class bases_S4764C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4764C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4764C2[];
extern void _ZN7S4764C2D1Ev();
extern void _ZN7S4764C2D0Ev();
extern void _ZN7S4764C32v3Ev();
extern void _ZN7S4764C32v4Ev();
extern void _ZN7S4764C32v5Ev();
extern void _ZN7S4764C22v6Ev();
extern void _ZN7S4764C22v7Ev();
static  VTBL_ENTRY vtc_S4764C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4764C2[0]),
  (VTBL_ENTRY)&_ZN7S4764C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4764C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4764C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4764C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4764C2[];
extern  VTBL_ENTRY _ZTV7S4764C2[];
Class_Descriptor cd_S4764C2 = {  "S4764C2", // class name
  bases_S4764C2, 1,
  &(vtc_S4764C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4764C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4764C2),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  S4764C6  {
  __tsi64 s4764c6f0;
  void *s4764c6f1[2];
  ::S4729C10_nt s4764c6f2;
};
//SIG(-1 S4764C6) C1{ FL Fp[2] FC2{ m FC3{ m FL}}}



static void Test_S4764C6()
{
  {
    init_simple_test("S4764C6");
    S4764C6 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S4764C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4764C6)");
    check_field_offset(lv, s4764c6f0, 0, "S4764C6.s4764c6f0");
    check_field_offset(lv, s4764c6f1, 8, "S4764C6.s4764c6f1");
    check_field_offset(lv, s4764c6f2, ABISELECT(24,16), "S4764C6.s4764c6f2");
  }
}
static Arrange_To_Call_Me vS4764C6(Test_S4764C6, "S4764C6", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4764C1  : S4764C2 {
  ::S4764C6 s4764c1f0;
  void *s4764c1f1[2];
  ::S2366C19 s4764c1f2;
  ::S4473C12_nt s4764c1f3;
  int s4764c1f4;
  virtual  ~S4764C1(); // _ZN7S4764C1D1Ev
  virtual void  v1(); // _ZN7S4764C12v1Ev
  virtual void  v2(); // _ZN7S4764C12v2Ev
  S4764C1(); // tgen
};
//SIG(1 S4764C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ FL Fp[2] FC7{ m FC8{ m FL}}} Fp[2] FC9{ m Fp} FC4 Fi}


 S4764C1 ::~S4764C1(){ note_dtor("S4764C1", this);}
void  S4764C1 ::v1(){vfunc_called(this, "_ZN7S4764C12v1Ev");}
void  S4764C1 ::v2(){vfunc_called(this, "_ZN7S4764C12v2Ev");}
S4764C1 ::S4764C1(){ note_ctor("S4764C1", this);} // tgen

static void Test_S4764C1()
{
  extern Class_Descriptor cd_S4764C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S4764C1, buf);
    S4764C1 *dp, &lv = *(dp=new (buf) S4764C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S4764C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4764C1)");
    check_base_class_offset(lv, (S4764C3*)(S4764C2*), 0, "S4764C1");
    check_base_class_offset(lv, (S4764C2*), 0, "S4764C1");
    check_field_offset(lv, s4764c1f0, ABISELECT(48,32), "S4764C1.s4764c1f0");
    check_field_offset(lv, s4764c1f1, ABISELECT(80,56), "S4764C1.s4764c1f1");
    check_field_offset(lv, s4764c1f2, ABISELECT(96,64), "S4764C1.s4764c1f2");
    check_field_offset(lv, s4764c1f3, ABISELECT(104,68), "S4764C1.s4764c1f3");
    check_field_offset(lv, s4764c1f4, ABISELECT(120,80), "S4764C1.s4764c1f4");
    test_class_info(&lv, &cd_S4764C1);
    dp->~S4764C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4764C1(Test_S4764C1, "S4764C1", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN7S4764C1C1Ev();
extern void _ZN7S4764C1D1Ev();
Name_Map name_map_S4764C1[] = {
  NSPAIR(_ZN7S4764C1C1Ev),
  NSPAIR(_ZN7S4764C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4764C3;
extern VTBL_ENTRY _ZTI7S4764C3[];
extern  VTBL_ENTRY _ZTV7S4764C3[];
extern Class_Descriptor cd_S4764C2;
extern VTBL_ENTRY _ZTI7S4764C2[];
extern  VTBL_ENTRY _ZTV7S4764C2[];
static Base_Class bases_S4764C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4764C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4764C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4764C1[];
extern void _ZN7S4764C1D1Ev();
extern void _ZN7S4764C1D0Ev();
extern void _ZN7S4764C32v3Ev();
extern void _ZN7S4764C32v4Ev();
extern void _ZN7S4764C32v5Ev();
extern void _ZN7S4764C22v6Ev();
extern void _ZN7S4764C22v7Ev();
extern void _ZN7S4764C12v1Ev();
extern void _ZN7S4764C12v2Ev();
static  VTBL_ENTRY vtc_S4764C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4764C1[0]),
  (VTBL_ENTRY)&_ZN7S4764C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4764C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4764C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4764C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4764C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4764C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4764C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4764C1[];
extern  VTBL_ENTRY _ZTV7S4764C1[];
Class_Descriptor cd_S4764C1 = {  "S4764C1", // class name
  bases_S4764C1, 2,
  &(vtc_S4764C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI7S4764C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4764C1),11, //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  S7352C5  {
  void *s7352c5f0;
  long double s7352c5f1;
  int s7352c5f2;
  virtual void  v5(); // _ZN7S7352C52v5Ev
  virtual void  v6(); // _ZN7S7352C52v6Ev
  ~S7352C5(); // tgen
  S7352C5(); // tgen
};
//SIG(-1 S7352C5) C1{ v1 v2 Fp FD Fi}


void  S7352C5 ::v5(){vfunc_called(this, "_ZN7S7352C52v5Ev");}
void  S7352C5 ::v6(){vfunc_called(this, "_ZN7S7352C52v6Ev");}
S7352C5 ::~S7352C5(){ note_dtor("S7352C5", this);} // tgen
S7352C5 ::S7352C5(){ note_ctor("S7352C5", this);} // tgen

static void Test_S7352C5()
{
  extern Class_Descriptor cd_S7352C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S7352C5, buf);
    S7352C5 *dp, &lv = *(dp=new (buf) S7352C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7352C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7352C5)");
    check_field_offset(lv, s7352c5f0, ABISELECT(8,4), "S7352C5.s7352c5f0");
    check_field_offset(lv, s7352c5f1, ABISELECT(16,8), "S7352C5.s7352c5f1");
    check_field_offset(lv, s7352c5f2, ABISELECT(32,20), "S7352C5.s7352c5f2");
    test_class_info(&lv, &cd_S7352C5);
    dp->~S7352C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7352C5(Test_S7352C5, "S7352C5", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7352C5C1Ev();
extern void _ZN7S7352C5D1Ev();
Name_Map name_map_S7352C5[] = {
  NSPAIR(_ZN7S7352C5C1Ev),
  NSPAIR(_ZN7S7352C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7352C5[];
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY vtc_S7352C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C5[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
extern VTBL_ENTRY _ZTI7S7352C5[];
extern  VTBL_ENTRY _ZTV7S7352C5[];
Class_Descriptor cd_S7352C5 = {  "S7352C5", // class name
  0,0,//no base classes
  &(vtc_S7352C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7352C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7352C5),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  S7352C4  : virtual S7352C5 {
  void *s7352c4f0;
  virtual  ~S7352C4(); // _ZN7S7352C4D2Ev
  virtual void  v7(); // _ZN7S7352C42v7Ev
  virtual void  v8(); // _ZN7S7352C42v8Ev
  virtual void  v9(); // _ZN7S7352C42v9Ev
  virtual void  v10(); // _ZN7S7352C43v10Ev
  virtual void  v11(); // _ZN7S7352C43v11Ev
  virtual void  v12(); // _ZN7S7352C43v12Ev
  S7352C4(); // tgen
};
//SIG(-1 S7352C4) C1{ VBC2{ v7 v8 Fp FD Fi} vd v1 v2 v3 v4 v5 v6 Fp}


 S7352C4 ::~S7352C4(){ note_dtor("S7352C4", this);}
void  S7352C4 ::v7(){vfunc_called(this, "_ZN7S7352C42v7Ev");}
void  S7352C4 ::v8(){vfunc_called(this, "_ZN7S7352C42v8Ev");}
void  S7352C4 ::v9(){vfunc_called(this, "_ZN7S7352C42v9Ev");}
void  S7352C4 ::v10(){vfunc_called(this, "_ZN7S7352C43v10Ev");}
void  S7352C4 ::v11(){vfunc_called(this, "_ZN7S7352C43v11Ev");}
void  S7352C4 ::v12(){vfunc_called(this, "_ZN7S7352C43v12Ev");}
S7352C4 ::S7352C4(){ note_ctor("S7352C4", this);} // tgen

static void Test_S7352C4()
{
  extern Class_Descriptor cd_S7352C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,9)];
    init_test(&cd_S7352C4, buf);
    S7352C4 *dp, &lv = *(dp=new (buf) S7352C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7352C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7352C4)");
    check_base_class_offset(lv, (S7352C5*), ABISELECT(16,8), "S7352C4");
    check_field_offset(lv, s7352c4f0, ABISELECT(8,4), "S7352C4.s7352c4f0");
    test_class_info(&lv, &cd_S7352C4);
    dp->~S7352C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7352C4(Test_S7352C4, "S7352C4", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7352C4C1Ev();
extern void _ZN7S7352C4D2Ev();
Name_Map name_map_S7352C4[] = {
  NSPAIR(_ZN7S7352C4C1Ev),
  NSPAIR(_ZN7S7352C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7352C5;
extern VTBL_ENTRY _ZTI7S7352C5[];
extern  VTBL_ENTRY _ZTV7S7352C5[];
static Base_Class bases_S7352C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7352C5,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //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 _ZTI7S7352C4[];
extern void _ZN7S7352C4D1Ev();
extern void _ZN7S7352C4D0Ev();
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY vtc_S7352C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C4[0]),
  (VTBL_ENTRY)&_ZN7S7352C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7352C4[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
extern VTBL_ENTRY _ZTV7S7352C4[];
static  VTT_ENTRY vtt_S7352C4[] = {
  {&(_ZTV7S7352C4[3]),  3,17},
  {&(_ZTV7S7352C4[15]),  15,17},
};
extern VTBL_ENTRY _ZTI7S7352C4[];
extern  VTBL_ENTRY _ZTV7S7352C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C4[];
Class_Descriptor cd_S7352C4 = {  "S7352C4", // class name
  bases_S7352C4, 1,
  &(vtc_S7352C4[0]), // expected_vtbl_contents
  &(vtt_S7352C4[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7352C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7352C4),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7352C4),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  S7352C3  : S7352C4 {
  ::S7352C5 s7352c3f0;
  virtual  ~S7352C3(); // _ZN7S7352C3D2Ev
  virtual void  v13(); // _ZN7S7352C33v13Ev
  virtual void  v14(); // _ZN7S7352C33v14Ev
  S7352C3(); // tgen
};
//SIG(-1 S7352C3) C1{ BC2{ VBC3{ v3 v4 Fp FD Fi} vd v5 v6 v7 v8 v9 v10 Fp} vd v1 v2 FC3}


 S7352C3 ::~S7352C3(){ note_dtor("S7352C3", this);}
void  S7352C3 ::v13(){vfunc_called(this, "_ZN7S7352C33v13Ev");}
void  S7352C3 ::v14(){vfunc_called(this, "_ZN7S7352C33v14Ev");}
S7352C3 ::S7352C3(){ note_ctor("S7352C3", this);} // tgen

static void Test_S7352C3()
{
  extern Class_Descriptor cd_S7352C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,15)];
    init_test(&cd_S7352C3, buf);
    S7352C3 *dp, &lv = *(dp=new (buf) S7352C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S7352C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7352C3)");
    check_base_class_offset(lv, (S7352C5*)(S7352C4*), ABISELECT(64,32), "S7352C3");
    check_base_class_offset(lv, (S7352C4*), 0, "S7352C3");
    check_field_offset(lv, s7352c3f0, ABISELECT(16,8), "S7352C3.s7352c3f0");
    test_class_info(&lv, &cd_S7352C3);
    dp->~S7352C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7352C3(Test_S7352C3, "S7352C3", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN7S7352C3C1Ev();
extern void _ZN7S7352C3D2Ev();
Name_Map name_map_S7352C3[] = {
  NSPAIR(_ZN7S7352C3C1Ev),
  NSPAIR(_ZN7S7352C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7352C5;
extern VTBL_ENTRY _ZTI7S7352C5[];
extern  VTBL_ENTRY _ZTV7S7352C5[];
extern Class_Descriptor cd_S7352C4;
extern VTBL_ENTRY _ZTI7S7352C4[];
extern  VTBL_ENTRY _ZTV7S7352C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C4[];
static Base_Class bases_S7352C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7352C5,    ABISELECT(64,32), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //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_S7352C4,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7352C3[];
extern void _ZN7S7352C3D1Ev();
extern void _ZN7S7352C3D0Ev();
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
extern void _ZN7S7352C33v13Ev();
extern void _ZN7S7352C33v14Ev();
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY vtc_S7352C3[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C3[0]),
  (VTBL_ENTRY)&_ZN7S7352C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v14Ev,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7352C3[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
extern VTBL_ENTRY _ZTV7S7352C3[];
extern void _ZN7S7352C4D1Ev();
extern void _ZN7S7352C4D0Ev();
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C4__7S7352C3[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C4[0]),
  (VTBL_ENTRY)&_ZN7S7352C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
};
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C5__7S7352C4__7S7352C3[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7352C4[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
static  VTT_ENTRY vtt_S7352C3[] = {
  {&(_ZTV7S7352C3[3]),  3,19},
  {&(_tg__ZTV7S7352C4__7S7352C3[3]),  3,11},
  {&(_tg__ZTV7S7352C5__7S7352C4__7S7352C3[4]),  4,6},
  {&(_ZTV7S7352C3[17]),  17,19},
};
extern VTBL_ENTRY _ZTI7S7352C3[];
extern  VTBL_ENTRY _ZTV7S7352C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C3[];
Class_Descriptor cd_S7352C3 = {  "S7352C3", // class name
  bases_S7352C3, 2,
  &(vtc_S7352C3[0]), // expected_vtbl_contents
  &(vtt_S7352C3[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI7S7352C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7352C3),19, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7352C3),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  S7352C2  : virtual S7352C3 {
  virtual  ~S7352C2(); // _ZN7S7352C2D2Ev
  virtual void  v15(); // _ZN7S7352C23v15Ev
  virtual void  v16(); // _ZN7S7352C23v16Ev
  virtual void  v17(); // _ZN7S7352C23v17Ev
  virtual void  v18(); // _ZN7S7352C23v18Ev
  S7352C2(); // tgen
};
//SIG(-1 S7352C2) C1{ VBC2{ BC3{ VBC4{ v5 v6 Fp FD Fi} vd v7 v8 v9 v10 v11 v12 Fp} vd v13 v14 FC4} vd v1 v2 v3 v4}


 S7352C2 ::~S7352C2(){ note_dtor("S7352C2", this);}
void  S7352C2 ::v15(){vfunc_called(this, "_ZN7S7352C23v15Ev");}
void  S7352C2 ::v16(){vfunc_called(this, "_ZN7S7352C23v16Ev");}
void  S7352C2 ::v17(){vfunc_called(this, "_ZN7S7352C23v17Ev");}
void  S7352C2 ::v18(){vfunc_called(this, "_ZN7S7352C23v18Ev");}
S7352C2 ::S7352C2(){ note_ctor("S7352C2", this);} // tgen

static void Test_S7352C2()
{
  extern Class_Descriptor cd_S7352C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,16)];
    init_test(&cd_S7352C2, buf);
    S7352C2 *dp, &lv = *(dp=new (buf) S7352C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,60), "sizeof(S7352C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7352C2)");
    check_base_class_offset(lv, (S7352C5*)(S7352C4*)(S7352C3*), ABISELECT(80,36), "S7352C2");
    check_base_class_offset(lv, (S7352C4*)(S7352C3*), ABISELECT(16,4), "S7352C2");
    check_base_class_offset(lv, (S7352C3*), ABISELECT(16,4), "S7352C2");
    test_class_info(&lv, &cd_S7352C2);
    dp->~S7352C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7352C2(Test_S7352C2, "S7352C2", ABISELECT(128,60));

#else // __cplusplus

extern void _ZN7S7352C2C1Ev();
extern void _ZN7S7352C2D2Ev();
Name_Map name_map_S7352C2[] = {
  NSPAIR(_ZN7S7352C2C1Ev),
  NSPAIR(_ZN7S7352C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7352C5;
extern VTBL_ENTRY _ZTI7S7352C5[];
extern  VTBL_ENTRY _ZTV7S7352C5[];
extern Class_Descriptor cd_S7352C4;
extern VTBL_ENTRY _ZTI7S7352C4[];
extern  VTBL_ENTRY _ZTV7S7352C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C4[];
extern Class_Descriptor cd_S7352C3;
extern VTBL_ENTRY _ZTI7S7352C3[];
extern  VTBL_ENTRY _ZTV7S7352C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C3[];
static Base_Class bases_S7352C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7352C5,    ABISELECT(80,36), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //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_S7352C4,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7352C3,    ABISELECT(16,4), //bcp->offset
    10, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7352C2[];
extern void _ZN7S7352C2D1Ev();
extern void _ZN7S7352C2D0Ev();
extern void _ZN7S7352C23v15Ev();
extern void _ZN7S7352C23v16Ev();
extern void _ZN7S7352C23v17Ev();
extern void _ZN7S7352C23v18Ev();
extern void ABISELECT(_ZTv0_n32_N7S7352C2D1Ev,_ZTv0_n16_N7S7352C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7352C2D1Ev,_ZThn4_N7S7352C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7352C2D0Ev,_ZTv0_n16_N7S7352C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7352C2D0Ev,_ZThn4_N7S7352C2D0Ev)() __attribute__((weak));
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
extern void _ZN7S7352C33v13Ev();
extern void _ZN7S7352C33v14Ev();
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY vtc_S7352C2[] = {
  ABISELECT(80,36),
  ABISELECT(16,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C2[0]),
  (VTBL_ENTRY)&_ZN7S7352C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-4),
  ABISELECT(64,32),
  ABISELECT(-16,-4),
  (VTBL_ENTRY)&(_ZTI7S7352C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7352C2D1Ev,_ZTv0_n16_N7S7352C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7352C2D0Ev,_ZTv0_n16_N7S7352C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v14Ev,
  0,
  0,
  ABISELECT(-80,-36),
  (VTBL_ENTRY)&(_ZTI7S7352C2[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
extern VTBL_ENTRY _ZTV7S7352C2[];
extern void _ZN7S7352C3D1Ev();
extern void _ZN7S7352C3D0Ev();
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
extern void _ZN7S7352C33v13Ev();
extern void _ZN7S7352C33v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C3__7S7352C2[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C3[0]),
  (VTBL_ENTRY)&_ZN7S7352C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v14Ev,
};
extern void _ZN7S7352C4D1Ev();
extern void _ZN7S7352C4D0Ev();
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C47S7352C3__7S7352C2[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C4[0]),
  (VTBL_ENTRY)&_ZN7S7352C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
};
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C5__7S7352C47S7352C3__7S7352C2[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7352C4[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C5__7S7352C3__7S7352C2[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7352C3[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
static  VTT_ENTRY vtt_S7352C2[] = {
  {&(_ZTV7S7352C2[4]),  4,38},
  {&(_ZTV7S7352C2[22]),  22,38},
  {&(_ZTV7S7352C2[36]),  36,38},
  {&(_tg__ZTV7S7352C3__7S7352C2[3]),  3,13},
  {&(_tg__ZTV7S7352C47S7352C3__7S7352C2[3]),  3,11},
  {&(_tg__ZTV7S7352C5__7S7352C47S7352C3__7S7352C2[4]),  4,6},
  {&(_tg__ZTV7S7352C5__7S7352C3__7S7352C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7352C2[];
extern  VTBL_ENTRY _ZTV7S7352C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C2[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7352C2D0Ev,_ZTv0_n16_N7S7352C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7352C2D0Ev,_ZThn4_N7S7352C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7352C2D1Ev,_ZTv0_n16_N7S7352C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7352C2D1Ev,_ZThn4_N7S7352C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7352C2 = {  "S7352C2", // class name
  bases_S7352C2, 3,
  &(vtc_S7352C2[0]), // expected_vtbl_contents
  &(vtt_S7352C2[0]), // expected_vtt_contents
  ABISELECT(128,60), // object size
  NSPAIRA(_ZTI7S7352C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7352C2),38, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7352C2),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7352C1  : S7352C2 {
  void *s7352c1f0;
  unsigned char s7352c1f1:1;
  virtual  ~S7352C1(); // _ZN7S7352C1D2Ev
  virtual void  v1(); // _ZN7S7352C12v1Ev
  virtual void  v2(); // _ZN7S7352C12v2Ev
  virtual void  v3(); // _ZN7S7352C12v3Ev
  virtual void  v4(); // _ZN7S7352C12v4Ev
  S7352C1(); // tgen
};
//SIG(1 S7352C1) C1{ BC2{ VBC3{ BC4{ VBC5{ v5 v6 Fp FD Fi} vd v7 v8 v9 v10 v11 v12 Fp} vd v13 v14 FC5} vd v15 v16 v17 v18} vd v1 v2 v3 v4 Fp Fc:1}


 S7352C1 ::~S7352C1(){ note_dtor("S7352C1", this);}
void  S7352C1 ::v1(){vfunc_called(this, "_ZN7S7352C12v1Ev");}
void  S7352C1 ::v2(){vfunc_called(this, "_ZN7S7352C12v2Ev");}
void  S7352C1 ::v3(){vfunc_called(this, "_ZN7S7352C12v3Ev");}
void  S7352C1 ::v4(){vfunc_called(this, "_ZN7S7352C12v4Ev");}
S7352C1 ::S7352C1(){ note_ctor("S7352C1", this);} // tgen

static void Test_S7352C1()
{
  extern Class_Descriptor cd_S7352C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,18)];
    init_test(&cd_S7352C1, buf);
    S7352C1 *dp, &lv = *(dp=new (buf) S7352C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,68), "sizeof(S7352C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7352C1)");
    check_base_class_offset(lv, (S7352C5*)(S7352C4*)(S7352C3*), ABISELECT(96,44), "S7352C1");
    check_base_class_offset(lv, (S7352C4*)(S7352C3*), ABISELECT(32,12), "S7352C1");
    check_base_class_offset(lv, (S7352C3*)(S7352C2*), ABISELECT(32,12), "S7352C1");
    check_base_class_offset(lv, (S7352C2*), 0, "S7352C1");
    check_field_offset(lv, s7352c1f0, ABISELECT(8,4), "S7352C1.s7352c1f0");
    set_bf_and_test(lv, s7352c1f1, ABISELECT(16,8), 0, 1, 1, "S7352C1");
    test_class_info(&lv, &cd_S7352C1);
    dp->~S7352C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7352C1(Test_S7352C1, "S7352C1", ABISELECT(144,68));

#else // __cplusplus

extern void _ZN7S7352C1C1Ev();
extern void _ZN7S7352C1D2Ev();
Name_Map name_map_S7352C1[] = {
  NSPAIR(_ZN7S7352C1C1Ev),
  NSPAIR(_ZN7S7352C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7352C5;
extern VTBL_ENTRY _ZTI7S7352C5[];
extern  VTBL_ENTRY _ZTV7S7352C5[];
extern Class_Descriptor cd_S7352C4;
extern VTBL_ENTRY _ZTI7S7352C4[];
extern  VTBL_ENTRY _ZTV7S7352C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C4[];
extern Class_Descriptor cd_S7352C3;
extern VTBL_ENTRY _ZTI7S7352C3[];
extern  VTBL_ENTRY _ZTV7S7352C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C3[];
extern Class_Descriptor cd_S7352C2;
extern VTBL_ENTRY _ZTI7S7352C2[];
extern  VTBL_ENTRY _ZTV7S7352C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C2[];
static Base_Class bases_S7352C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7352C5,    ABISELECT(96,44), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //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_S7352C4,    ABISELECT(32,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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_S7352C3,    ABISELECT(32,12), //bcp->offset
    14, //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
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7352C2,    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 _ZTI7S7352C1[];
extern void _ZN7S7352C1D1Ev();
extern void _ZN7S7352C1D0Ev();
extern void _ZN7S7352C23v15Ev();
extern void _ZN7S7352C23v16Ev();
extern void _ZN7S7352C23v17Ev();
extern void _ZN7S7352C23v18Ev();
extern void _ZN7S7352C12v1Ev();
extern void _ZN7S7352C12v2Ev();
extern void _ZN7S7352C12v3Ev();
extern void _ZN7S7352C12v4Ev();
extern void ABISELECT(_ZTv0_n32_N7S7352C1D1Ev,_ZTv0_n16_N7S7352C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7352C1D1Ev,_ZThn12_N7S7352C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7352C1D0Ev,_ZTv0_n16_N7S7352C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7352C1D0Ev,_ZThn12_N7S7352C1D0Ev)() __attribute__((weak));
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
extern void _ZN7S7352C33v13Ev();
extern void _ZN7S7352C33v14Ev();
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY vtc_S7352C1[] = {
  ABISELECT(96,44),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C1[0]),
  (VTBL_ENTRY)&_ZN7S7352C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7352C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7352C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7352C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7352C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  ABISELECT(64,32),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7352C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7352C1D1Ev,_ZTv0_n16_N7S7352C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7352C1D0Ev,_ZTv0_n16_N7S7352C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v14Ev,
  0,
  0,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S7352C1[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
extern VTBL_ENTRY _ZTV7S7352C1[];
extern void _ZN7S7352C2D1Ev();
extern void _ZN7S7352C2D0Ev();
extern void _ZN7S7352C23v15Ev();
extern void _ZN7S7352C23v16Ev();
extern void _ZN7S7352C23v17Ev();
extern void _ZN7S7352C23v18Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C2__7S7352C1[] = {
  ABISELECT(96,44),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C2[0]),
  (VTBL_ENTRY)&_ZN7S7352C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7352C23v18Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7352C2D1Ev,_ZTv0_n16_N7S7352C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7352C2D1Ev,_ZThn12_N7S7352C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7352C2D0Ev,_ZTv0_n16_N7S7352C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7352C2D0Ev,_ZThn12_N7S7352C2D0Ev)() __attribute__((weak));
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
extern void _ZN7S7352C33v13Ev();
extern void _ZN7S7352C33v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C3__7S7352C2__7S7352C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-12),
  ABISELECT(64,32),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7352C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7352C2D1Ev,_ZTv0_n16_N7S7352C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7352C2D0Ev,_ZTv0_n16_N7S7352C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v14Ev,
};
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C5__7S7352C2__7S7352C1[] = {
  0,
  0,
  ABISELECT(-96,-44),
  (VTBL_ENTRY)&(_ZTI7S7352C2[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
extern void _ZN7S7352C3D1Ev();
extern void _ZN7S7352C3D0Ev();
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
extern void _ZN7S7352C33v13Ev();
extern void _ZN7S7352C33v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C3__7S7352C1[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C3[0]),
  (VTBL_ENTRY)&_ZN7S7352C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7352C33v14Ev,
};
extern void _ZN7S7352C4D1Ev();
extern void _ZN7S7352C4D0Ev();
extern void _ZN7S7352C42v7Ev();
extern void _ZN7S7352C42v8Ev();
extern void _ZN7S7352C42v9Ev();
extern void _ZN7S7352C43v10Ev();
extern void _ZN7S7352C43v11Ev();
extern void _ZN7S7352C43v12Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C47S7352C3__7S7352C1[] = {
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7352C4[0]),
  (VTBL_ENTRY)&_ZN7S7352C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7352C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7352C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7352C43v12Ev,
};
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C5__7S7352C47S7352C3__7S7352C1[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7352C4[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
extern void _ZN7S7352C52v5Ev();
extern void _ZN7S7352C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7352C5__7S7352C3__7S7352C1[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7352C3[0]),
  (VTBL_ENTRY)&_ZN7S7352C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7352C52v6Ev,
};
static  VTT_ENTRY vtt_S7352C1[] = {
  {&(_ZTV7S7352C1[4]),  4,42},
  {&(_tg__ZTV7S7352C2__7S7352C1[4]),  4,10},
  {&(_tg__ZTV7S7352C3__7S7352C2__7S7352C1[12]),  12,22},
  {&(_tg__ZTV7S7352C5__7S7352C2__7S7352C1[4]),  4,6},
  {&(_ZTV7S7352C1[26]),  26,42},
  {&(_ZTV7S7352C1[40]),  40,42},
  {&(_tg__ZTV7S7352C3__7S7352C1[3]),  3,13},
  {&(_tg__ZTV7S7352C47S7352C3__7S7352C1[3]),  3,11},
  {&(_tg__ZTV7S7352C5__7S7352C47S7352C3__7S7352C1[4]),  4,6},
  {&(_tg__ZTV7S7352C5__7S7352C3__7S7352C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI7S7352C1[];
extern  VTBL_ENTRY _ZTV7S7352C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7352C1[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7352C2D0Ev,_ZTv0_n16_N7S7352C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7352C2D0Ev,_ZThn12_N7S7352C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7352C2D1Ev,_ZTv0_n16_N7S7352C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7352C2D1Ev,_ZThn12_N7S7352C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7352C1D0Ev,_ZTv0_n16_N7S7352C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7352C1D0Ev,_ZThn12_N7S7352C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7352C1D1Ev,_ZTv0_n16_N7S7352C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7352C1D1Ev,_ZThn12_N7S7352C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7352C1 = {  "S7352C1", // class name
  bases_S7352C1, 4,
  &(vtc_S7352C1[0]), // expected_vtbl_contents
  &(vtt_S7352C1[0]), // expected_vtt_contents
  ABISELECT(144,68), // object size
  NSPAIRA(_ZTI7S7352C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7352C1),42, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7352C1),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2240C4  {
  ::S4473C12_nt s2240c4f0;
  int s2240c4f1[2];
  char s2240c4f2;
  virtual  ~S2240C4(); // _ZN7S2240C4D1Ev
  virtual void  v4(); // _ZN7S2240C42v4Ev
  virtual void  v5(); // _ZN7S2240C42v5Ev
  virtual void  v6(); // _ZN7S2240C42v6Ev
  S2240C4(); // tgen
};
//SIG(-1 S2240C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2240C4 ::~S2240C4(){ note_dtor("S2240C4", this);}
void  S2240C4 ::v4(){vfunc_called(this, "_ZN7S2240C42v4Ev");}
void  S2240C4 ::v5(){vfunc_called(this, "_ZN7S2240C42v5Ev");}
void  S2240C4 ::v6(){vfunc_called(this, "_ZN7S2240C42v6Ev");}
S2240C4 ::S2240C4(){ note_ctor("S2240C4", this);} // tgen

static void Test_S2240C4()
{
  extern Class_Descriptor cd_S2240C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2240C4, buf);
    S2240C4 *dp, &lv = *(dp=new (buf) S2240C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2240C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2240C4)");
    check_field_offset(lv, s2240c4f0, ABISELECT(8,4), "S2240C4.s2240c4f0");
    check_field_offset(lv, s2240c4f1, ABISELECT(24,16), "S2240C4.s2240c4f1");
    check_field_offset(lv, s2240c4f2, ABISELECT(32,24), "S2240C4.s2240c4f2");
    test_class_info(&lv, &cd_S2240C4);
    dp->~S2240C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2240C4(Test_S2240C4, "S2240C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2240C4C1Ev();
extern void _ZN7S2240C4D1Ev();
Name_Map name_map_S2240C4[] = {
  NSPAIR(_ZN7S2240C4C1Ev),
  NSPAIR(_ZN7S2240C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2240C4[];
extern void _ZN7S2240C4D1Ev();
extern void _ZN7S2240C4D0Ev();
extern void _ZN7S2240C42v4Ev();
extern void _ZN7S2240C42v5Ev();
extern void _ZN7S2240C42v6Ev();
static  VTBL_ENTRY vtc_S2240C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2240C4[0]),
  (VTBL_ENTRY)&_ZN7S2240C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2240C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S2240C4[];
extern  VTBL_ENTRY _ZTV7S2240C4[];
Class_Descriptor cd_S2240C4 = {  "S2240C4", // class name
  0,0,//no base classes
  &(vtc_S2240C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2240C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2240C4),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  S2240C3  : S2240C4 {
  void *s2240c3f0;
  virtual void  v7(); // _ZN7S2240C32v7Ev
  virtual void  v8(); // _ZN7S2240C32v8Ev
  ~S2240C3(); // tgen
  S2240C3(); // tgen
};
//SIG(-1 S2240C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2240C3 ::v7(){vfunc_called(this, "_ZN7S2240C32v7Ev");}
void  S2240C3 ::v8(){vfunc_called(this, "_ZN7S2240C32v8Ev");}
S2240C3 ::~S2240C3(){ note_dtor("S2240C3", this);} // tgen
S2240C3 ::S2240C3(){ note_ctor("S2240C3", this);} // tgen

static void Test_S2240C3()
{
  extern Class_Descriptor cd_S2240C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2240C3, buf);
    S2240C3 *dp, &lv = *(dp=new (buf) S2240C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2240C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2240C3)");
    check_base_class_offset(lv, (S2240C4*), 0, "S2240C3");
    check_field_offset(lv, s2240c3f0, ABISELECT(40,28), "S2240C3.s2240c3f0");
    test_class_info(&lv, &cd_S2240C3);
    dp->~S2240C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2240C3(Test_S2240C3, "S2240C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2240C3C1Ev();
extern void _ZN7S2240C3D1Ev();
Name_Map name_map_S2240C3[] = {
  NSPAIR(_ZN7S2240C3C1Ev),
  NSPAIR(_ZN7S2240C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2240C4;
extern VTBL_ENTRY _ZTI7S2240C4[];
extern  VTBL_ENTRY _ZTV7S2240C4[];
static Base_Class bases_S2240C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2240C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2240C3[];
extern void _ZN7S2240C3D1Ev();
extern void _ZN7S2240C3D0Ev();
extern void _ZN7S2240C42v4Ev();
extern void _ZN7S2240C42v5Ev();
extern void _ZN7S2240C42v6Ev();
extern void _ZN7S2240C32v7Ev();
extern void _ZN7S2240C32v8Ev();
static  VTBL_ENTRY vtc_S2240C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2240C3[0]),
  (VTBL_ENTRY)&_ZN7S2240C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2240C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2240C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2240C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S2240C3[];
extern  VTBL_ENTRY _ZTV7S2240C3[];
Class_Descriptor cd_S2240C3 = {  "S2240C3", // class name
  bases_S2240C3, 1,
  &(vtc_S2240C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2240C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2240C3),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  S2240C2  : S2240C3 {
  void *s2240c2f0;
  char s2240c2f1;
  ::S2366C14_nt s2240c2f2;
  virtual  ~S2240C2(); // _ZN7S2240C2D1Ev
  virtual void  v9(); // _ZN7S2240C22v9Ev
  S2240C2(); // tgen
};
//SIG(-1 S2240C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S2240C2 ::~S2240C2(){ note_dtor("S2240C2", this);}
void  S2240C2 ::v9(){vfunc_called(this, "_ZN7S2240C22v9Ev");}
S2240C2 ::S2240C2(){ note_ctor("S2240C2", this);} // tgen

static void Test_S2240C2()
{
  extern Class_Descriptor cd_S2240C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2240C2, buf);
    S2240C2 *dp, &lv = *(dp=new (buf) S2240C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2240C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2240C2)");
    check_base_class_offset(lv, (S2240C4*)(S2240C3*), 0, "S2240C2");
    check_base_class_offset(lv, (S2240C3*), 0, "S2240C2");
    check_field_offset(lv, s2240c2f0, ABISELECT(48,32), "S2240C2.s2240c2f0");
    check_field_offset(lv, s2240c2f1, ABISELECT(56,36), "S2240C2.s2240c2f1");
    check_field_offset(lv, s2240c2f2, ABISELECT(60,40), "S2240C2.s2240c2f2");
    test_class_info(&lv, &cd_S2240C2);
    dp->~S2240C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2240C2(Test_S2240C2, "S2240C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2240C2C1Ev();
extern void _ZN7S2240C2D1Ev();
Name_Map name_map_S2240C2[] = {
  NSPAIR(_ZN7S2240C2C1Ev),
  NSPAIR(_ZN7S2240C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2240C4;
extern VTBL_ENTRY _ZTI7S2240C4[];
extern  VTBL_ENTRY _ZTV7S2240C4[];
extern Class_Descriptor cd_S2240C3;
extern VTBL_ENTRY _ZTI7S2240C3[];
extern  VTBL_ENTRY _ZTV7S2240C3[];
static Base_Class bases_S2240C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2240C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2240C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2240C2[];
extern void _ZN7S2240C2D1Ev();
extern void _ZN7S2240C2D0Ev();
extern void _ZN7S2240C42v4Ev();
extern void _ZN7S2240C42v5Ev();
extern void _ZN7S2240C42v6Ev();
extern void _ZN7S2240C32v7Ev();
extern void _ZN7S2240C32v8Ev();
extern void _ZN7S2240C22v9Ev();
static  VTBL_ENTRY vtc_S2240C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2240C2[0]),
  (VTBL_ENTRY)&_ZN7S2240C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2240C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2240C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2240C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2240C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S2240C2[];
extern  VTBL_ENTRY _ZTV7S2240C2[];
Class_Descriptor cd_S2240C2 = {  "S2240C2", // class name
  bases_S2240C2, 2,
  &(vtc_S2240C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2240C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2240C2),10, //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  S2240C1  : S2240C2 {
  __tsi64 s2240c1f0;
  char s2240c1f1[65536];
  void *s2240c1f2[2];
  virtual  ~S2240C1(); // _ZN7S2240C1D1Ev
  virtual void  v1(); // _ZN7S2240C12v1Ev
  virtual void  v2(); // _ZN7S2240C12v2Ev
  virtual void  v3(); // _ZN7S2240C12v3Ev
  S2240C1(); // tgen
};
//SIG(1 S2240C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v7 v8 Fp} vd v9 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 FL Fc[65536] Fp[2]}


 S2240C1 ::~S2240C1(){ note_dtor("S2240C1", this);}
void  S2240C1 ::v1(){vfunc_called(this, "_ZN7S2240C12v1Ev");}
void  S2240C1 ::v2(){vfunc_called(this, "_ZN7S2240C12v2Ev");}
void  S2240C1 ::v3(){vfunc_called(this, "_ZN7S2240C12v3Ev");}
S2240C1 ::S2240C1(){ note_ctor("S2240C1", this);} // tgen

static void Test_S2240C1()
{
  extern Class_Descriptor cd_S2240C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8205,16401)];
    init_test(&cd_S2240C1, buf);
    S2240C1 *dp, &lv = *(dp=new (buf) S2240C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(65632,65600), "sizeof(S2240C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2240C1)");
    check_base_class_offset(lv, (S2240C4*)(S2240C3*)(S2240C2*), 0, "S2240C1");
    check_base_class_offset(lv, (S2240C3*)(S2240C2*), 0, "S2240C1");
    check_base_class_offset(lv, (S2240C2*), 0, "S2240C1");
    check_field_offset(lv, s2240c1f0, ABISELECT(72,48), "S2240C1.s2240c1f0");
    check_field_offset(lv, s2240c1f1, ABISELECT(80,56), "S2240C1.s2240c1f1");
    check_field_offset(lv, s2240c1f2, ABISELECT(65616,65592), "S2240C1.s2240c1f2");
    test_class_info(&lv, &cd_S2240C1);
    dp->~S2240C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2240C1(Test_S2240C1, "S2240C1", ABISELECT(65632,65600));

#else // __cplusplus

extern void _ZN7S2240C1C1Ev();
extern void _ZN7S2240C1D1Ev();
Name_Map name_map_S2240C1[] = {
  NSPAIR(_ZN7S2240C1C1Ev),
  NSPAIR(_ZN7S2240C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2240C4;
extern VTBL_ENTRY _ZTI7S2240C4[];
extern  VTBL_ENTRY _ZTV7S2240C4[];
extern Class_Descriptor cd_S2240C3;
extern VTBL_ENTRY _ZTI7S2240C3[];
extern  VTBL_ENTRY _ZTV7S2240C3[];
extern Class_Descriptor cd_S2240C2;
extern VTBL_ENTRY _ZTI7S2240C2[];
extern  VTBL_ENTRY _ZTV7S2240C2[];
static Base_Class bases_S2240C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2240C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2240C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2240C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2240C1[];
extern void _ZN7S2240C1D1Ev();
extern void _ZN7S2240C1D0Ev();
extern void _ZN7S2240C42v4Ev();
extern void _ZN7S2240C42v5Ev();
extern void _ZN7S2240C42v6Ev();
extern void _ZN7S2240C32v7Ev();
extern void _ZN7S2240C32v8Ev();
extern void _ZN7S2240C22v9Ev();
extern void _ZN7S2240C12v1Ev();
extern void _ZN7S2240C12v2Ev();
extern void _ZN7S2240C12v3Ev();
static  VTBL_ENTRY vtc_S2240C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2240C1[0]),
  (VTBL_ENTRY)&_ZN7S2240C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2240C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2240C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2240C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2240C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2240C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2240C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2240C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2240C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S2240C1[];
extern  VTBL_ENTRY _ZTV7S2240C1[];
Class_Descriptor cd_S2240C1 = {  "S2240C1", // class name
  bases_S2240C1, 3,
  &(vtc_S2240C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(65632,65600), // object size
  NSPAIRA(_ZTI7S2240C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2240C1),13, //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  S2239C4  {
  ::S4473C12_nt s2239c4f0;
  int s2239c4f1[2];
  char s2239c4f2;
  virtual  ~S2239C4(); // _ZN7S2239C4D1Ev
  virtual void  v4(); // _ZN7S2239C42v4Ev
  virtual void  v5(); // _ZN7S2239C42v5Ev
  virtual void  v6(); // _ZN7S2239C42v6Ev
  S2239C4(); // tgen
};
//SIG(-1 S2239C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2239C4 ::~S2239C4(){ note_dtor("S2239C4", this);}
void  S2239C4 ::v4(){vfunc_called(this, "_ZN7S2239C42v4Ev");}
void  S2239C4 ::v5(){vfunc_called(this, "_ZN7S2239C42v5Ev");}
void  S2239C4 ::v6(){vfunc_called(this, "_ZN7S2239C42v6Ev");}
S2239C4 ::S2239C4(){ note_ctor("S2239C4", this);} // tgen

static void Test_S2239C4()
{
  extern Class_Descriptor cd_S2239C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2239C4, buf);
    S2239C4 *dp, &lv = *(dp=new (buf) S2239C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2239C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2239C4)");
    check_field_offset(lv, s2239c4f0, ABISELECT(8,4), "S2239C4.s2239c4f0");
    check_field_offset(lv, s2239c4f1, ABISELECT(24,16), "S2239C4.s2239c4f1");
    check_field_offset(lv, s2239c4f2, ABISELECT(32,24), "S2239C4.s2239c4f2");
    test_class_info(&lv, &cd_S2239C4);
    dp->~S2239C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2239C4(Test_S2239C4, "S2239C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2239C4C1Ev();
extern void _ZN7S2239C4D1Ev();
Name_Map name_map_S2239C4[] = {
  NSPAIR(_ZN7S2239C4C1Ev),
  NSPAIR(_ZN7S2239C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2239C4[];
extern void _ZN7S2239C4D1Ev();
extern void _ZN7S2239C4D0Ev();
extern void _ZN7S2239C42v4Ev();
extern void _ZN7S2239C42v5Ev();
extern void _ZN7S2239C42v6Ev();
static  VTBL_ENTRY vtc_S2239C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2239C4[0]),
  (VTBL_ENTRY)&_ZN7S2239C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2239C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S2239C4[];
extern  VTBL_ENTRY _ZTV7S2239C4[];
Class_Descriptor cd_S2239C4 = {  "S2239C4", // class name
  0,0,//no base classes
  &(vtc_S2239C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2239C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2239C4),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  S2239C3  : S2239C4 {
  void *s2239c3f0;
  virtual void  v7(); // _ZN7S2239C32v7Ev
  virtual void  v8(); // _ZN7S2239C32v8Ev
  ~S2239C3(); // tgen
  S2239C3(); // tgen
};
//SIG(-1 S2239C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2239C3 ::v7(){vfunc_called(this, "_ZN7S2239C32v7Ev");}
void  S2239C3 ::v8(){vfunc_called(this, "_ZN7S2239C32v8Ev");}
S2239C3 ::~S2239C3(){ note_dtor("S2239C3", this);} // tgen
S2239C3 ::S2239C3(){ note_ctor("S2239C3", this);} // tgen

static void Test_S2239C3()
{
  extern Class_Descriptor cd_S2239C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2239C3, buf);
    S2239C3 *dp, &lv = *(dp=new (buf) S2239C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2239C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2239C3)");
    check_base_class_offset(lv, (S2239C4*), 0, "S2239C3");
    check_field_offset(lv, s2239c3f0, ABISELECT(40,28), "S2239C3.s2239c3f0");
    test_class_info(&lv, &cd_S2239C3);
    dp->~S2239C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2239C3(Test_S2239C3, "S2239C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2239C3C1Ev();
extern void _ZN7S2239C3D1Ev();
Name_Map name_map_S2239C3[] = {
  NSPAIR(_ZN7S2239C3C1Ev),
  NSPAIR(_ZN7S2239C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2239C4;
extern VTBL_ENTRY _ZTI7S2239C4[];
extern  VTBL_ENTRY _ZTV7S2239C4[];
static Base_Class bases_S2239C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2239C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2239C3[];
extern void _ZN7S2239C3D1Ev();
extern void _ZN7S2239C3D0Ev();
extern void _ZN7S2239C42v4Ev();
extern void _ZN7S2239C42v5Ev();
extern void _ZN7S2239C42v6Ev();
extern void _ZN7S2239C32v7Ev();
extern void _ZN7S2239C32v8Ev();
static  VTBL_ENTRY vtc_S2239C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2239C3[0]),
  (VTBL_ENTRY)&_ZN7S2239C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2239C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2239C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2239C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S2239C3[];
extern  VTBL_ENTRY _ZTV7S2239C3[];
Class_Descriptor cd_S2239C3 = {  "S2239C3", // class name
  bases_S2239C3, 1,
  &(vtc_S2239C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2239C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2239C3),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  S2239C2  : S2239C3 {
  void *s2239c2f0;
  char s2239c2f1;
  ::S2366C14_nt s2239c2f2;
  virtual  ~S2239C2(); // _ZN7S2239C2D1Ev
  virtual void  v9(); // _ZN7S2239C22v9Ev
  S2239C2(); // tgen
};
//SIG(-1 S2239C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S2239C2 ::~S2239C2(){ note_dtor("S2239C2", this);}
void  S2239C2 ::v9(){vfunc_called(this, "_ZN7S2239C22v9Ev");}
S2239C2 ::S2239C2(){ note_ctor("S2239C2", this);} // tgen

static void Test_S2239C2()
{
  extern Class_Descriptor cd_S2239C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S2239C2, buf);
    S2239C2 *dp, &lv = *(dp=new (buf) S2239C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S2239C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2239C2)");
    check_base_class_offset(lv, (S2239C4*)(S2239C3*), 0, "S2239C2");
    check_base_class_offset(lv, (S2239C3*), 0, "S2239C2");
    check_field_offset(lv, s2239c2f0, ABISELECT(48,32), "S2239C2.s2239c2f0");
    check_field_offset(lv, s2239c2f1, ABISELECT(56,36), "S2239C2.s2239c2f1");
    check_field_offset(lv, s2239c2f2, ABISELECT(60,40), "S2239C2.s2239c2f2");
    test_class_info(&lv, &cd_S2239C2);
    dp->~S2239C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2239C2(Test_S2239C2, "S2239C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S2239C2C1Ev();
extern void _ZN7S2239C2D1Ev();
Name_Map name_map_S2239C2[] = {
  NSPAIR(_ZN7S2239C2C1Ev),
  NSPAIR(_ZN7S2239C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2239C4;
extern VTBL_ENTRY _ZTI7S2239C4[];
extern  VTBL_ENTRY _ZTV7S2239C4[];
extern Class_Descriptor cd_S2239C3;
extern VTBL_ENTRY _ZTI7S2239C3[];
extern  VTBL_ENTRY _ZTV7S2239C3[];
static Base_Class bases_S2239C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2239C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2239C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2239C2[];
extern void _ZN7S2239C2D1Ev();
extern void _ZN7S2239C2D0Ev();
extern void _ZN7S2239C42v4Ev();
extern void _ZN7S2239C42v5Ev();
extern void _ZN7S2239C42v6Ev();
extern void _ZN7S2239C32v7Ev();
extern void _ZN7S2239C32v8Ev();
extern void _ZN7S2239C22v9Ev();
static  VTBL_ENTRY vtc_S2239C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2239C2[0]),
  (VTBL_ENTRY)&_ZN7S2239C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2239C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2239C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2239C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2239C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S2239C2[];
extern  VTBL_ENTRY _ZTV7S2239C2[];
Class_Descriptor cd_S2239C2 = {  "S2239C2", // class name
  bases_S2239C2, 2,
  &(vtc_S2239C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S2239C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2239C2),10, //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  S2239C1  : S2239C2 {
  long s2239c1f0;
  char s2239c1f1[65536];
  void *s2239c1f2[2];
  virtual  ~S2239C1(); // _ZN7S2239C1D1Ev
  virtual void  v1(); // _ZN7S2239C12v1Ev
  virtual void  v2(); // _ZN7S2239C12v2Ev
  virtual void  v3(); // _ZN7S2239C12v3Ev
  S2239C1(); // tgen
};
//SIG(1 S2239C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v7 v8 Fp} vd v9 Fp Fc FC7{ m Fi[2]}} vd v1 v2 v3 Fl Fc[65536] Fp[2]}


 S2239C1 ::~S2239C1(){ note_dtor("S2239C1", this);}
void  S2239C1 ::v1(){vfunc_called(this, "_ZN7S2239C12v1Ev");}
void  S2239C1 ::v2(){vfunc_called(this, "_ZN7S2239C12v2Ev");}
void  S2239C1 ::v3(){vfunc_called(this, "_ZN7S2239C12v3Ev");}
S2239C1 ::S2239C1(){ note_ctor("S2239C1", this);} // tgen

static void Test_S2239C1()
{
  extern Class_Descriptor cd_S2239C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8205,16400)];
    init_test(&cd_S2239C1, buf);
    S2239C1 *dp, &lv = *(dp=new (buf) S2239C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(65632,65596), "sizeof(S2239C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2239C1)");
    check_base_class_offset(lv, (S2239C4*)(S2239C3*)(S2239C2*), 0, "S2239C1");
    check_base_class_offset(lv, (S2239C3*)(S2239C2*), 0, "S2239C1");
    check_base_class_offset(lv, (S2239C2*), 0, "S2239C1");
    check_field_offset(lv, s2239c1f0, ABISELECT(72,48), "S2239C1.s2239c1f0");
    check_field_offset(lv, s2239c1f1, ABISELECT(80,52), "S2239C1.s2239c1f1");
    check_field_offset(lv, s2239c1f2, ABISELECT(65616,65588), "S2239C1.s2239c1f2");
    test_class_info(&lv, &cd_S2239C1);
    dp->~S2239C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2239C1(Test_S2239C1, "S2239C1", ABISELECT(65632,65596));

#else // __cplusplus

extern void _ZN7S2239C1C1Ev();
extern void _ZN7S2239C1D1Ev();
Name_Map name_map_S2239C1[] = {
  NSPAIR(_ZN7S2239C1C1Ev),
  NSPAIR(_ZN7S2239C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2239C4;
extern VTBL_ENTRY _ZTI7S2239C4[];
extern  VTBL_ENTRY _ZTV7S2239C4[];
extern Class_Descriptor cd_S2239C3;
extern VTBL_ENTRY _ZTI7S2239C3[];
extern  VTBL_ENTRY _ZTV7S2239C3[];
extern Class_Descriptor cd_S2239C2;
extern VTBL_ENTRY _ZTI7S2239C2[];
extern  VTBL_ENTRY _ZTV7S2239C2[];
static Base_Class bases_S2239C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2239C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2239C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2239C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2239C1[];
extern void _ZN7S2239C1D1Ev();
extern void _ZN7S2239C1D0Ev();
extern void _ZN7S2239C42v4Ev();
extern void _ZN7S2239C42v5Ev();
extern void _ZN7S2239C42v6Ev();
extern void _ZN7S2239C32v7Ev();
extern void _ZN7S2239C32v8Ev();
extern void _ZN7S2239C22v9Ev();
extern void _ZN7S2239C12v1Ev();
extern void _ZN7S2239C12v2Ev();
extern void _ZN7S2239C12v3Ev();
static  VTBL_ENTRY vtc_S2239C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2239C1[0]),
  (VTBL_ENTRY)&_ZN7S2239C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2239C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2239C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2239C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2239C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2239C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2239C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2239C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2239C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S2239C1[];
extern  VTBL_ENTRY _ZTV7S2239C1[];
Class_Descriptor cd_S2239C1 = {  "S2239C1", // class name
  bases_S2239C1, 3,
  &(vtc_S2239C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(65632,65596), // object size
  NSPAIRA(_ZTI7S2239C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2239C1),13, //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  S866C5  {
  ::S4473C12_nt s866c5f0;
  int s866c5f1[2];
  char s866c5f2;
  virtual  ~S866C5(); // _ZN6S866C5D1Ev
  virtual void  v2(); // _ZN6S866C52v2Ev
  virtual void  v3(); // _ZN6S866C52v3Ev
  virtual void  v4(); // _ZN6S866C52v4Ev
  S866C5(); // tgen
};
//SIG(-1 S866C5) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S866C5 ::~S866C5(){ note_dtor("S866C5", this);}
void  S866C5 ::v2(){vfunc_called(this, "_ZN6S866C52v2Ev");}
void  S866C5 ::v3(){vfunc_called(this, "_ZN6S866C52v3Ev");}
void  S866C5 ::v4(){vfunc_called(this, "_ZN6S866C52v4Ev");}
S866C5 ::S866C5(){ note_ctor("S866C5", this);} // tgen

static void Test_S866C5()
{
  extern Class_Descriptor cd_S866C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S866C5, buf);
    S866C5 *dp, &lv = *(dp=new (buf) S866C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S866C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S866C5)");
    check_field_offset(lv, s866c5f0, ABISELECT(8,4), "S866C5.s866c5f0");
    check_field_offset(lv, s866c5f1, ABISELECT(24,16), "S866C5.s866c5f1");
    check_field_offset(lv, s866c5f2, ABISELECT(32,24), "S866C5.s866c5f2");
    test_class_info(&lv, &cd_S866C5);
    dp->~S866C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS866C5(Test_S866C5, "S866C5", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN6S866C5C1Ev();
extern void _ZN6S866C5D1Ev();
Name_Map name_map_S866C5[] = {
  NSPAIR(_ZN6S866C5C1Ev),
  NSPAIR(_ZN6S866C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S866C5[];
extern void _ZN6S866C5D1Ev();
extern void _ZN6S866C5D0Ev();
extern void _ZN6S866C52v2Ev();
extern void _ZN6S866C52v3Ev();
extern void _ZN6S866C52v4Ev();
static  VTBL_ENTRY vtc_S866C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S866C5[0]),
  (VTBL_ENTRY)&_ZN6S866C5D1Ev,
  (VTBL_ENTRY)&_ZN6S866C5D0Ev,
  (VTBL_ENTRY)&_ZN6S866C52v2Ev,
  (VTBL_ENTRY)&_ZN6S866C52v3Ev,
  (VTBL_ENTRY)&_ZN6S866C52v4Ev,
};
extern VTBL_ENTRY _ZTI6S866C5[];
extern  VTBL_ENTRY _ZTV6S866C5[];
Class_Descriptor cd_S866C5 = {  "S866C5", // class name
  0,0,//no base classes
  &(vtc_S866C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI6S866C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S866C5),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  S866C4  : S866C5 {
  void *s866c4f0;
  virtual void  v5(); // _ZN6S866C42v5Ev
  virtual void  v6(); // _ZN6S866C42v6Ev
  ~S866C4(); // tgen
  S866C4(); // tgen
};
//SIG(-1 S866C4) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S866C4 ::v5(){vfunc_called(this, "_ZN6S866C42v5Ev");}
void  S866C4 ::v6(){vfunc_called(this, "_ZN6S866C42v6Ev");}
S866C4 ::~S866C4(){ note_dtor("S866C4", this);} // tgen
S866C4 ::S866C4(){ note_ctor("S866C4", this);} // tgen

static void Test_S866C4()
{
  extern Class_Descriptor cd_S866C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S866C4, buf);
    S866C4 *dp, &lv = *(dp=new (buf) S866C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S866C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S866C4)");
    check_base_class_offset(lv, (S866C5*), 0, "S866C4");
    check_field_offset(lv, s866c4f0, ABISELECT(40,28), "S866C4.s866c4f0");
    test_class_info(&lv, &cd_S866C4);
    dp->~S866C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS866C4(Test_S866C4, "S866C4", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN6S866C4C1Ev();
extern void _ZN6S866C4D1Ev();
Name_Map name_map_S866C4[] = {
  NSPAIR(_ZN6S866C4C1Ev),
  NSPAIR(_ZN6S866C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S866C5;
extern VTBL_ENTRY _ZTI6S866C5[];
extern  VTBL_ENTRY _ZTV6S866C5[];
static Base_Class bases_S866C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S866C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI6S866C4[];
extern void _ZN6S866C4D1Ev();
extern void _ZN6S866C4D0Ev();
extern void _ZN6S866C52v2Ev();
extern void _ZN6S866C52v3Ev();
extern void _ZN6S866C52v4Ev();
extern void _ZN6S866C42v5Ev();
extern void _ZN6S866C42v6Ev();
static  VTBL_ENTRY vtc_S866C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S866C4[0]),
  (VTBL_ENTRY)&_ZN6S866C4D1Ev,
  (VTBL_ENTRY)&_ZN6S866C4D0Ev,
  (VTBL_ENTRY)&_ZN6S866C52v2Ev,
  (VTBL_ENTRY)&_ZN6S866C52v3Ev,
  (VTBL_ENTRY)&_ZN6S866C52v4Ev,
  (VTBL_ENTRY)&_ZN6S866C42v5Ev,
  (VTBL_ENTRY)&_ZN6S866C42v6Ev,
};
extern VTBL_ENTRY _ZTI6S866C4[];
extern  VTBL_ENTRY _ZTV6S866C4[];
Class_Descriptor cd_S866C4 = {  "S866C4", // class name
  bases_S866C4, 1,
  &(vtc_S866C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI6S866C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S866C4),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  S866C3  : S866C4 {
  void *s866c3f0;
  char s866c3f1;
  ::S2366C14_nt s866c3f2;
  virtual  ~S866C3(); // _ZN6S866C3D1Ev
  virtual void  v7(); // _ZN6S866C32v7Ev
  S866C3(); // tgen
};
//SIG(-1 S866C3) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fp Fc FC6{ m Fi[2]}}


 S866C3 ::~S866C3(){ note_dtor("S866C3", this);}
void  S866C3 ::v7(){vfunc_called(this, "_ZN6S866C32v7Ev");}
S866C3 ::S866C3(){ note_ctor("S866C3", this);} // tgen

static void Test_S866C3()
{
  extern Class_Descriptor cd_S866C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S866C3, buf);
    S866C3 *dp, &lv = *(dp=new (buf) S866C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S866C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S866C3)");
    check_base_class_offset(lv, (S866C5*)(S866C4*), 0, "S866C3");
    check_base_class_offset(lv, (S866C4*), 0, "S866C3");
    check_field_offset(lv, s866c3f0, ABISELECT(48,32), "S866C3.s866c3f0");
    check_field_offset(lv, s866c3f1, ABISELECT(56,36), "S866C3.s866c3f1");
    check_field_offset(lv, s866c3f2, ABISELECT(60,40), "S866C3.s866c3f2");
    test_class_info(&lv, &cd_S866C3);
    dp->~S866C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS866C3(Test_S866C3, "S866C3", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN6S866C3C1Ev();
extern void _ZN6S866C3D1Ev();
Name_Map name_map_S866C3[] = {
  NSPAIR(_ZN6S866C3C1Ev),
  NSPAIR(_ZN6S866C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S866C5;
extern VTBL_ENTRY _ZTI6S866C5[];
extern  VTBL_ENTRY _ZTV6S866C5[];
extern Class_Descriptor cd_S866C4;
extern VTBL_ENTRY _ZTI6S866C4[];
extern  VTBL_ENTRY _ZTV6S866C4[];
static Base_Class bases_S866C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S866C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S866C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S866C3[];
extern void _ZN6S866C3D1Ev();
extern void _ZN6S866C3D0Ev();
extern void _ZN6S866C52v2Ev();
extern void _ZN6S866C52v3Ev();
extern void _ZN6S866C52v4Ev();
extern void _ZN6S866C42v5Ev();
extern void _ZN6S866C42v6Ev();
extern void _ZN6S866C32v7Ev();
static  VTBL_ENTRY vtc_S866C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S866C3[0]),
  (VTBL_ENTRY)&_ZN6S866C3D1Ev,
  (VTBL_ENTRY)&_ZN6S866C3D0Ev,
  (VTBL_ENTRY)&_ZN6S866C52v2Ev,
  (VTBL_ENTRY)&_ZN6S866C52v3Ev,
  (VTBL_ENTRY)&_ZN6S866C52v4Ev,
  (VTBL_ENTRY)&_ZN6S866C42v5Ev,
  (VTBL_ENTRY)&_ZN6S866C42v6Ev,
  (VTBL_ENTRY)&_ZN6S866C32v7Ev,
};
extern VTBL_ENTRY _ZTI6S866C3[];
extern  VTBL_ENTRY _ZTV6S866C3[];
Class_Descriptor cd_S866C3 = {  "S866C3", // class name
  bases_S866C3, 2,
  &(vtc_S866C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI6S866C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S866C3),10, //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  S866C2  : S866C3 {
  void *s866c2f0[3];
  virtual  ~S866C2(); // _ZN6S866C2D1Ev
  virtual void  v8(); // _ZN6S866C22v8Ev
  virtual void  v9(); // _ZN6S866C22v9Ev
  S866C2(); // tgen
};
//SIG(-1 S866C2) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd v8 Fp Fc FC7{ m Fi[2]}} vd v1 v2 Fp[3]}


 S866C2 ::~S866C2(){ note_dtor("S866C2", this);}
void  S866C2 ::v8(){vfunc_called(this, "_ZN6S866C22v8Ev");}
void  S866C2 ::v9(){vfunc_called(this, "_ZN6S866C22v9Ev");}
S866C2 ::S866C2(){ note_ctor("S866C2", this);} // tgen

static void Test_S866C2()
{
  extern Class_Descriptor cd_S866C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S866C2, buf);
    S866C2 *dp, &lv = *(dp=new (buf) S866C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S866C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S866C2)");
    check_base_class_offset(lv, (S866C5*)(S866C4*)(S866C3*), 0, "S866C2");
    check_base_class_offset(lv, (S866C4*)(S866C3*), 0, "S866C2");
    check_base_class_offset(lv, (S866C3*), 0, "S866C2");
    check_field_offset(lv, s866c2f0, ABISELECT(72,48), "S866C2.s866c2f0");
    test_class_info(&lv, &cd_S866C2);
    dp->~S866C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS866C2(Test_S866C2, "S866C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S866C2C1Ev();
extern void _ZN6S866C2D1Ev();
Name_Map name_map_S866C2[] = {
  NSPAIR(_ZN6S866C2C1Ev),
  NSPAIR(_ZN6S866C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S866C5;
extern VTBL_ENTRY _ZTI6S866C5[];
extern  VTBL_ENTRY _ZTV6S866C5[];
extern Class_Descriptor cd_S866C4;
extern VTBL_ENTRY _ZTI6S866C4[];
extern  VTBL_ENTRY _ZTV6S866C4[];
extern Class_Descriptor cd_S866C3;
extern VTBL_ENTRY _ZTI6S866C3[];
extern  VTBL_ENTRY _ZTV6S866C3[];
static Base_Class bases_S866C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S866C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S866C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S866C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S866C2[];
extern void _ZN6S866C2D1Ev();
extern void _ZN6S866C2D0Ev();
extern void _ZN6S866C52v2Ev();
extern void _ZN6S866C52v3Ev();
extern void _ZN6S866C52v4Ev();
extern void _ZN6S866C42v5Ev();
extern void _ZN6S866C42v6Ev();
extern void _ZN6S866C32v7Ev();
extern void _ZN6S866C22v8Ev();
extern void _ZN6S866C22v9Ev();
static  VTBL_ENTRY vtc_S866C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S866C2[0]),
  (VTBL_ENTRY)&_ZN6S866C2D1Ev,
  (VTBL_ENTRY)&_ZN6S866C2D0Ev,
  (VTBL_ENTRY)&_ZN6S866C52v2Ev,
  (VTBL_ENTRY)&_ZN6S866C52v3Ev,
  (VTBL_ENTRY)&_ZN6S866C52v4Ev,
  (VTBL_ENTRY)&_ZN6S866C42v5Ev,
  (VTBL_ENTRY)&_ZN6S866C42v6Ev,
  (VTBL_ENTRY)&_ZN6S866C32v7Ev,
  (VTBL_ENTRY)&_ZN6S866C22v8Ev,
  (VTBL_ENTRY)&_ZN6S866C22v9Ev,
};
extern VTBL_ENTRY _ZTI6S866C2[];
extern  VTBL_ENTRY _ZTV6S866C2[];
Class_Descriptor cd_S866C2 = {  "S866C2", // class name
  bases_S866C2, 3,
  &(vtc_S866C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S866C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S866C2),12, //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  S866C1  : S866C2 {
  virtual  ~S866C1(); // _ZN6S866C1D1Ev
  virtual void  v1(); // _ZN6S866C12v1Ev
  S866C1(); // tgen
};
//SIG(1 S866C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v2 v3 v4 FC6{ m Fp Fi FC7{ m}} Fi[2] Fc} v5 v6 Fp} vd v7 Fp Fc FC8{ m Fi[2]}} vd v8 v9 Fp[3]} vd v1}


 S866C1 ::~S866C1(){ note_dtor("S866C1", this);}
void  S866C1 ::v1(){vfunc_called(this, "_ZN6S866C12v1Ev");}
S866C1 ::S866C1(){ note_ctor("S866C1", this);} // tgen

static void Test_S866C1()
{
  extern Class_Descriptor cd_S866C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S866C1, buf);
    S866C1 *dp, &lv = *(dp=new (buf) S866C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S866C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S866C1)");
    check_base_class_offset(lv, (S866C5*)(S866C4*)(S866C3*)(S866C2*), 0, "S866C1");
    check_base_class_offset(lv, (S866C4*)(S866C3*)(S866C2*), 0, "S866C1");
    check_base_class_offset(lv, (S866C3*)(S866C2*), 0, "S866C1");
    check_base_class_offset(lv, (S866C2*), 0, "S866C1");
    test_class_info(&lv, &cd_S866C1);
    dp->~S866C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS866C1(Test_S866C1, "S866C1", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S866C1C1Ev();
extern void _ZN6S866C1D1Ev();
Name_Map name_map_S866C1[] = {
  NSPAIR(_ZN6S866C1C1Ev),
  NSPAIR(_ZN6S866C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S866C5;
extern VTBL_ENTRY _ZTI6S866C5[];
extern  VTBL_ENTRY _ZTV6S866C5[];
extern Class_Descriptor cd_S866C4;
extern VTBL_ENTRY _ZTI6S866C4[];
extern  VTBL_ENTRY _ZTV6S866C4[];
extern Class_Descriptor cd_S866C3;
extern VTBL_ENTRY _ZTI6S866C3[];
extern  VTBL_ENTRY _ZTV6S866C3[];
extern Class_Descriptor cd_S866C2;
extern VTBL_ENTRY _ZTI6S866C2[];
extern  VTBL_ENTRY _ZTV6S866C2[];
static Base_Class bases_S866C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S866C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S866C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S866C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S866C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S866C1[];
extern void _ZN6S866C1D1Ev();
extern void _ZN6S866C1D0Ev();
extern void _ZN6S866C52v2Ev();
extern void _ZN6S866C52v3Ev();
extern void _ZN6S866C52v4Ev();
extern void _ZN6S866C42v5Ev();
extern void _ZN6S866C42v6Ev();
extern void _ZN6S866C32v7Ev();
extern void _ZN6S866C22v8Ev();
extern void _ZN6S866C22v9Ev();
extern void _ZN6S866C12v1Ev();
static  VTBL_ENTRY vtc_S866C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S866C1[0]),
  (VTBL_ENTRY)&_ZN6S866C1D1Ev,
  (VTBL_ENTRY)&_ZN6S866C1D0Ev,
  (VTBL_ENTRY)&_ZN6S866C52v2Ev,
  (VTBL_ENTRY)&_ZN6S866C52v3Ev,
  (VTBL_ENTRY)&_ZN6S866C52v4Ev,
  (VTBL_ENTRY)&_ZN6S866C42v5Ev,
  (VTBL_ENTRY)&_ZN6S866C42v6Ev,
  (VTBL_ENTRY)&_ZN6S866C32v7Ev,
  (VTBL_ENTRY)&_ZN6S866C22v8Ev,
  (VTBL_ENTRY)&_ZN6S866C22v9Ev,
  (VTBL_ENTRY)&_ZN6S866C12v1Ev,
};
extern VTBL_ENTRY _ZTI6S866C1[];
extern  VTBL_ENTRY _ZTV6S866C1[];
Class_Descriptor cd_S866C1 = {  "S866C1", // class name
  bases_S866C1, 4,
  &(vtc_S866C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S866C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S866C1),13, //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  S4785C3  {
  ::S4473C12_nt s4785c3f0;
  int s4785c3f1[2];
  char s4785c3f2;
  virtual  ~S4785C3(); // _ZN7S4785C3D1Ev
  virtual void  v3(); // _ZN7S4785C32v3Ev
  virtual void  v4(); // _ZN7S4785C32v4Ev
  virtual void  v5(); // _ZN7S4785C32v5Ev
  S4785C3(); // tgen
};
//SIG(-1 S4785C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4785C3 ::~S4785C3(){ note_dtor("S4785C3", this);}
void  S4785C3 ::v3(){vfunc_called(this, "_ZN7S4785C32v3Ev");}
void  S4785C3 ::v4(){vfunc_called(this, "_ZN7S4785C32v4Ev");}
void  S4785C3 ::v5(){vfunc_called(this, "_ZN7S4785C32v5Ev");}
S4785C3 ::S4785C3(){ note_ctor("S4785C3", this);} // tgen

static void Test_S4785C3()
{
  extern Class_Descriptor cd_S4785C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4785C3, buf);
    S4785C3 *dp, &lv = *(dp=new (buf) S4785C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4785C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4785C3)");
    check_field_offset(lv, s4785c3f0, ABISELECT(8,4), "S4785C3.s4785c3f0");
    check_field_offset(lv, s4785c3f1, ABISELECT(24,16), "S4785C3.s4785c3f1");
    check_field_offset(lv, s4785c3f2, ABISELECT(32,24), "S4785C3.s4785c3f2");
    test_class_info(&lv, &cd_S4785C3);
    dp->~S4785C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4785C3(Test_S4785C3, "S4785C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4785C3C1Ev();
extern void _ZN7S4785C3D1Ev();
Name_Map name_map_S4785C3[] = {
  NSPAIR(_ZN7S4785C3C1Ev),
  NSPAIR(_ZN7S4785C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4785C3[];
extern void _ZN7S4785C3D1Ev();
extern void _ZN7S4785C3D0Ev();
extern void _ZN7S4785C32v3Ev();
extern void _ZN7S4785C32v4Ev();
extern void _ZN7S4785C32v5Ev();
static  VTBL_ENTRY vtc_S4785C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4785C3[0]),
  (VTBL_ENTRY)&_ZN7S4785C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4785C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4785C3[];
extern  VTBL_ENTRY _ZTV7S4785C3[];
Class_Descriptor cd_S4785C3 = {  "S4785C3", // class name
  0,0,//no base classes
  &(vtc_S4785C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4785C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4785C3),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  S4785C2  : S4785C3 {
  void *s4785c2f0;
  virtual void  v6(); // _ZN7S4785C22v6Ev
  virtual void  v7(); // _ZN7S4785C22v7Ev
  ~S4785C2(); // tgen
  S4785C2(); // tgen
};
//SIG(-1 S4785C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4785C2 ::v6(){vfunc_called(this, "_ZN7S4785C22v6Ev");}
void  S4785C2 ::v7(){vfunc_called(this, "_ZN7S4785C22v7Ev");}
S4785C2 ::~S4785C2(){ note_dtor("S4785C2", this);} // tgen
S4785C2 ::S4785C2(){ note_ctor("S4785C2", this);} // tgen

static void Test_S4785C2()
{
  extern Class_Descriptor cd_S4785C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4785C2, buf);
    S4785C2 *dp, &lv = *(dp=new (buf) S4785C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4785C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4785C2)");
    check_base_class_offset(lv, (S4785C3*), 0, "S4785C2");
    check_field_offset(lv, s4785c2f0, ABISELECT(40,28), "S4785C2.s4785c2f0");
    test_class_info(&lv, &cd_S4785C2);
    dp->~S4785C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4785C2(Test_S4785C2, "S4785C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4785C2C1Ev();
extern void _ZN7S4785C2D1Ev();
Name_Map name_map_S4785C2[] = {
  NSPAIR(_ZN7S4785C2C1Ev),
  NSPAIR(_ZN7S4785C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4785C3;
extern VTBL_ENTRY _ZTI7S4785C3[];
extern  VTBL_ENTRY _ZTV7S4785C3[];
static Base_Class bases_S4785C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4785C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4785C2[];
extern void _ZN7S4785C2D1Ev();
extern void _ZN7S4785C2D0Ev();
extern void _ZN7S4785C32v3Ev();
extern void _ZN7S4785C32v4Ev();
extern void _ZN7S4785C32v5Ev();
extern void _ZN7S4785C22v6Ev();
extern void _ZN7S4785C22v7Ev();
static  VTBL_ENTRY vtc_S4785C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4785C2[0]),
  (VTBL_ENTRY)&_ZN7S4785C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4785C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4785C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4785C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4785C2[];
extern  VTBL_ENTRY _ZTV7S4785C2[];
Class_Descriptor cd_S4785C2 = {  "S4785C2", // class name
  bases_S4785C2, 1,
  &(vtc_S4785C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4785C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4785C2),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  S4785C1  : S4785C2 {
  int s4785c1f0;
  void *s4785c1f1[2];
  ::S2173C14 s4785c1f2;
  ::S2366C19 s4785c1f3;
  virtual  ~S4785C1(); // _ZN7S4785C1D1Ev
  virtual void  v1(); // _ZN7S4785C12v1Ev
  virtual void  v2(); // _ZN7S4785C12v2Ev
  S4785C1(); // tgen
};
//SIG(1 S4785C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 Fi Fp[2] FC6{ m Fp Fi[2] FC7{ m}} FC8{ m Fp}}


 S4785C1 ::~S4785C1(){ note_dtor("S4785C1", this);}
void  S4785C1 ::v1(){vfunc_called(this, "_ZN7S4785C12v1Ev");}
void  S4785C1 ::v2(){vfunc_called(this, "_ZN7S4785C12v2Ev");}
S4785C1 ::S4785C1(){ note_ctor("S4785C1", this);} // tgen

static void Test_S4785C1()
{
  extern Class_Descriptor cd_S4785C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S4785C1, buf);
    S4785C1 *dp, &lv = *(dp=new (buf) S4785C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S4785C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4785C1)");
    check_base_class_offset(lv, (S4785C3*)(S4785C2*), 0, "S4785C1");
    check_base_class_offset(lv, (S4785C2*), 0, "S4785C1");
    check_field_offset(lv, s4785c1f0, ABISELECT(48,32), "S4785C1.s4785c1f0");
    check_field_offset(lv, s4785c1f1, ABISELECT(56,36), "S4785C1.s4785c1f1");
    check_field_offset(lv, s4785c1f2, ABISELECT(72,44), "S4785C1.s4785c1f2");
    check_field_offset(lv, s4785c1f3, ABISELECT(96,60), "S4785C1.s4785c1f3");
    test_class_info(&lv, &cd_S4785C1);
    dp->~S4785C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4785C1(Test_S4785C1, "S4785C1", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S4785C1C1Ev();
extern void _ZN7S4785C1D1Ev();
Name_Map name_map_S4785C1[] = {
  NSPAIR(_ZN7S4785C1C1Ev),
  NSPAIR(_ZN7S4785C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4785C3;
extern VTBL_ENTRY _ZTI7S4785C3[];
extern  VTBL_ENTRY _ZTV7S4785C3[];
extern Class_Descriptor cd_S4785C2;
extern VTBL_ENTRY _ZTI7S4785C2[];
extern  VTBL_ENTRY _ZTV7S4785C2[];
static Base_Class bases_S4785C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4785C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4785C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4785C1[];
extern void _ZN7S4785C1D1Ev();
extern void _ZN7S4785C1D0Ev();
extern void _ZN7S4785C32v3Ev();
extern void _ZN7S4785C32v4Ev();
extern void _ZN7S4785C32v5Ev();
extern void _ZN7S4785C22v6Ev();
extern void _ZN7S4785C22v7Ev();
extern void _ZN7S4785C12v1Ev();
extern void _ZN7S4785C12v2Ev();
static  VTBL_ENTRY vtc_S4785C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4785C1[0]),
  (VTBL_ENTRY)&_ZN7S4785C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4785C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4785C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4785C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4785C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4785C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4785C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4785C1[];
extern  VTBL_ENTRY _ZTV7S4785C1[];
Class_Descriptor cd_S4785C1 = {  "S4785C1", // class name
  bases_S4785C1, 2,
  &(vtc_S4785C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S4785C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4785C1),11, //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  S4771C3  {
  ::S4473C12_nt s4771c3f0;
  int s4771c3f1[2];
  char s4771c3f2;
  virtual  ~S4771C3(); // _ZN7S4771C3D1Ev
  virtual void  v3(); // _ZN7S4771C32v3Ev
  virtual void  v4(); // _ZN7S4771C32v4Ev
  virtual void  v5(); // _ZN7S4771C32v5Ev
  S4771C3(); // tgen
};
//SIG(-1 S4771C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4771C3 ::~S4771C3(){ note_dtor("S4771C3", this);}
void  S4771C3 ::v3(){vfunc_called(this, "_ZN7S4771C32v3Ev");}
void  S4771C3 ::v4(){vfunc_called(this, "_ZN7S4771C32v4Ev");}
void  S4771C3 ::v5(){vfunc_called(this, "_ZN7S4771C32v5Ev");}
S4771C3 ::S4771C3(){ note_ctor("S4771C3", this);} // tgen

static void Test_S4771C3()
{
  extern Class_Descriptor cd_S4771C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4771C3, buf);
    S4771C3 *dp, &lv = *(dp=new (buf) S4771C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4771C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4771C3)");
    check_field_offset(lv, s4771c3f0, ABISELECT(8,4), "S4771C3.s4771c3f0");
    check_field_offset(lv, s4771c3f1, ABISELECT(24,16), "S4771C3.s4771c3f1");
    check_field_offset(lv, s4771c3f2, ABISELECT(32,24), "S4771C3.s4771c3f2");
    test_class_info(&lv, &cd_S4771C3);
    dp->~S4771C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4771C3(Test_S4771C3, "S4771C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4771C3C1Ev();
extern void _ZN7S4771C3D1Ev();
Name_Map name_map_S4771C3[] = {
  NSPAIR(_ZN7S4771C3C1Ev),
  NSPAIR(_ZN7S4771C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4771C3[];
extern void _ZN7S4771C3D1Ev();
extern void _ZN7S4771C3D0Ev();
extern void _ZN7S4771C32v3Ev();
extern void _ZN7S4771C32v4Ev();
extern void _ZN7S4771C32v5Ev();
static  VTBL_ENTRY vtc_S4771C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4771C3[0]),
  (VTBL_ENTRY)&_ZN7S4771C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4771C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4771C3[];
extern  VTBL_ENTRY _ZTV7S4771C3[];
Class_Descriptor cd_S4771C3 = {  "S4771C3", // class name
  0,0,//no base classes
  &(vtc_S4771C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4771C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4771C3),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  S4771C2  : S4771C3 {
  void *s4771c2f0;
  virtual void  v6(); // _ZN7S4771C22v6Ev
  virtual void  v7(); // _ZN7S4771C22v7Ev
  ~S4771C2(); // tgen
  S4771C2(); // tgen
};
//SIG(-1 S4771C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4771C2 ::v6(){vfunc_called(this, "_ZN7S4771C22v6Ev");}
void  S4771C2 ::v7(){vfunc_called(this, "_ZN7S4771C22v7Ev");}
S4771C2 ::~S4771C2(){ note_dtor("S4771C2", this);} // tgen
S4771C2 ::S4771C2(){ note_ctor("S4771C2", this);} // tgen

static void Test_S4771C2()
{
  extern Class_Descriptor cd_S4771C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4771C2, buf);
    S4771C2 *dp, &lv = *(dp=new (buf) S4771C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4771C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4771C2)");
    check_base_class_offset(lv, (S4771C3*), 0, "S4771C2");
    check_field_offset(lv, s4771c2f0, ABISELECT(40,28), "S4771C2.s4771c2f0");
    test_class_info(&lv, &cd_S4771C2);
    dp->~S4771C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4771C2(Test_S4771C2, "S4771C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4771C2C1Ev();
extern void _ZN7S4771C2D1Ev();
Name_Map name_map_S4771C2[] = {
  NSPAIR(_ZN7S4771C2C1Ev),
  NSPAIR(_ZN7S4771C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4771C3;
extern VTBL_ENTRY _ZTI7S4771C3[];
extern  VTBL_ENTRY _ZTV7S4771C3[];
static Base_Class bases_S4771C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4771C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4771C2[];
extern void _ZN7S4771C2D1Ev();
extern void _ZN7S4771C2D0Ev();
extern void _ZN7S4771C32v3Ev();
extern void _ZN7S4771C32v4Ev();
extern void _ZN7S4771C32v5Ev();
extern void _ZN7S4771C22v6Ev();
extern void _ZN7S4771C22v7Ev();
static  VTBL_ENTRY vtc_S4771C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4771C2[0]),
  (VTBL_ENTRY)&_ZN7S4771C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4771C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4771C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4771C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4771C2[];
extern  VTBL_ENTRY _ZTV7S4771C2[];
Class_Descriptor cd_S4771C2 = {  "S4771C2", // class name
  bases_S4771C2, 1,
  &(vtc_S4771C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4771C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4771C2),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  S4771C6_nt  {
  int s4771c6f0;
  __tsi64 s4771c6f1[5];
  short s4771c6f2[2];
  int s4771c6f3[2];
  void  mf4771c6(); // _ZN10S4771C6_nt8mf4771c6Ev
};
//SIG(-1 S4771C6_nt) C1{ m Fi FL[5] Fs[2] Fi[2]}


void  S4771C6_nt ::mf4771c6(){}

//skip512 S4771C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4771C1  : S4771C2 {
  ::S4771C6_nt s4771c1f0;
  void *s4771c1f1;
  int s4771c1f2[2];
  void *s4771c1f3;
  virtual  ~S4771C1(); // _ZN7S4771C1D1Ev
  virtual void  v1(); // _ZN7S4771C12v1Ev
  virtual void  v2(); // _ZN7S4771C12v2Ev
  S4771C1(); // tgen
};
//SIG(1 S4771C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ m Fi FL[5] Fs[2] Fi[2]} Fp Fi[2] Fp}


 S4771C1 ::~S4771C1(){ note_dtor("S4771C1", this);}
void  S4771C1 ::v1(){vfunc_called(this, "_ZN7S4771C12v1Ev");}
void  S4771C1 ::v2(){vfunc_called(this, "_ZN7S4771C12v2Ev");}
S4771C1 ::S4771C1(){ note_ctor("S4771C1", this);} // tgen

static void Test_S4771C1()
{
  extern Class_Descriptor cd_S4771C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,27)];
    init_test(&cd_S4771C1, buf);
    S4771C1 *dp, &lv = *(dp=new (buf) S4771C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,104), "sizeof(S4771C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4771C1)");
    check_base_class_offset(lv, (S4771C3*)(S4771C2*), 0, "S4771C1");
    check_base_class_offset(lv, (S4771C2*), 0, "S4771C1");
    check_field_offset(lv, s4771c1f0, ABISELECT(48,32), "S4771C1.s4771c1f0");
    check_field_offset(lv, s4771c1f1, ABISELECT(112,88), "S4771C1.s4771c1f1");
    check_field_offset(lv, s4771c1f2, ABISELECT(120,92), "S4771C1.s4771c1f2");
    check_field_offset(lv, s4771c1f3, ABISELECT(128,100), "S4771C1.s4771c1f3");
    test_class_info(&lv, &cd_S4771C1);
    dp->~S4771C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4771C1(Test_S4771C1, "S4771C1", ABISELECT(136,104));

#else // __cplusplus

extern void _ZN7S4771C1C1Ev();
extern void _ZN7S4771C1D1Ev();
Name_Map name_map_S4771C1[] = {
  NSPAIR(_ZN7S4771C1C1Ev),
  NSPAIR(_ZN7S4771C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4771C3;
extern VTBL_ENTRY _ZTI7S4771C3[];
extern  VTBL_ENTRY _ZTV7S4771C3[];
extern Class_Descriptor cd_S4771C2;
extern VTBL_ENTRY _ZTI7S4771C2[];
extern  VTBL_ENTRY _ZTV7S4771C2[];
static Base_Class bases_S4771C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4771C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4771C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4771C1[];
extern void _ZN7S4771C1D1Ev();
extern void _ZN7S4771C1D0Ev();
extern void _ZN7S4771C32v3Ev();
extern void _ZN7S4771C32v4Ev();
extern void _ZN7S4771C32v5Ev();
extern void _ZN7S4771C22v6Ev();
extern void _ZN7S4771C22v7Ev();
extern void _ZN7S4771C12v1Ev();
extern void _ZN7S4771C12v2Ev();
static  VTBL_ENTRY vtc_S4771C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4771C1[0]),
  (VTBL_ENTRY)&_ZN7S4771C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4771C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4771C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4771C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4771C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4771C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4771C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4771C1[];
extern  VTBL_ENTRY _ZTV7S4771C1[];
Class_Descriptor cd_S4771C1 = {  "S4771C1", // class name
  bases_S4771C1, 2,
  &(vtc_S4771C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,104), // object size
  NSPAIRA(_ZTI7S4771C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4771C1),11, //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  S4737C3  {
  ::S4473C12_nt s4737c3f0;
  int s4737c3f1[2];
  char s4737c3f2;
  virtual  ~S4737C3(); // _ZN7S4737C3D1Ev
  virtual void  v3(); // _ZN7S4737C32v3Ev
  virtual void  v4(); // _ZN7S4737C32v4Ev
  virtual void  v5(); // _ZN7S4737C32v5Ev
  S4737C3(); // tgen
};
//SIG(-1 S4737C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4737C3 ::~S4737C3(){ note_dtor("S4737C3", this);}
void  S4737C3 ::v3(){vfunc_called(this, "_ZN7S4737C32v3Ev");}
void  S4737C3 ::v4(){vfunc_called(this, "_ZN7S4737C32v4Ev");}
void  S4737C3 ::v5(){vfunc_called(this, "_ZN7S4737C32v5Ev");}
S4737C3 ::S4737C3(){ note_ctor("S4737C3", this);} // tgen

static void Test_S4737C3()
{
  extern Class_Descriptor cd_S4737C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4737C3, buf);
    S4737C3 *dp, &lv = *(dp=new (buf) S4737C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4737C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4737C3)");
    check_field_offset(lv, s4737c3f0, ABISELECT(8,4), "S4737C3.s4737c3f0");
    check_field_offset(lv, s4737c3f1, ABISELECT(24,16), "S4737C3.s4737c3f1");
    check_field_offset(lv, s4737c3f2, ABISELECT(32,24), "S4737C3.s4737c3f2");
    test_class_info(&lv, &cd_S4737C3);
    dp->~S4737C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4737C3(Test_S4737C3, "S4737C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4737C3C1Ev();
extern void _ZN7S4737C3D1Ev();
Name_Map name_map_S4737C3[] = {
  NSPAIR(_ZN7S4737C3C1Ev),
  NSPAIR(_ZN7S4737C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4737C3[];
extern void _ZN7S4737C3D1Ev();
extern void _ZN7S4737C3D0Ev();
extern void _ZN7S4737C32v3Ev();
extern void _ZN7S4737C32v4Ev();
extern void _ZN7S4737C32v5Ev();
static  VTBL_ENTRY vtc_S4737C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4737C3[0]),
  (VTBL_ENTRY)&_ZN7S4737C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4737C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4737C3[];
extern  VTBL_ENTRY _ZTV7S4737C3[];
Class_Descriptor cd_S4737C3 = {  "S4737C3", // class name
  0,0,//no base classes
  &(vtc_S4737C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4737C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4737C3),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  S4737C2  : S4737C3 {
  void *s4737c2f0;
  virtual void  v6(); // _ZN7S4737C22v6Ev
  virtual void  v7(); // _ZN7S4737C22v7Ev
  ~S4737C2(); // tgen
  S4737C2(); // tgen
};
//SIG(-1 S4737C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4737C2 ::v6(){vfunc_called(this, "_ZN7S4737C22v6Ev");}
void  S4737C2 ::v7(){vfunc_called(this, "_ZN7S4737C22v7Ev");}
S4737C2 ::~S4737C2(){ note_dtor("S4737C2", this);} // tgen
S4737C2 ::S4737C2(){ note_ctor("S4737C2", this);} // tgen

static void Test_S4737C2()
{
  extern Class_Descriptor cd_S4737C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4737C2, buf);
    S4737C2 *dp, &lv = *(dp=new (buf) S4737C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4737C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4737C2)");
    check_base_class_offset(lv, (S4737C3*), 0, "S4737C2");
    check_field_offset(lv, s4737c2f0, ABISELECT(40,28), "S4737C2.s4737c2f0");
    test_class_info(&lv, &cd_S4737C2);
    dp->~S4737C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4737C2(Test_S4737C2, "S4737C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4737C2C1Ev();
extern void _ZN7S4737C2D1Ev();
Name_Map name_map_S4737C2[] = {
  NSPAIR(_ZN7S4737C2C1Ev),
  NSPAIR(_ZN7S4737C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4737C3;
extern VTBL_ENTRY _ZTI7S4737C3[];
extern  VTBL_ENTRY _ZTV7S4737C3[];
static Base_Class bases_S4737C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4737C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4737C2[];
extern void _ZN7S4737C2D1Ev();
extern void _ZN7S4737C2D0Ev();
extern void _ZN7S4737C32v3Ev();
extern void _ZN7S4737C32v4Ev();
extern void _ZN7S4737C32v5Ev();
extern void _ZN7S4737C22v6Ev();
extern void _ZN7S4737C22v7Ev();
static  VTBL_ENTRY vtc_S4737C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4737C2[0]),
  (VTBL_ENTRY)&_ZN7S4737C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4737C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4737C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4737C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4737C2[];
extern  VTBL_ENTRY _ZTV7S4737C2[];
Class_Descriptor cd_S4737C2 = {  "S4737C2", // class name
  bases_S4737C2, 1,
  &(vtc_S4737C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4737C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4737C2),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  S4737C7_nt  {
  void *s4737c7f0[3];
  int s4737c7f1;
  void  mf4737c7(); // _ZN10S4737C7_nt8mf4737c7Ev
};
//SIG(-1 S4737C7_nt) C1{ m Fp[3] Fi}


void  S4737C7_nt ::mf4737c7(){}

//skip512 S4737C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4737C1  : S4737C2 {
  ::S2366C19 s4737c1f0;
  void *s4737c1f1;
  ::S4737C7_nt s4737c1f2;
  int s4737c1f3;
  ::S2366C10_nt s4737c1f4;
  virtual void  v1(); // _ZN7S4737C12v1Ev
  virtual void  v2(); // _ZN7S4737C12v2Ev
  ~S4737C1(); // tgen
  S4737C1(); // tgen
};
//SIG(1 S4737C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} v1 v2 FC6{ m Fp} Fp FC7{ m Fp[3] Fi} Fi FC8{ m Fp}}


void  S4737C1 ::v1(){vfunc_called(this, "_ZN7S4737C12v1Ev");}
void  S4737C1 ::v2(){vfunc_called(this, "_ZN7S4737C12v2Ev");}
S4737C1 ::~S4737C1(){ note_dtor("S4737C1", this);} // tgen
S4737C1 ::S4737C1(){ note_ctor("S4737C1", this);} // tgen

static void Test_S4737C1()
{
  extern Class_Descriptor cd_S4737C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S4737C1, buf);
    S4737C1 *dp, &lv = *(dp=new (buf) S4737C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S4737C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4737C1)");
    check_base_class_offset(lv, (S4737C3*)(S4737C2*), 0, "S4737C1");
    check_base_class_offset(lv, (S4737C2*), 0, "S4737C1");
    check_field_offset(lv, s4737c1f0, ABISELECT(48,32), "S4737C1.s4737c1f0");
    check_field_offset(lv, s4737c1f1, ABISELECT(56,36), "S4737C1.s4737c1f1");
    check_field_offset(lv, s4737c1f2, ABISELECT(64,40), "S4737C1.s4737c1f2");
    check_field_offset(lv, s4737c1f3, ABISELECT(96,56), "S4737C1.s4737c1f3");
    check_field_offset(lv, s4737c1f4, ABISELECT(104,60), "S4737C1.s4737c1f4");
    test_class_info(&lv, &cd_S4737C1);
    dp->~S4737C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4737C1(Test_S4737C1, "S4737C1", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN7S4737C1C1Ev();
extern void _ZN7S4737C1D1Ev();
Name_Map name_map_S4737C1[] = {
  NSPAIR(_ZN7S4737C1C1Ev),
  NSPAIR(_ZN7S4737C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4737C3;
extern VTBL_ENTRY _ZTI7S4737C3[];
extern  VTBL_ENTRY _ZTV7S4737C3[];
extern Class_Descriptor cd_S4737C2;
extern VTBL_ENTRY _ZTI7S4737C2[];
extern  VTBL_ENTRY _ZTV7S4737C2[];
static Base_Class bases_S4737C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4737C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4737C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4737C1[];
extern void _ZN7S4737C1D1Ev();
extern void _ZN7S4737C1D0Ev();
extern void _ZN7S4737C32v3Ev();
extern void _ZN7S4737C32v4Ev();
extern void _ZN7S4737C32v5Ev();
extern void _ZN7S4737C22v6Ev();
extern void _ZN7S4737C22v7Ev();
extern void _ZN7S4737C12v1Ev();
extern void _ZN7S4737C12v2Ev();
static  VTBL_ENTRY vtc_S4737C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4737C1[0]),
  (VTBL_ENTRY)&_ZN7S4737C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4737C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4737C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4737C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4737C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4737C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4737C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4737C1[];
extern  VTBL_ENTRY _ZTV7S4737C1[];
Class_Descriptor cd_S4737C1 = {  "S4737C1", // class name
  bases_S4737C1, 2,
  &(vtc_S4737C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI7S4737C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4737C1),11, //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  S2083C4  {
  ::S4473C12_nt s2083c4f0;
  int s2083c4f1[2];
  char s2083c4f2;
  virtual  ~S2083C4(); // _ZN7S2083C4D1Ev
  virtual void  v2(); // _ZN7S2083C42v2Ev
  virtual void  v3(); // _ZN7S2083C42v3Ev
  virtual void  v4(); // _ZN7S2083C42v4Ev
  S2083C4(); // tgen
};
//SIG(-1 S2083C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2083C4 ::~S2083C4(){ note_dtor("S2083C4", this);}
void  S2083C4 ::v2(){vfunc_called(this, "_ZN7S2083C42v2Ev");}
void  S2083C4 ::v3(){vfunc_called(this, "_ZN7S2083C42v3Ev");}
void  S2083C4 ::v4(){vfunc_called(this, "_ZN7S2083C42v4Ev");}
S2083C4 ::S2083C4(){ note_ctor("S2083C4", this);} // tgen

static void Test_S2083C4()
{
  extern Class_Descriptor cd_S2083C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2083C4, buf);
    S2083C4 *dp, &lv = *(dp=new (buf) S2083C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2083C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2083C4)");
    check_field_offset(lv, s2083c4f0, ABISELECT(8,4), "S2083C4.s2083c4f0");
    check_field_offset(lv, s2083c4f1, ABISELECT(24,16), "S2083C4.s2083c4f1");
    check_field_offset(lv, s2083c4f2, ABISELECT(32,24), "S2083C4.s2083c4f2");
    test_class_info(&lv, &cd_S2083C4);
    dp->~S2083C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2083C4(Test_S2083C4, "S2083C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2083C4C1Ev();
extern void _ZN7S2083C4D1Ev();
Name_Map name_map_S2083C4[] = {
  NSPAIR(_ZN7S2083C4C1Ev),
  NSPAIR(_ZN7S2083C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2083C4[];
extern void _ZN7S2083C4D1Ev();
extern void _ZN7S2083C4D0Ev();
extern void _ZN7S2083C42v2Ev();
extern void _ZN7S2083C42v3Ev();
extern void _ZN7S2083C42v4Ev();
static  VTBL_ENTRY vtc_S2083C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2083C4[0]),
  (VTBL_ENTRY)&_ZN7S2083C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2083C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2083C4[];
extern  VTBL_ENTRY _ZTV7S2083C4[];
Class_Descriptor cd_S2083C4 = {  "S2083C4", // class name
  0,0,//no base classes
  &(vtc_S2083C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2083C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2083C4),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  S2083C3  : S2083C4 {
  void *s2083c3f0;
  virtual void  v5(); // _ZN7S2083C32v5Ev
  virtual void  v6(); // _ZN7S2083C32v6Ev
  ~S2083C3(); // tgen
  S2083C3(); // tgen
};
//SIG(-1 S2083C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2083C3 ::v5(){vfunc_called(this, "_ZN7S2083C32v5Ev");}
void  S2083C3 ::v6(){vfunc_called(this, "_ZN7S2083C32v6Ev");}
S2083C3 ::~S2083C3(){ note_dtor("S2083C3", this);} // tgen
S2083C3 ::S2083C3(){ note_ctor("S2083C3", this);} // tgen

static void Test_S2083C3()
{
  extern Class_Descriptor cd_S2083C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2083C3, buf);
    S2083C3 *dp, &lv = *(dp=new (buf) S2083C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2083C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2083C3)");
    check_base_class_offset(lv, (S2083C4*), 0, "S2083C3");
    check_field_offset(lv, s2083c3f0, ABISELECT(40,28), "S2083C3.s2083c3f0");
    test_class_info(&lv, &cd_S2083C3);
    dp->~S2083C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2083C3(Test_S2083C3, "S2083C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2083C3C1Ev();
extern void _ZN7S2083C3D1Ev();
Name_Map name_map_S2083C3[] = {
  NSPAIR(_ZN7S2083C3C1Ev),
  NSPAIR(_ZN7S2083C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2083C4;
extern VTBL_ENTRY _ZTI7S2083C4[];
extern  VTBL_ENTRY _ZTV7S2083C4[];
static Base_Class bases_S2083C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2083C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2083C3[];
extern void _ZN7S2083C3D1Ev();
extern void _ZN7S2083C3D0Ev();
extern void _ZN7S2083C42v2Ev();
extern void _ZN7S2083C42v3Ev();
extern void _ZN7S2083C42v4Ev();
extern void _ZN7S2083C32v5Ev();
extern void _ZN7S2083C32v6Ev();
static  VTBL_ENTRY vtc_S2083C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2083C3[0]),
  (VTBL_ENTRY)&_ZN7S2083C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2083C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2083C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2083C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2083C3[];
extern  VTBL_ENTRY _ZTV7S2083C3[];
Class_Descriptor cd_S2083C3 = {  "S2083C3", // class name
  bases_S2083C3, 1,
  &(vtc_S2083C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2083C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2083C3),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  S2083C2  : S2083C3 {
  void *s2083c2f0[2];
  ::S4473C12_nt s2083c2f1;
  ::S4473C12_nt s2083c2f2;
  __tsi64 s2083c2f3;
  int s2083c2f4;
  __tsi64 s2083c2f5;
  int s2083c2f6;
  virtual  ~S2083C2(); // _ZN7S2083C2D1Ev
  virtual void  v7(); // _ZN7S2083C22v7Ev
  virtual void  v8(); // _ZN7S2083C22v8Ev
  virtual void  v9(); // _ZN7S2083C22v9Ev
  S2083C2(); // tgen
};
//SIG(-1 S2083C2) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 Fp[2] FC4 FC4 FL Fi FL Fi}


 S2083C2 ::~S2083C2(){ note_dtor("S2083C2", this);}
void  S2083C2 ::v7(){vfunc_called(this, "_ZN7S2083C22v7Ev");}
void  S2083C2 ::v8(){vfunc_called(this, "_ZN7S2083C22v8Ev");}
void  S2083C2 ::v9(){vfunc_called(this, "_ZN7S2083C22v9Ev");}
S2083C2 ::S2083C2(){ note_ctor("S2083C2", this);} // tgen

static void Test_S2083C2()
{
  extern Class_Descriptor cd_S2083C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S2083C2, buf);
    S2083C2 *dp, &lv = *(dp=new (buf) S2083C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S2083C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2083C2)");
    check_base_class_offset(lv, (S2083C4*)(S2083C3*), 0, "S2083C2");
    check_base_class_offset(lv, (S2083C3*), 0, "S2083C2");
    check_field_offset(lv, s2083c2f0, ABISELECT(48,32), "S2083C2.s2083c2f0");
    check_field_offset(lv, s2083c2f1, ABISELECT(64,40), "S2083C2.s2083c2f1");
    check_field_offset(lv, s2083c2f2, ABISELECT(80,52), "S2083C2.s2083c2f2");
    check_field_offset(lv, s2083c2f3, ABISELECT(96,64), "S2083C2.s2083c2f3");
    check_field_offset(lv, s2083c2f4, ABISELECT(104,72), "S2083C2.s2083c2f4");
    check_field_offset(lv, s2083c2f5, ABISELECT(112,76), "S2083C2.s2083c2f5");
    check_field_offset(lv, s2083c2f6, ABISELECT(120,84), "S2083C2.s2083c2f6");
    test_class_info(&lv, &cd_S2083C2);
    dp->~S2083C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2083C2(Test_S2083C2, "S2083C2", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN7S2083C2C1Ev();
extern void _ZN7S2083C2D1Ev();
Name_Map name_map_S2083C2[] = {
  NSPAIR(_ZN7S2083C2C1Ev),
  NSPAIR(_ZN7S2083C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2083C4;
extern VTBL_ENTRY _ZTI7S2083C4[];
extern  VTBL_ENTRY _ZTV7S2083C4[];
extern Class_Descriptor cd_S2083C3;
extern VTBL_ENTRY _ZTI7S2083C3[];
extern  VTBL_ENTRY _ZTV7S2083C3[];
static Base_Class bases_S2083C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2083C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2083C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2083C2[];
extern void _ZN7S2083C2D1Ev();
extern void _ZN7S2083C2D0Ev();
extern void _ZN7S2083C42v2Ev();
extern void _ZN7S2083C42v3Ev();
extern void _ZN7S2083C42v4Ev();
extern void _ZN7S2083C32v5Ev();
extern void _ZN7S2083C32v6Ev();
extern void _ZN7S2083C22v7Ev();
extern void _ZN7S2083C22v8Ev();
extern void _ZN7S2083C22v9Ev();
static  VTBL_ENTRY vtc_S2083C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2083C2[0]),
  (VTBL_ENTRY)&_ZN7S2083C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2083C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2083C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2083C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2083C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2083C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2083C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S2083C2[];
extern  VTBL_ENTRY _ZTV7S2083C2[];
Class_Descriptor cd_S2083C2 = {  "S2083C2", // class name
  bases_S2083C2, 2,
  &(vtc_S2083C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI7S2083C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2083C2),12, //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  S2083C1  : S2083C2 {
  virtual void  v1(); // _ZN7S2083C12v1Ev
  ~S2083C1(); // tgen
  S2083C1(); // tgen
};
//SIG(1 S2083C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v5 v6 Fp} vd v7 v8 v9 Fp[2] FC5 FC5 FL Fi FL Fi} v1}


void  S2083C1 ::v1(){vfunc_called(this, "_ZN7S2083C12v1Ev");}
S2083C1 ::~S2083C1(){ note_dtor("S2083C1", this);} // tgen
S2083C1 ::S2083C1(){ note_ctor("S2083C1", this);} // tgen

static void Test_S2083C1()
{
  extern Class_Descriptor cd_S2083C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S2083C1, buf);
    S2083C1 *dp, &lv = *(dp=new (buf) S2083C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S2083C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2083C1)");
    check_base_class_offset(lv, (S2083C4*)(S2083C3*)(S2083C2*), 0, "S2083C1");
    check_base_class_offset(lv, (S2083C3*)(S2083C2*), 0, "S2083C1");
    check_base_class_offset(lv, (S2083C2*), 0, "S2083C1");
    test_class_info(&lv, &cd_S2083C1);
    dp->~S2083C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2083C1(Test_S2083C1, "S2083C1", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN7S2083C1C1Ev();
extern void _ZN7S2083C1D1Ev();
Name_Map name_map_S2083C1[] = {
  NSPAIR(_ZN7S2083C1C1Ev),
  NSPAIR(_ZN7S2083C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2083C4;
extern VTBL_ENTRY _ZTI7S2083C4[];
extern  VTBL_ENTRY _ZTV7S2083C4[];
extern Class_Descriptor cd_S2083C3;
extern VTBL_ENTRY _ZTI7S2083C3[];
extern  VTBL_ENTRY _ZTV7S2083C3[];
extern Class_Descriptor cd_S2083C2;
extern VTBL_ENTRY _ZTI7S2083C2[];
extern  VTBL_ENTRY _ZTV7S2083C2[];
static Base_Class bases_S2083C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2083C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2083C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2083C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2083C1[];
extern void _ZN7S2083C1D1Ev();
extern void _ZN7S2083C1D0Ev();
extern void _ZN7S2083C42v2Ev();
extern void _ZN7S2083C42v3Ev();
extern void _ZN7S2083C42v4Ev();
extern void _ZN7S2083C32v5Ev();
extern void _ZN7S2083C32v6Ev();
extern void _ZN7S2083C22v7Ev();
extern void _ZN7S2083C22v8Ev();
extern void _ZN7S2083C22v9Ev();
extern void _ZN7S2083C12v1Ev();
static  VTBL_ENTRY vtc_S2083C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2083C1[0]),
  (VTBL_ENTRY)&_ZN7S2083C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2083C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2083C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2083C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2083C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2083C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2083C22v8Ev,
  (VTBL_ENTRY)&_ZN7S2083C22v9Ev,
  (VTBL_ENTRY)&_ZN7S2083C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2083C1[];
extern  VTBL_ENTRY _ZTV7S2083C1[];
Class_Descriptor cd_S2083C1 = {  "S2083C1", // class name
  bases_S2083C1, 3,
  &(vtc_S2083C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI7S2083C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2083C1),13, //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  S4749C3  {
  ::S4473C12_nt s4749c3f0;
  int s4749c3f1[2];
  char s4749c3f2;
  virtual  ~S4749C3(); // _ZN7S4749C3D1Ev
  virtual void  v3(); // _ZN7S4749C32v3Ev
  virtual void  v4(); // _ZN7S4749C32v4Ev
  virtual void  v5(); // _ZN7S4749C32v5Ev
  S4749C3(); // tgen
};
//SIG(-1 S4749C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4749C3 ::~S4749C3(){ note_dtor("S4749C3", this);}
void  S4749C3 ::v3(){vfunc_called(this, "_ZN7S4749C32v3Ev");}
void  S4749C3 ::v4(){vfunc_called(this, "_ZN7S4749C32v4Ev");}
void  S4749C3 ::v5(){vfunc_called(this, "_ZN7S4749C32v5Ev");}
S4749C3 ::S4749C3(){ note_ctor("S4749C3", this);} // tgen

static void Test_S4749C3()
{
  extern Class_Descriptor cd_S4749C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4749C3, buf);
    S4749C3 *dp, &lv = *(dp=new (buf) S4749C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4749C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4749C3)");
    check_field_offset(lv, s4749c3f0, ABISELECT(8,4), "S4749C3.s4749c3f0");
    check_field_offset(lv, s4749c3f1, ABISELECT(24,16), "S4749C3.s4749c3f1");
    check_field_offset(lv, s4749c3f2, ABISELECT(32,24), "S4749C3.s4749c3f2");
    test_class_info(&lv, &cd_S4749C3);
    dp->~S4749C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4749C3(Test_S4749C3, "S4749C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4749C3C1Ev();
extern void _ZN7S4749C3D1Ev();
Name_Map name_map_S4749C3[] = {
  NSPAIR(_ZN7S4749C3C1Ev),
  NSPAIR(_ZN7S4749C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4749C3[];
extern void _ZN7S4749C3D1Ev();
extern void _ZN7S4749C3D0Ev();
extern void _ZN7S4749C32v3Ev();
extern void _ZN7S4749C32v4Ev();
extern void _ZN7S4749C32v5Ev();
static  VTBL_ENTRY vtc_S4749C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4749C3[0]),
  (VTBL_ENTRY)&_ZN7S4749C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4749C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4749C3[];
extern  VTBL_ENTRY _ZTV7S4749C3[];
Class_Descriptor cd_S4749C3 = {  "S4749C3", // class name
  0,0,//no base classes
  &(vtc_S4749C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4749C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4749C3),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  S4749C2  : S4749C3 {
  void *s4749c2f0;
  virtual void  v6(); // _ZN7S4749C22v6Ev
  virtual void  v7(); // _ZN7S4749C22v7Ev
  ~S4749C2(); // tgen
  S4749C2(); // tgen
};
//SIG(-1 S4749C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4749C2 ::v6(){vfunc_called(this, "_ZN7S4749C22v6Ev");}
void  S4749C2 ::v7(){vfunc_called(this, "_ZN7S4749C22v7Ev");}
S4749C2 ::~S4749C2(){ note_dtor("S4749C2", this);} // tgen
S4749C2 ::S4749C2(){ note_ctor("S4749C2", this);} // tgen

static void Test_S4749C2()
{
  extern Class_Descriptor cd_S4749C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4749C2, buf);
    S4749C2 *dp, &lv = *(dp=new (buf) S4749C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4749C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4749C2)");
    check_base_class_offset(lv, (S4749C3*), 0, "S4749C2");
    check_field_offset(lv, s4749c2f0, ABISELECT(40,28), "S4749C2.s4749c2f0");
    test_class_info(&lv, &cd_S4749C2);
    dp->~S4749C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4749C2(Test_S4749C2, "S4749C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4749C2C1Ev();
extern void _ZN7S4749C2D1Ev();
Name_Map name_map_S4749C2[] = {
  NSPAIR(_ZN7S4749C2C1Ev),
  NSPAIR(_ZN7S4749C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4749C3;
extern VTBL_ENTRY _ZTI7S4749C3[];
extern  VTBL_ENTRY _ZTV7S4749C3[];
static Base_Class bases_S4749C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4749C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4749C2[];
extern void _ZN7S4749C2D1Ev();
extern void _ZN7S4749C2D0Ev();
extern void _ZN7S4749C32v3Ev();
extern void _ZN7S4749C32v4Ev();
extern void _ZN7S4749C32v5Ev();
extern void _ZN7S4749C22v6Ev();
extern void _ZN7S4749C22v7Ev();
static  VTBL_ENTRY vtc_S4749C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4749C2[0]),
  (VTBL_ENTRY)&_ZN7S4749C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4749C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4749C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4749C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4749C2[];
extern  VTBL_ENTRY _ZTV7S4749C2[];
Class_Descriptor cd_S4749C2 = {  "S4749C2", // class name
  bases_S4749C2, 1,
  &(vtc_S4749C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4749C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4749C2),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  S4749C1  : S4749C2 {
  ::S4473C12_nt s4749c1f0;
  ::S2366C19 s4749c1f1;
  ::S5075C8_nt s4749c1f2;
  char s4749c1f3;
  int s4749c1f4[2];
  virtual  ~S4749C1(); // _ZN7S4749C1D1Ev
  virtual void  v1(); // _ZN7S4749C12v1Ev
  virtual void  v2(); // _ZN7S4749C12v2Ev
  S4749C1(); // tgen
};
//SIG(1 S4749C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC4 FC6{ m Fp} FC7{ m Fp[2]} Fc Fi[2]}


 S4749C1 ::~S4749C1(){ note_dtor("S4749C1", this);}
void  S4749C1 ::v1(){vfunc_called(this, "_ZN7S4749C12v1Ev");}
void  S4749C1 ::v2(){vfunc_called(this, "_ZN7S4749C12v2Ev");}
S4749C1 ::S4749C1(){ note_ctor("S4749C1", this);} // tgen

static void Test_S4749C1()
{
  extern Class_Descriptor cd_S4749C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4749C1, buf);
    S4749C1 *dp, &lv = *(dp=new (buf) S4749C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4749C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4749C1)");
    check_base_class_offset(lv, (S4749C3*)(S4749C2*), 0, "S4749C1");
    check_base_class_offset(lv, (S4749C2*), 0, "S4749C1");
    check_field_offset(lv, s4749c1f0, ABISELECT(48,32), "S4749C1.s4749c1f0");
    check_field_offset(lv, s4749c1f1, ABISELECT(64,44), "S4749C1.s4749c1f1");
    check_field_offset(lv, s4749c1f2, ABISELECT(72,48), "S4749C1.s4749c1f2");
    check_field_offset(lv, s4749c1f3, ABISELECT(88,56), "S4749C1.s4749c1f3");
    check_field_offset(lv, s4749c1f4, ABISELECT(92,60), "S4749C1.s4749c1f4");
    test_class_info(&lv, &cd_S4749C1);
    dp->~S4749C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4749C1(Test_S4749C1, "S4749C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4749C1C1Ev();
extern void _ZN7S4749C1D1Ev();
Name_Map name_map_S4749C1[] = {
  NSPAIR(_ZN7S4749C1C1Ev),
  NSPAIR(_ZN7S4749C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4749C3;
extern VTBL_ENTRY _ZTI7S4749C3[];
extern  VTBL_ENTRY _ZTV7S4749C3[];
extern Class_Descriptor cd_S4749C2;
extern VTBL_ENTRY _ZTI7S4749C2[];
extern  VTBL_ENTRY _ZTV7S4749C2[];
static Base_Class bases_S4749C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4749C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4749C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4749C1[];
extern void _ZN7S4749C1D1Ev();
extern void _ZN7S4749C1D0Ev();
extern void _ZN7S4749C32v3Ev();
extern void _ZN7S4749C32v4Ev();
extern void _ZN7S4749C32v5Ev();
extern void _ZN7S4749C22v6Ev();
extern void _ZN7S4749C22v7Ev();
extern void _ZN7S4749C12v1Ev();
extern void _ZN7S4749C12v2Ev();
static  VTBL_ENTRY vtc_S4749C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4749C1[0]),
  (VTBL_ENTRY)&_ZN7S4749C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4749C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4749C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4749C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4749C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4749C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4749C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4749C1[];
extern  VTBL_ENTRY _ZTV7S4749C1[];
Class_Descriptor cd_S4749C1 = {  "S4749C1", // class name
  bases_S4749C1, 2,
  &(vtc_S4749C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4749C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4749C1),11, //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  S4791C3  {
  ::S4473C12_nt s4791c3f0;
  int s4791c3f1[2];
  char s4791c3f2;
  virtual  ~S4791C3(); // _ZN7S4791C3D1Ev
  virtual void  v3(); // _ZN7S4791C32v3Ev
  virtual void  v4(); // _ZN7S4791C32v4Ev
  virtual void  v5(); // _ZN7S4791C32v5Ev
  S4791C3(); // tgen
};
//SIG(-1 S4791C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4791C3 ::~S4791C3(){ note_dtor("S4791C3", this);}
void  S4791C3 ::v3(){vfunc_called(this, "_ZN7S4791C32v3Ev");}
void  S4791C3 ::v4(){vfunc_called(this, "_ZN7S4791C32v4Ev");}
void  S4791C3 ::v5(){vfunc_called(this, "_ZN7S4791C32v5Ev");}
S4791C3 ::S4791C3(){ note_ctor("S4791C3", this);} // tgen

static void Test_S4791C3()
{
  extern Class_Descriptor cd_S4791C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4791C3, buf);
    S4791C3 *dp, &lv = *(dp=new (buf) S4791C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4791C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4791C3)");
    check_field_offset(lv, s4791c3f0, ABISELECT(8,4), "S4791C3.s4791c3f0");
    check_field_offset(lv, s4791c3f1, ABISELECT(24,16), "S4791C3.s4791c3f1");
    check_field_offset(lv, s4791c3f2, ABISELECT(32,24), "S4791C3.s4791c3f2");
    test_class_info(&lv, &cd_S4791C3);
    dp->~S4791C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4791C3(Test_S4791C3, "S4791C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4791C3C1Ev();
extern void _ZN7S4791C3D1Ev();
Name_Map name_map_S4791C3[] = {
  NSPAIR(_ZN7S4791C3C1Ev),
  NSPAIR(_ZN7S4791C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4791C3[];
extern void _ZN7S4791C3D1Ev();
extern void _ZN7S4791C3D0Ev();
extern void _ZN7S4791C32v3Ev();
extern void _ZN7S4791C32v4Ev();
extern void _ZN7S4791C32v5Ev();
static  VTBL_ENTRY vtc_S4791C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4791C3[0]),
  (VTBL_ENTRY)&_ZN7S4791C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4791C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4791C3[];
extern  VTBL_ENTRY _ZTV7S4791C3[];
Class_Descriptor cd_S4791C3 = {  "S4791C3", // class name
  0,0,//no base classes
  &(vtc_S4791C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4791C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4791C3),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  S4791C2  : S4791C3 {
  void *s4791c2f0;
  virtual void  v6(); // _ZN7S4791C22v6Ev
  virtual void  v7(); // _ZN7S4791C22v7Ev
  ~S4791C2(); // tgen
  S4791C2(); // tgen
};
//SIG(-1 S4791C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4791C2 ::v6(){vfunc_called(this, "_ZN7S4791C22v6Ev");}
void  S4791C2 ::v7(){vfunc_called(this, "_ZN7S4791C22v7Ev");}
S4791C2 ::~S4791C2(){ note_dtor("S4791C2", this);} // tgen
S4791C2 ::S4791C2(){ note_ctor("S4791C2", this);} // tgen

static void Test_S4791C2()
{
  extern Class_Descriptor cd_S4791C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4791C2, buf);
    S4791C2 *dp, &lv = *(dp=new (buf) S4791C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4791C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4791C2)");
    check_base_class_offset(lv, (S4791C3*), 0, "S4791C2");
    check_field_offset(lv, s4791c2f0, ABISELECT(40,28), "S4791C2.s4791c2f0");
    test_class_info(&lv, &cd_S4791C2);
    dp->~S4791C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4791C2(Test_S4791C2, "S4791C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4791C2C1Ev();
extern void _ZN7S4791C2D1Ev();
Name_Map name_map_S4791C2[] = {
  NSPAIR(_ZN7S4791C2C1Ev),
  NSPAIR(_ZN7S4791C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4791C3;
extern VTBL_ENTRY _ZTI7S4791C3[];
extern  VTBL_ENTRY _ZTV7S4791C3[];
static Base_Class bases_S4791C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4791C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4791C2[];
extern void _ZN7S4791C2D1Ev();
extern void _ZN7S4791C2D0Ev();
extern void _ZN7S4791C32v3Ev();
extern void _ZN7S4791C32v4Ev();
extern void _ZN7S4791C32v5Ev();
extern void _ZN7S4791C22v6Ev();
extern void _ZN7S4791C22v7Ev();
static  VTBL_ENTRY vtc_S4791C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4791C2[0]),
  (VTBL_ENTRY)&_ZN7S4791C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4791C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4791C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4791C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4791C2[];
extern  VTBL_ENTRY _ZTV7S4791C2[];
Class_Descriptor cd_S4791C2 = {  "S4791C2", // class name
  bases_S4791C2, 1,
  &(vtc_S4791C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4791C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4791C2),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  S4791C1  : S4791C2 {
  void *s4791c1f0;
  ::S4473C12_nt s4791c1f1;
  ::S4473C12_nt s4791c1f2;
  int s4791c1f3;
  ::S5075C8_nt s4791c1f4;
  int s4791c1f5;
  void *s4791c1f6;
  virtual  ~S4791C1(); // _ZN7S4791C1D1Ev
  virtual void  v1(); // _ZN7S4791C12v1Ev
  virtual void  v2(); // _ZN7S4791C12v2Ev
  S4791C1(); // tgen
};
//SIG(1 S4791C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 Fp FC4 FC4 Fi FC6{ m Fp[2]} Fi Fp}


 S4791C1 ::~S4791C1(){ note_dtor("S4791C1", this);}
void  S4791C1 ::v1(){vfunc_called(this, "_ZN7S4791C12v1Ev");}
void  S4791C1 ::v2(){vfunc_called(this, "_ZN7S4791C12v2Ev");}
S4791C1 ::S4791C1(){ note_ctor("S4791C1", this);} // tgen

static void Test_S4791C1()
{
  extern Class_Descriptor cd_S4791C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,21)];
    init_test(&cd_S4791C1, buf);
    S4791C1 *dp, &lv = *(dp=new (buf) S4791C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S4791C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4791C1)");
    check_base_class_offset(lv, (S4791C3*)(S4791C2*), 0, "S4791C1");
    check_base_class_offset(lv, (S4791C2*), 0, "S4791C1");
    check_field_offset(lv, s4791c1f0, ABISELECT(48,32), "S4791C1.s4791c1f0");
    check_field_offset(lv, s4791c1f1, ABISELECT(56,36), "S4791C1.s4791c1f1");
    check_field_offset(lv, s4791c1f2, ABISELECT(72,48), "S4791C1.s4791c1f2");
    check_field_offset(lv, s4791c1f3, ABISELECT(88,60), "S4791C1.s4791c1f3");
    check_field_offset(lv, s4791c1f4, ABISELECT(96,64), "S4791C1.s4791c1f4");
    check_field_offset(lv, s4791c1f5, ABISELECT(112,72), "S4791C1.s4791c1f5");
    check_field_offset(lv, s4791c1f6, ABISELECT(120,76), "S4791C1.s4791c1f6");
    test_class_info(&lv, &cd_S4791C1);
    dp->~S4791C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4791C1(Test_S4791C1, "S4791C1", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN7S4791C1C1Ev();
extern void _ZN7S4791C1D1Ev();
Name_Map name_map_S4791C1[] = {
  NSPAIR(_ZN7S4791C1C1Ev),
  NSPAIR(_ZN7S4791C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4791C3;
extern VTBL_ENTRY _ZTI7S4791C3[];
extern  VTBL_ENTRY _ZTV7S4791C3[];
extern Class_Descriptor cd_S4791C2;
extern VTBL_ENTRY _ZTI7S4791C2[];
extern  VTBL_ENTRY _ZTV7S4791C2[];
static Base_Class bases_S4791C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4791C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4791C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4791C1[];
extern void _ZN7S4791C1D1Ev();
extern void _ZN7S4791C1D0Ev();
extern void _ZN7S4791C32v3Ev();
extern void _ZN7S4791C32v4Ev();
extern void _ZN7S4791C32v5Ev();
extern void _ZN7S4791C22v6Ev();
extern void _ZN7S4791C22v7Ev();
extern void _ZN7S4791C12v1Ev();
extern void _ZN7S4791C12v2Ev();
static  VTBL_ENTRY vtc_S4791C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4791C1[0]),
  (VTBL_ENTRY)&_ZN7S4791C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4791C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4791C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4791C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4791C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4791C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4791C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4791C1[];
extern  VTBL_ENTRY _ZTV7S4791C1[];
Class_Descriptor cd_S4791C1 = {  "S4791C1", // class name
  bases_S4791C1, 2,
  &(vtc_S4791C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI7S4791C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4791C1),11, //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  S4768C3  {
  ::S4473C12_nt s4768c3f0;
  int s4768c3f1[2];
  char s4768c3f2;
  virtual  ~S4768C3(); // _ZN7S4768C3D1Ev
  virtual void  v3(); // _ZN7S4768C32v3Ev
  virtual void  v4(); // _ZN7S4768C32v4Ev
  virtual void  v5(); // _ZN7S4768C32v5Ev
  S4768C3(); // tgen
};
//SIG(-1 S4768C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4768C3 ::~S4768C3(){ note_dtor("S4768C3", this);}
void  S4768C3 ::v3(){vfunc_called(this, "_ZN7S4768C32v3Ev");}
void  S4768C3 ::v4(){vfunc_called(this, "_ZN7S4768C32v4Ev");}
void  S4768C3 ::v5(){vfunc_called(this, "_ZN7S4768C32v5Ev");}
S4768C3 ::S4768C3(){ note_ctor("S4768C3", this);} // tgen

static void Test_S4768C3()
{
  extern Class_Descriptor cd_S4768C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4768C3, buf);
    S4768C3 *dp, &lv = *(dp=new (buf) S4768C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4768C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4768C3)");
    check_field_offset(lv, s4768c3f0, ABISELECT(8,4), "S4768C3.s4768c3f0");
    check_field_offset(lv, s4768c3f1, ABISELECT(24,16), "S4768C3.s4768c3f1");
    check_field_offset(lv, s4768c3f2, ABISELECT(32,24), "S4768C3.s4768c3f2");
    test_class_info(&lv, &cd_S4768C3);
    dp->~S4768C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4768C3(Test_S4768C3, "S4768C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4768C3C1Ev();
extern void _ZN7S4768C3D1Ev();
Name_Map name_map_S4768C3[] = {
  NSPAIR(_ZN7S4768C3C1Ev),
  NSPAIR(_ZN7S4768C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4768C3[];
extern void _ZN7S4768C3D1Ev();
extern void _ZN7S4768C3D0Ev();
extern void _ZN7S4768C32v3Ev();
extern void _ZN7S4768C32v4Ev();
extern void _ZN7S4768C32v5Ev();
static  VTBL_ENTRY vtc_S4768C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4768C3[0]),
  (VTBL_ENTRY)&_ZN7S4768C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4768C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4768C3[];
extern  VTBL_ENTRY _ZTV7S4768C3[];
Class_Descriptor cd_S4768C3 = {  "S4768C3", // class name
  0,0,//no base classes
  &(vtc_S4768C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4768C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4768C3),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  S4768C2  : S4768C3 {
  void *s4768c2f0;
  virtual void  v6(); // _ZN7S4768C22v6Ev
  virtual void  v7(); // _ZN7S4768C22v7Ev
  ~S4768C2(); // tgen
  S4768C2(); // tgen
};
//SIG(-1 S4768C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4768C2 ::v6(){vfunc_called(this, "_ZN7S4768C22v6Ev");}
void  S4768C2 ::v7(){vfunc_called(this, "_ZN7S4768C22v7Ev");}
S4768C2 ::~S4768C2(){ note_dtor("S4768C2", this);} // tgen
S4768C2 ::S4768C2(){ note_ctor("S4768C2", this);} // tgen

static void Test_S4768C2()
{
  extern Class_Descriptor cd_S4768C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4768C2, buf);
    S4768C2 *dp, &lv = *(dp=new (buf) S4768C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4768C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4768C2)");
    check_base_class_offset(lv, (S4768C3*), 0, "S4768C2");
    check_field_offset(lv, s4768c2f0, ABISELECT(40,28), "S4768C2.s4768c2f0");
    test_class_info(&lv, &cd_S4768C2);
    dp->~S4768C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4768C2(Test_S4768C2, "S4768C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4768C2C1Ev();
extern void _ZN7S4768C2D1Ev();
Name_Map name_map_S4768C2[] = {
  NSPAIR(_ZN7S4768C2C1Ev),
  NSPAIR(_ZN7S4768C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4768C3;
extern VTBL_ENTRY _ZTI7S4768C3[];
extern  VTBL_ENTRY _ZTV7S4768C3[];
static Base_Class bases_S4768C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4768C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4768C2[];
extern void _ZN7S4768C2D1Ev();
extern void _ZN7S4768C2D0Ev();
extern void _ZN7S4768C32v3Ev();
extern void _ZN7S4768C32v4Ev();
extern void _ZN7S4768C32v5Ev();
extern void _ZN7S4768C22v6Ev();
extern void _ZN7S4768C22v7Ev();
static  VTBL_ENTRY vtc_S4768C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4768C2[0]),
  (VTBL_ENTRY)&_ZN7S4768C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4768C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4768C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4768C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4768C2[];
extern  VTBL_ENTRY _ZTV7S4768C2[];
Class_Descriptor cd_S4768C2 = {  "S4768C2", // class name
  bases_S4768C2, 1,
  &(vtc_S4768C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4768C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4768C2),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  S4768C1  : S4768C2 {
  ::S2173C10_nt s4768c1f0;
  int s4768c1f1[2];
  char s4768c1f2[2];
  virtual  ~S4768C1(); // _ZN7S4768C1D1Ev
  virtual void  v1(); // _ZN7S4768C12v1Ev
  virtual void  v2(); // _ZN7S4768C12v2Ev
  S4768C1(); // tgen
};
//SIG(1 S4768C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ m FC7{ FL[4]}} Fi[2] Fc[2]}


 S4768C1 ::~S4768C1(){ note_dtor("S4768C1", this);}
void  S4768C1 ::v1(){vfunc_called(this, "_ZN7S4768C12v1Ev");}
void  S4768C1 ::v2(){vfunc_called(this, "_ZN7S4768C12v2Ev");}
S4768C1 ::S4768C1(){ note_ctor("S4768C1", this);} // tgen

static void Test_S4768C1()
{
  extern Class_Descriptor cd_S4768C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,20)];
    init_test(&cd_S4768C1, buf);
    S4768C1 *dp, &lv = *(dp=new (buf) S4768C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,76), "sizeof(S4768C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4768C1)");
    check_base_class_offset(lv, (S4768C3*)(S4768C2*), 0, "S4768C1");
    check_base_class_offset(lv, (S4768C2*), 0, "S4768C1");
    check_field_offset(lv, s4768c1f0, ABISELECT(48,32), "S4768C1.s4768c1f0");
    check_field_offset(lv, s4768c1f1, ABISELECT(80,64), "S4768C1.s4768c1f1");
    check_field_offset(lv, s4768c1f2, ABISELECT(88,72), "S4768C1.s4768c1f2");
    test_class_info(&lv, &cd_S4768C1);
    dp->~S4768C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4768C1(Test_S4768C1, "S4768C1", ABISELECT(96,76));

#else // __cplusplus

extern void _ZN7S4768C1C1Ev();
extern void _ZN7S4768C1D1Ev();
Name_Map name_map_S4768C1[] = {
  NSPAIR(_ZN7S4768C1C1Ev),
  NSPAIR(_ZN7S4768C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4768C3;
extern VTBL_ENTRY _ZTI7S4768C3[];
extern  VTBL_ENTRY _ZTV7S4768C3[];
extern Class_Descriptor cd_S4768C2;
extern VTBL_ENTRY _ZTI7S4768C2[];
extern  VTBL_ENTRY _ZTV7S4768C2[];
static Base_Class bases_S4768C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4768C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4768C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4768C1[];
extern void _ZN7S4768C1D1Ev();
extern void _ZN7S4768C1D0Ev();
extern void _ZN7S4768C32v3Ev();
extern void _ZN7S4768C32v4Ev();
extern void _ZN7S4768C32v5Ev();
extern void _ZN7S4768C22v6Ev();
extern void _ZN7S4768C22v7Ev();
extern void _ZN7S4768C12v1Ev();
extern void _ZN7S4768C12v2Ev();
static  VTBL_ENTRY vtc_S4768C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4768C1[0]),
  (VTBL_ENTRY)&_ZN7S4768C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4768C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4768C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4768C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4768C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4768C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4768C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4768C1[];
extern  VTBL_ENTRY _ZTV7S4768C1[];
Class_Descriptor cd_S4768C1 = {  "S4768C1", // class name
  bases_S4768C1, 2,
  &(vtc_S4768C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,76), // object size
  NSPAIRA(_ZTI7S4768C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4768C1),11, //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  S4767C3  {
  ::S4473C12_nt s4767c3f0;
  int s4767c3f1[2];
  char s4767c3f2;
  virtual  ~S4767C3(); // _ZN7S4767C3D1Ev
  virtual void  v3(); // _ZN7S4767C32v3Ev
  virtual void  v4(); // _ZN7S4767C32v4Ev
  virtual void  v5(); // _ZN7S4767C32v5Ev
  S4767C3(); // tgen
};
//SIG(-1 S4767C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4767C3 ::~S4767C3(){ note_dtor("S4767C3", this);}
void  S4767C3 ::v3(){vfunc_called(this, "_ZN7S4767C32v3Ev");}
void  S4767C3 ::v4(){vfunc_called(this, "_ZN7S4767C32v4Ev");}
void  S4767C3 ::v5(){vfunc_called(this, "_ZN7S4767C32v5Ev");}
S4767C3 ::S4767C3(){ note_ctor("S4767C3", this);} // tgen

static void Test_S4767C3()
{
  extern Class_Descriptor cd_S4767C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4767C3, buf);
    S4767C3 *dp, &lv = *(dp=new (buf) S4767C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4767C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4767C3)");
    check_field_offset(lv, s4767c3f0, ABISELECT(8,4), "S4767C3.s4767c3f0");
    check_field_offset(lv, s4767c3f1, ABISELECT(24,16), "S4767C3.s4767c3f1");
    check_field_offset(lv, s4767c3f2, ABISELECT(32,24), "S4767C3.s4767c3f2");
    test_class_info(&lv, &cd_S4767C3);
    dp->~S4767C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4767C3(Test_S4767C3, "S4767C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4767C3C1Ev();
extern void _ZN7S4767C3D1Ev();
Name_Map name_map_S4767C3[] = {
  NSPAIR(_ZN7S4767C3C1Ev),
  NSPAIR(_ZN7S4767C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4767C3[];
extern void _ZN7S4767C3D1Ev();
extern void _ZN7S4767C3D0Ev();
extern void _ZN7S4767C32v3Ev();
extern void _ZN7S4767C32v4Ev();
extern void _ZN7S4767C32v5Ev();
static  VTBL_ENTRY vtc_S4767C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4767C3[0]),
  (VTBL_ENTRY)&_ZN7S4767C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4767C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4767C3[];
extern  VTBL_ENTRY _ZTV7S4767C3[];
Class_Descriptor cd_S4767C3 = {  "S4767C3", // class name
  0,0,//no base classes
  &(vtc_S4767C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4767C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4767C3),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  S4767C2  : S4767C3 {
  void *s4767c2f0;
  virtual void  v6(); // _ZN7S4767C22v6Ev
  virtual void  v7(); // _ZN7S4767C22v7Ev
  ~S4767C2(); // tgen
  S4767C2(); // tgen
};
//SIG(-1 S4767C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4767C2 ::v6(){vfunc_called(this, "_ZN7S4767C22v6Ev");}
void  S4767C2 ::v7(){vfunc_called(this, "_ZN7S4767C22v7Ev");}
S4767C2 ::~S4767C2(){ note_dtor("S4767C2", this);} // tgen
S4767C2 ::S4767C2(){ note_ctor("S4767C2", this);} // tgen

static void Test_S4767C2()
{
  extern Class_Descriptor cd_S4767C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4767C2, buf);
    S4767C2 *dp, &lv = *(dp=new (buf) S4767C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4767C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4767C2)");
    check_base_class_offset(lv, (S4767C3*), 0, "S4767C2");
    check_field_offset(lv, s4767c2f0, ABISELECT(40,28), "S4767C2.s4767c2f0");
    test_class_info(&lv, &cd_S4767C2);
    dp->~S4767C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4767C2(Test_S4767C2, "S4767C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4767C2C1Ev();
extern void _ZN7S4767C2D1Ev();
Name_Map name_map_S4767C2[] = {
  NSPAIR(_ZN7S4767C2C1Ev),
  NSPAIR(_ZN7S4767C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4767C3;
extern VTBL_ENTRY _ZTI7S4767C3[];
extern  VTBL_ENTRY _ZTV7S4767C3[];
static Base_Class bases_S4767C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4767C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4767C2[];
extern void _ZN7S4767C2D1Ev();
extern void _ZN7S4767C2D0Ev();
extern void _ZN7S4767C32v3Ev();
extern void _ZN7S4767C32v4Ev();
extern void _ZN7S4767C32v5Ev();
extern void _ZN7S4767C22v6Ev();
extern void _ZN7S4767C22v7Ev();
static  VTBL_ENTRY vtc_S4767C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4767C2[0]),
  (VTBL_ENTRY)&_ZN7S4767C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4767C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4767C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4767C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4767C2[];
extern  VTBL_ENTRY _ZTV7S4767C2[];
Class_Descriptor cd_S4767C2 = {  "S4767C2", // class name
  bases_S4767C2, 1,
  &(vtc_S4767C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4767C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4767C2),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  S4767C1  : S4767C2 {
  ::S2366C7_nt s4767c1f0;
  int s4767c1f1[2];
  char s4767c1f2[2];
  virtual  ~S4767C1(); // _ZN7S4767C1D1Ev
  virtual void  v1(); // _ZN7S4767C12v1Ev
  virtual void  v2(); // _ZN7S4767C12v2Ev
  S4767C1(); // tgen
};
//SIG(1 S4767C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ m FC7{ Fl[4]}} Fi[2] Fc[2]}


 S4767C1 ::~S4767C1(){ note_dtor("S4767C1", this);}
void  S4767C1 ::v1(){vfunc_called(this, "_ZN7S4767C12v1Ev");}
void  S4767C1 ::v2(){vfunc_called(this, "_ZN7S4767C12v2Ev");}
S4767C1 ::S4767C1(){ note_ctor("S4767C1", this);} // tgen

static void Test_S4767C1()
{
  extern Class_Descriptor cd_S4767C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S4767C1, buf);
    S4767C1 *dp, &lv = *(dp=new (buf) S4767C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S4767C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4767C1)");
    check_base_class_offset(lv, (S4767C3*)(S4767C2*), 0, "S4767C1");
    check_base_class_offset(lv, (S4767C2*), 0, "S4767C1");
    check_field_offset(lv, s4767c1f0, ABISELECT(48,32), "S4767C1.s4767c1f0");
    check_field_offset(lv, s4767c1f1, ABISELECT(80,48), "S4767C1.s4767c1f1");
    check_field_offset(lv, s4767c1f2, ABISELECT(88,56), "S4767C1.s4767c1f2");
    test_class_info(&lv, &cd_S4767C1);
    dp->~S4767C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4767C1(Test_S4767C1, "S4767C1", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S4767C1C1Ev();
extern void _ZN7S4767C1D1Ev();
Name_Map name_map_S4767C1[] = {
  NSPAIR(_ZN7S4767C1C1Ev),
  NSPAIR(_ZN7S4767C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4767C3;
extern VTBL_ENTRY _ZTI7S4767C3[];
extern  VTBL_ENTRY _ZTV7S4767C3[];
extern Class_Descriptor cd_S4767C2;
extern VTBL_ENTRY _ZTI7S4767C2[];
extern  VTBL_ENTRY _ZTV7S4767C2[];
static Base_Class bases_S4767C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4767C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4767C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4767C1[];
extern void _ZN7S4767C1D1Ev();
extern void _ZN7S4767C1D0Ev();
extern void _ZN7S4767C32v3Ev();
extern void _ZN7S4767C32v4Ev();
extern void _ZN7S4767C32v5Ev();
extern void _ZN7S4767C22v6Ev();
extern void _ZN7S4767C22v7Ev();
extern void _ZN7S4767C12v1Ev();
extern void _ZN7S4767C12v2Ev();
static  VTBL_ENTRY vtc_S4767C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4767C1[0]),
  (VTBL_ENTRY)&_ZN7S4767C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4767C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4767C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4767C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4767C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4767C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4767C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4767C1[];
extern  VTBL_ENTRY _ZTV7S4767C1[];
Class_Descriptor cd_S4767C1 = {  "S4767C1", // class name
  bases_S4767C1, 2,
  &(vtc_S4767C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S4767C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4767C1),11, //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  S4368C3  {
  ::S4473C12_nt s4368c3f0;
  int s4368c3f1[2];
  char s4368c3f2;
  virtual  ~S4368C3(); // _ZN7S4368C3D1Ev
  virtual void  v2(); // _ZN7S4368C32v2Ev
  virtual void  v3(); // _ZN7S4368C32v3Ev
  virtual void  v4(); // _ZN7S4368C32v4Ev
  S4368C3(); // tgen
};
//SIG(-1 S4368C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4368C3 ::~S4368C3(){ note_dtor("S4368C3", this);}
void  S4368C3 ::v2(){vfunc_called(this, "_ZN7S4368C32v2Ev");}
void  S4368C3 ::v3(){vfunc_called(this, "_ZN7S4368C32v3Ev");}
void  S4368C3 ::v4(){vfunc_called(this, "_ZN7S4368C32v4Ev");}
S4368C3 ::S4368C3(){ note_ctor("S4368C3", this);} // tgen

static void Test_S4368C3()
{
  extern Class_Descriptor cd_S4368C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4368C3, buf);
    S4368C3 *dp, &lv = *(dp=new (buf) S4368C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4368C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4368C3)");
    check_field_offset(lv, s4368c3f0, ABISELECT(8,4), "S4368C3.s4368c3f0");
    check_field_offset(lv, s4368c3f1, ABISELECT(24,16), "S4368C3.s4368c3f1");
    check_field_offset(lv, s4368c3f2, ABISELECT(32,24), "S4368C3.s4368c3f2");
    test_class_info(&lv, &cd_S4368C3);
    dp->~S4368C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4368C3(Test_S4368C3, "S4368C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4368C3C1Ev();
extern void _ZN7S4368C3D1Ev();
Name_Map name_map_S4368C3[] = {
  NSPAIR(_ZN7S4368C3C1Ev),
  NSPAIR(_ZN7S4368C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4368C3[];
extern void _ZN7S4368C3D1Ev();
extern void _ZN7S4368C3D0Ev();
extern void _ZN7S4368C32v2Ev();
extern void _ZN7S4368C32v3Ev();
extern void _ZN7S4368C32v4Ev();
static  VTBL_ENTRY vtc_S4368C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4368C3[0]),
  (VTBL_ENTRY)&_ZN7S4368C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4368C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4368C3[];
extern  VTBL_ENTRY _ZTV7S4368C3[];
Class_Descriptor cd_S4368C3 = {  "S4368C3", // class name
  0,0,//no base classes
  &(vtc_S4368C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4368C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4368C3),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  S4368C2  : S4368C3 {
  void *s4368c2f0;
  virtual void  v5(); // _ZN7S4368C22v5Ev
  virtual void  v6(); // _ZN7S4368C22v6Ev
  ~S4368C2(); // tgen
  S4368C2(); // tgen
};
//SIG(-1 S4368C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4368C2 ::v5(){vfunc_called(this, "_ZN7S4368C22v5Ev");}
void  S4368C2 ::v6(){vfunc_called(this, "_ZN7S4368C22v6Ev");}
S4368C2 ::~S4368C2(){ note_dtor("S4368C2", this);} // tgen
S4368C2 ::S4368C2(){ note_ctor("S4368C2", this);} // tgen

static void Test_S4368C2()
{
  extern Class_Descriptor cd_S4368C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4368C2, buf);
    S4368C2 *dp, &lv = *(dp=new (buf) S4368C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4368C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4368C2)");
    check_base_class_offset(lv, (S4368C3*), 0, "S4368C2");
    check_field_offset(lv, s4368c2f0, ABISELECT(40,28), "S4368C2.s4368c2f0");
    test_class_info(&lv, &cd_S4368C2);
    dp->~S4368C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4368C2(Test_S4368C2, "S4368C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4368C2C1Ev();
extern void _ZN7S4368C2D1Ev();
Name_Map name_map_S4368C2[] = {
  NSPAIR(_ZN7S4368C2C1Ev),
  NSPAIR(_ZN7S4368C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4368C3;
extern VTBL_ENTRY _ZTI7S4368C3[];
extern  VTBL_ENTRY _ZTV7S4368C3[];
static Base_Class bases_S4368C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4368C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4368C2[];
extern void _ZN7S4368C2D1Ev();
extern void _ZN7S4368C2D0Ev();
extern void _ZN7S4368C32v2Ev();
extern void _ZN7S4368C32v3Ev();
extern void _ZN7S4368C32v4Ev();
extern void _ZN7S4368C22v5Ev();
extern void _ZN7S4368C22v6Ev();
static  VTBL_ENTRY vtc_S4368C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4368C2[0]),
  (VTBL_ENTRY)&_ZN7S4368C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4368C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4368C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4368C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4368C2[];
extern  VTBL_ENTRY _ZTV7S4368C2[];
Class_Descriptor cd_S4368C2 = {  "S4368C2", // class name
  bases_S4368C2, 1,
  &(vtc_S4368C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4368C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4368C2),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  S4368C6_nt  {
  char s4368c6f0[128];
  __tsi64 s4368c6f1[2];
  char s4368c6f2[3];
};
//SIG(-1 S4368C6_nt) C1{ Fc[128] FL[2] Fc[3]}



//skip512 S4368C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4368C1  : S4368C2 {
  ::S4473C12_nt s4368c1f0;
  ::S4368C6_nt s4368c1f1;
  void *s4368c1f2;
  char s4368c1f3;
  virtual void  v1(); // _ZN7S4368C12v1Ev
  ~S4368C1(); // tgen
  S4368C1(); // tgen
};
//SIG(1 S4368C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC4 FC6{ Fc[128] FL[2] Fc[3]} Fp Fc}


void  S4368C1 ::v1(){vfunc_called(this, "_ZN7S4368C12v1Ev");}
S4368C1 ::~S4368C1(){ note_dtor("S4368C1", this);} // tgen
S4368C1 ::S4368C1(){ note_ctor("S4368C1", this);} // tgen

static void Test_S4368C1()
{
  extern Class_Descriptor cd_S4368C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,51)];
    init_test(&cd_S4368C1, buf);
    S4368C1 *dp, &lv = *(dp=new (buf) S4368C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,200), "sizeof(S4368C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4368C1)");
    check_base_class_offset(lv, (S4368C3*)(S4368C2*), 0, "S4368C1");
    check_base_class_offset(lv, (S4368C2*), 0, "S4368C1");
    check_field_offset(lv, s4368c1f0, ABISELECT(48,32), "S4368C1.s4368c1f0");
    check_field_offset(lv, s4368c1f1, ABISELECT(64,44), "S4368C1.s4368c1f1");
    check_field_offset(lv, s4368c1f2, ABISELECT(216,192), "S4368C1.s4368c1f2");
    check_field_offset(lv, s4368c1f3, ABISELECT(224,196), "S4368C1.s4368c1f3");
    test_class_info(&lv, &cd_S4368C1);
    dp->~S4368C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4368C1(Test_S4368C1, "S4368C1", ABISELECT(232,200));

#else // __cplusplus

extern void _ZN7S4368C1C1Ev();
extern void _ZN7S4368C1D1Ev();
Name_Map name_map_S4368C1[] = {
  NSPAIR(_ZN7S4368C1C1Ev),
  NSPAIR(_ZN7S4368C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4368C3;
extern VTBL_ENTRY _ZTI7S4368C3[];
extern  VTBL_ENTRY _ZTV7S4368C3[];
extern Class_Descriptor cd_S4368C2;
extern VTBL_ENTRY _ZTI7S4368C2[];
extern  VTBL_ENTRY _ZTV7S4368C2[];
static Base_Class bases_S4368C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4368C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4368C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4368C1[];
extern void _ZN7S4368C1D1Ev();
extern void _ZN7S4368C1D0Ev();
extern void _ZN7S4368C32v2Ev();
extern void _ZN7S4368C32v3Ev();
extern void _ZN7S4368C32v4Ev();
extern void _ZN7S4368C22v5Ev();
extern void _ZN7S4368C22v6Ev();
extern void _ZN7S4368C12v1Ev();
static  VTBL_ENTRY vtc_S4368C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4368C1[0]),
  (VTBL_ENTRY)&_ZN7S4368C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4368C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4368C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4368C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4368C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4368C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4368C1[];
extern  VTBL_ENTRY _ZTV7S4368C1[];
Class_Descriptor cd_S4368C1 = {  "S4368C1", // class name
  bases_S4368C1, 2,
  &(vtc_S4368C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,200), // object size
  NSPAIRA(_ZTI7S4368C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4368C1),10, //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  S4777C3  {
  ::S4473C12_nt s4777c3f0;
  int s4777c3f1[2];
  char s4777c3f2;
  virtual  ~S4777C3(); // _ZN7S4777C3D1Ev
  virtual void  v3(); // _ZN7S4777C32v3Ev
  virtual void  v4(); // _ZN7S4777C32v4Ev
  virtual void  v5(); // _ZN7S4777C32v5Ev
  S4777C3(); // tgen
};
//SIG(-1 S4777C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4777C3 ::~S4777C3(){ note_dtor("S4777C3", this);}
void  S4777C3 ::v3(){vfunc_called(this, "_ZN7S4777C32v3Ev");}
void  S4777C3 ::v4(){vfunc_called(this, "_ZN7S4777C32v4Ev");}
void  S4777C3 ::v5(){vfunc_called(this, "_ZN7S4777C32v5Ev");}
S4777C3 ::S4777C3(){ note_ctor("S4777C3", this);} // tgen

static void Test_S4777C3()
{
  extern Class_Descriptor cd_S4777C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4777C3, buf);
    S4777C3 *dp, &lv = *(dp=new (buf) S4777C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4777C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4777C3)");
    check_field_offset(lv, s4777c3f0, ABISELECT(8,4), "S4777C3.s4777c3f0");
    check_field_offset(lv, s4777c3f1, ABISELECT(24,16), "S4777C3.s4777c3f1");
    check_field_offset(lv, s4777c3f2, ABISELECT(32,24), "S4777C3.s4777c3f2");
    test_class_info(&lv, &cd_S4777C3);
    dp->~S4777C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4777C3(Test_S4777C3, "S4777C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4777C3C1Ev();
extern void _ZN7S4777C3D1Ev();
Name_Map name_map_S4777C3[] = {
  NSPAIR(_ZN7S4777C3C1Ev),
  NSPAIR(_ZN7S4777C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4777C3[];
extern void _ZN7S4777C3D1Ev();
extern void _ZN7S4777C3D0Ev();
extern void _ZN7S4777C32v3Ev();
extern void _ZN7S4777C32v4Ev();
extern void _ZN7S4777C32v5Ev();
static  VTBL_ENTRY vtc_S4777C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4777C3[0]),
  (VTBL_ENTRY)&_ZN7S4777C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4777C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4777C3[];
extern  VTBL_ENTRY _ZTV7S4777C3[];
Class_Descriptor cd_S4777C3 = {  "S4777C3", // class name
  0,0,//no base classes
  &(vtc_S4777C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4777C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4777C3),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  S4777C2  : S4777C3 {
  void *s4777c2f0;
  virtual void  v6(); // _ZN7S4777C22v6Ev
  virtual void  v7(); // _ZN7S4777C22v7Ev
  ~S4777C2(); // tgen
  S4777C2(); // tgen
};
//SIG(-1 S4777C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4777C2 ::v6(){vfunc_called(this, "_ZN7S4777C22v6Ev");}
void  S4777C2 ::v7(){vfunc_called(this, "_ZN7S4777C22v7Ev");}
S4777C2 ::~S4777C2(){ note_dtor("S4777C2", this);} // tgen
S4777C2 ::S4777C2(){ note_ctor("S4777C2", this);} // tgen

static void Test_S4777C2()
{
  extern Class_Descriptor cd_S4777C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4777C2, buf);
    S4777C2 *dp, &lv = *(dp=new (buf) S4777C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4777C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4777C2)");
    check_base_class_offset(lv, (S4777C3*), 0, "S4777C2");
    check_field_offset(lv, s4777c2f0, ABISELECT(40,28), "S4777C2.s4777c2f0");
    test_class_info(&lv, &cd_S4777C2);
    dp->~S4777C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4777C2(Test_S4777C2, "S4777C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4777C2C1Ev();
extern void _ZN7S4777C2D1Ev();
Name_Map name_map_S4777C2[] = {
  NSPAIR(_ZN7S4777C2C1Ev),
  NSPAIR(_ZN7S4777C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4777C3;
extern VTBL_ENTRY _ZTI7S4777C3[];
extern  VTBL_ENTRY _ZTV7S4777C3[];
static Base_Class bases_S4777C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4777C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4777C2[];
extern void _ZN7S4777C2D1Ev();
extern void _ZN7S4777C2D0Ev();
extern void _ZN7S4777C32v3Ev();
extern void _ZN7S4777C32v4Ev();
extern void _ZN7S4777C32v5Ev();
extern void _ZN7S4777C22v6Ev();
extern void _ZN7S4777C22v7Ev();
static  VTBL_ENTRY vtc_S4777C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4777C2[0]),
  (VTBL_ENTRY)&_ZN7S4777C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4777C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4777C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4777C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4777C2[];
extern  VTBL_ENTRY _ZTV7S4777C2[];
Class_Descriptor cd_S4777C2 = {  "S4777C2", // class name
  bases_S4777C2, 1,
  &(vtc_S4777C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4777C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4777C2),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  S4777C1  : S4777C2 {
  ::S2366C19 s4777c1f0;
  ::S2366C19 s4777c1f1;
  ::S5075C8_nt s4777c1f2;
  virtual  ~S4777C1(); // _ZN7S4777C1D1Ev
  virtual void  v1(); // _ZN7S4777C12v1Ev
  virtual void  v2(); // _ZN7S4777C12v2Ev
  S4777C1(); // tgen
};
//SIG(1 S4777C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ m Fp} FC6 FC7{ m Fp[2]}}


 S4777C1 ::~S4777C1(){ note_dtor("S4777C1", this);}
void  S4777C1 ::v1(){vfunc_called(this, "_ZN7S4777C12v1Ev");}
void  S4777C1 ::v2(){vfunc_called(this, "_ZN7S4777C12v2Ev");}
S4777C1 ::S4777C1(){ note_ctor("S4777C1", this);} // tgen

static void Test_S4777C1()
{
  extern Class_Descriptor cd_S4777C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S4777C1, buf);
    S4777C1 *dp, &lv = *(dp=new (buf) S4777C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S4777C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4777C1)");
    check_base_class_offset(lv, (S4777C3*)(S4777C2*), 0, "S4777C1");
    check_base_class_offset(lv, (S4777C2*), 0, "S4777C1");
    check_field_offset(lv, s4777c1f0, ABISELECT(48,32), "S4777C1.s4777c1f0");
    check_field_offset(lv, s4777c1f1, ABISELECT(56,36), "S4777C1.s4777c1f1");
    check_field_offset(lv, s4777c1f2, ABISELECT(64,40), "S4777C1.s4777c1f2");
    test_class_info(&lv, &cd_S4777C1);
    dp->~S4777C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4777C1(Test_S4777C1, "S4777C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S4777C1C1Ev();
extern void _ZN7S4777C1D1Ev();
Name_Map name_map_S4777C1[] = {
  NSPAIR(_ZN7S4777C1C1Ev),
  NSPAIR(_ZN7S4777C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4777C3;
extern VTBL_ENTRY _ZTI7S4777C3[];
extern  VTBL_ENTRY _ZTV7S4777C3[];
extern Class_Descriptor cd_S4777C2;
extern VTBL_ENTRY _ZTI7S4777C2[];
extern  VTBL_ENTRY _ZTV7S4777C2[];
static Base_Class bases_S4777C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4777C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4777C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4777C1[];
extern void _ZN7S4777C1D1Ev();
extern void _ZN7S4777C1D0Ev();
extern void _ZN7S4777C32v3Ev();
extern void _ZN7S4777C32v4Ev();
extern void _ZN7S4777C32v5Ev();
extern void _ZN7S4777C22v6Ev();
extern void _ZN7S4777C22v7Ev();
extern void _ZN7S4777C12v1Ev();
extern void _ZN7S4777C12v2Ev();
static  VTBL_ENTRY vtc_S4777C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4777C1[0]),
  (VTBL_ENTRY)&_ZN7S4777C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4777C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4777C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4777C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4777C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4777C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4777C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4777C1[];
extern  VTBL_ENTRY _ZTV7S4777C1[];
Class_Descriptor cd_S4777C1 = {  "S4777C1", // class name
  bases_S4777C1, 2,
  &(vtc_S4777C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S4777C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4777C1),11, //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  S4381C3  {
  ::S4473C12_nt s4381c3f0;
  int s4381c3f1[2];
  char s4381c3f2;
  virtual  ~S4381C3(); // _ZN7S4381C3D1Ev
  virtual void  v2(); // _ZN7S4381C32v2Ev
  virtual void  v3(); // _ZN7S4381C32v3Ev
  virtual void  v4(); // _ZN7S4381C32v4Ev
  S4381C3(); // tgen
};
//SIG(-1 S4381C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4381C3 ::~S4381C3(){ note_dtor("S4381C3", this);}
void  S4381C3 ::v2(){vfunc_called(this, "_ZN7S4381C32v2Ev");}
void  S4381C3 ::v3(){vfunc_called(this, "_ZN7S4381C32v3Ev");}
void  S4381C3 ::v4(){vfunc_called(this, "_ZN7S4381C32v4Ev");}
S4381C3 ::S4381C3(){ note_ctor("S4381C3", this);} // tgen

static void Test_S4381C3()
{
  extern Class_Descriptor cd_S4381C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4381C3, buf);
    S4381C3 *dp, &lv = *(dp=new (buf) S4381C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4381C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4381C3)");
    check_field_offset(lv, s4381c3f0, ABISELECT(8,4), "S4381C3.s4381c3f0");
    check_field_offset(lv, s4381c3f1, ABISELECT(24,16), "S4381C3.s4381c3f1");
    check_field_offset(lv, s4381c3f2, ABISELECT(32,24), "S4381C3.s4381c3f2");
    test_class_info(&lv, &cd_S4381C3);
    dp->~S4381C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4381C3(Test_S4381C3, "S4381C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4381C3C1Ev();
extern void _ZN7S4381C3D1Ev();
Name_Map name_map_S4381C3[] = {
  NSPAIR(_ZN7S4381C3C1Ev),
  NSPAIR(_ZN7S4381C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4381C3[];
extern void _ZN7S4381C3D1Ev();
extern void _ZN7S4381C3D0Ev();
extern void _ZN7S4381C32v2Ev();
extern void _ZN7S4381C32v3Ev();
extern void _ZN7S4381C32v4Ev();
static  VTBL_ENTRY vtc_S4381C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4381C3[0]),
  (VTBL_ENTRY)&_ZN7S4381C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4381C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4381C3[];
extern  VTBL_ENTRY _ZTV7S4381C3[];
Class_Descriptor cd_S4381C3 = {  "S4381C3", // class name
  0,0,//no base classes
  &(vtc_S4381C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4381C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4381C3),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  S4381C2  : S4381C3 {
  void *s4381c2f0;
  virtual void  v5(); // _ZN7S4381C22v5Ev
  virtual void  v6(); // _ZN7S4381C22v6Ev
  ~S4381C2(); // tgen
  S4381C2(); // tgen
};
//SIG(-1 S4381C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4381C2 ::v5(){vfunc_called(this, "_ZN7S4381C22v5Ev");}
void  S4381C2 ::v6(){vfunc_called(this, "_ZN7S4381C22v6Ev");}
S4381C2 ::~S4381C2(){ note_dtor("S4381C2", this);} // tgen
S4381C2 ::S4381C2(){ note_ctor("S4381C2", this);} // tgen

static void Test_S4381C2()
{
  extern Class_Descriptor cd_S4381C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4381C2, buf);
    S4381C2 *dp, &lv = *(dp=new (buf) S4381C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4381C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4381C2)");
    check_base_class_offset(lv, (S4381C3*), 0, "S4381C2");
    check_field_offset(lv, s4381c2f0, ABISELECT(40,28), "S4381C2.s4381c2f0");
    test_class_info(&lv, &cd_S4381C2);
    dp->~S4381C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4381C2(Test_S4381C2, "S4381C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4381C2C1Ev();
extern void _ZN7S4381C2D1Ev();
Name_Map name_map_S4381C2[] = {
  NSPAIR(_ZN7S4381C2C1Ev),
  NSPAIR(_ZN7S4381C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4381C3;
extern VTBL_ENTRY _ZTI7S4381C3[];
extern  VTBL_ENTRY _ZTV7S4381C3[];
static Base_Class bases_S4381C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4381C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4381C2[];
extern void _ZN7S4381C2D1Ev();
extern void _ZN7S4381C2D0Ev();
extern void _ZN7S4381C32v2Ev();
extern void _ZN7S4381C32v3Ev();
extern void _ZN7S4381C32v4Ev();
extern void _ZN7S4381C22v5Ev();
extern void _ZN7S4381C22v6Ev();
static  VTBL_ENTRY vtc_S4381C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4381C2[0]),
  (VTBL_ENTRY)&_ZN7S4381C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4381C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4381C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4381C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4381C2[];
extern  VTBL_ENTRY _ZTV7S4381C2[];
Class_Descriptor cd_S4381C2 = {  "S4381C2", // class name
  bases_S4381C2, 1,
  &(vtc_S4381C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4381C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4381C2),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  S4381C1  : S4381C2 {
  ::S2173C14 s4381c1f0;
  ::S4473C12_nt s4381c1f1;
  int s4381c1f2[2];
  virtual void  v1(); // _ZN7S4381C12v1Ev
  ~S4381C1(); // tgen
  S4381C1(); // tgen
};
//SIG(1 S4381C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC6{ m Fp Fi[2] FC7{ m}} FC4 Fi[2]}


void  S4381C1 ::v1(){vfunc_called(this, "_ZN7S4381C12v1Ev");}
S4381C1 ::~S4381C1(){ note_dtor("S4381C1", this);} // tgen
S4381C1 ::S4381C1(){ note_ctor("S4381C1", this);} // tgen

static void Test_S4381C1()
{
  extern Class_Descriptor cd_S4381C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,18)];
    init_test(&cd_S4381C1, buf);
    S4381C1 *dp, &lv = *(dp=new (buf) S4381C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S4381C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4381C1)");
    check_base_class_offset(lv, (S4381C3*)(S4381C2*), 0, "S4381C1");
    check_base_class_offset(lv, (S4381C2*), 0, "S4381C1");
    check_field_offset(lv, s4381c1f0, ABISELECT(48,32), "S4381C1.s4381c1f0");
    check_field_offset(lv, s4381c1f1, ABISELECT(72,48), "S4381C1.s4381c1f1");
    check_field_offset(lv, s4381c1f2, ABISELECT(88,60), "S4381C1.s4381c1f2");
    test_class_info(&lv, &cd_S4381C1);
    dp->~S4381C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4381C1(Test_S4381C1, "S4381C1", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN7S4381C1C1Ev();
extern void _ZN7S4381C1D1Ev();
Name_Map name_map_S4381C1[] = {
  NSPAIR(_ZN7S4381C1C1Ev),
  NSPAIR(_ZN7S4381C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4381C3;
extern VTBL_ENTRY _ZTI7S4381C3[];
extern  VTBL_ENTRY _ZTV7S4381C3[];
extern Class_Descriptor cd_S4381C2;
extern VTBL_ENTRY _ZTI7S4381C2[];
extern  VTBL_ENTRY _ZTV7S4381C2[];
static Base_Class bases_S4381C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4381C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4381C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4381C1[];
extern void _ZN7S4381C1D1Ev();
extern void _ZN7S4381C1D0Ev();
extern void _ZN7S4381C32v2Ev();
extern void _ZN7S4381C32v3Ev();
extern void _ZN7S4381C32v4Ev();
extern void _ZN7S4381C22v5Ev();
extern void _ZN7S4381C22v6Ev();
extern void _ZN7S4381C12v1Ev();
static  VTBL_ENTRY vtc_S4381C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4381C1[0]),
  (VTBL_ENTRY)&_ZN7S4381C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4381C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4381C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4381C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4381C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4381C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4381C1[];
extern  VTBL_ENTRY _ZTV7S4381C1[];
Class_Descriptor cd_S4381C1 = {  "S4381C1", // class name
  bases_S4381C1, 2,
  &(vtc_S4381C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI7S4381C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4381C1),10, //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  S4380C3  {
  ::S4473C12_nt s4380c3f0;
  int s4380c3f1[2];
  char s4380c3f2;
  virtual  ~S4380C3(); // _ZN7S4380C3D1Ev
  virtual void  v2(); // _ZN7S4380C32v2Ev
  virtual void  v3(); // _ZN7S4380C32v3Ev
  virtual void  v4(); // _ZN7S4380C32v4Ev
  S4380C3(); // tgen
};
//SIG(-1 S4380C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4380C3 ::~S4380C3(){ note_dtor("S4380C3", this);}
void  S4380C3 ::v2(){vfunc_called(this, "_ZN7S4380C32v2Ev");}
void  S4380C3 ::v3(){vfunc_called(this, "_ZN7S4380C32v3Ev");}
void  S4380C3 ::v4(){vfunc_called(this, "_ZN7S4380C32v4Ev");}
S4380C3 ::S4380C3(){ note_ctor("S4380C3", this);} // tgen

static void Test_S4380C3()
{
  extern Class_Descriptor cd_S4380C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4380C3, buf);
    S4380C3 *dp, &lv = *(dp=new (buf) S4380C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4380C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4380C3)");
    check_field_offset(lv, s4380c3f0, ABISELECT(8,4), "S4380C3.s4380c3f0");
    check_field_offset(lv, s4380c3f1, ABISELECT(24,16), "S4380C3.s4380c3f1");
    check_field_offset(lv, s4380c3f2, ABISELECT(32,24), "S4380C3.s4380c3f2");
    test_class_info(&lv, &cd_S4380C3);
    dp->~S4380C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4380C3(Test_S4380C3, "S4380C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4380C3C1Ev();
extern void _ZN7S4380C3D1Ev();
Name_Map name_map_S4380C3[] = {
  NSPAIR(_ZN7S4380C3C1Ev),
  NSPAIR(_ZN7S4380C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4380C3[];
extern void _ZN7S4380C3D1Ev();
extern void _ZN7S4380C3D0Ev();
extern void _ZN7S4380C32v2Ev();
extern void _ZN7S4380C32v3Ev();
extern void _ZN7S4380C32v4Ev();
static  VTBL_ENTRY vtc_S4380C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4380C3[0]),
  (VTBL_ENTRY)&_ZN7S4380C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4380C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4380C3[];
extern  VTBL_ENTRY _ZTV7S4380C3[];
Class_Descriptor cd_S4380C3 = {  "S4380C3", // class name
  0,0,//no base classes
  &(vtc_S4380C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4380C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4380C3),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  S4380C2  : S4380C3 {
  void *s4380c2f0;
  virtual void  v5(); // _ZN7S4380C22v5Ev
  virtual void  v6(); // _ZN7S4380C22v6Ev
  ~S4380C2(); // tgen
  S4380C2(); // tgen
};
//SIG(-1 S4380C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4380C2 ::v5(){vfunc_called(this, "_ZN7S4380C22v5Ev");}
void  S4380C2 ::v6(){vfunc_called(this, "_ZN7S4380C22v6Ev");}
S4380C2 ::~S4380C2(){ note_dtor("S4380C2", this);} // tgen
S4380C2 ::S4380C2(){ note_ctor("S4380C2", this);} // tgen

static void Test_S4380C2()
{
  extern Class_Descriptor cd_S4380C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4380C2, buf);
    S4380C2 *dp, &lv = *(dp=new (buf) S4380C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4380C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4380C2)");
    check_base_class_offset(lv, (S4380C3*), 0, "S4380C2");
    check_field_offset(lv, s4380c2f0, ABISELECT(40,28), "S4380C2.s4380c2f0");
    test_class_info(&lv, &cd_S4380C2);
    dp->~S4380C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4380C2(Test_S4380C2, "S4380C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4380C2C1Ev();
extern void _ZN7S4380C2D1Ev();
Name_Map name_map_S4380C2[] = {
  NSPAIR(_ZN7S4380C2C1Ev),
  NSPAIR(_ZN7S4380C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4380C3;
extern VTBL_ENTRY _ZTI7S4380C3[];
extern  VTBL_ENTRY _ZTV7S4380C3[];
static Base_Class bases_S4380C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4380C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4380C2[];
extern void _ZN7S4380C2D1Ev();
extern void _ZN7S4380C2D0Ev();
extern void _ZN7S4380C32v2Ev();
extern void _ZN7S4380C32v3Ev();
extern void _ZN7S4380C32v4Ev();
extern void _ZN7S4380C22v5Ev();
extern void _ZN7S4380C22v6Ev();
static  VTBL_ENTRY vtc_S4380C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4380C2[0]),
  (VTBL_ENTRY)&_ZN7S4380C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4380C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4380C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4380C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4380C2[];
extern  VTBL_ENTRY _ZTV7S4380C2[];
Class_Descriptor cd_S4380C2 = {  "S4380C2", // class name
  bases_S4380C2, 1,
  &(vtc_S4380C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4380C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4380C2),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  S4380C1  : S4380C2 {
  ::S2173C14 s4380c1f0;
  ::S4473C12_nt s4380c1f1;
  ::S4473C12_nt s4380c1f2;
  virtual void  v1(); // _ZN7S4380C12v1Ev
  ~S4380C1(); // tgen
  S4380C1(); // tgen
};
//SIG(1 S4380C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC6{ m Fp Fi[2] FC7{ m}} FC4 FC4}


void  S4380C1 ::v1(){vfunc_called(this, "_ZN7S4380C12v1Ev");}
S4380C1 ::~S4380C1(){ note_dtor("S4380C1", this);} // tgen
S4380C1 ::S4380C1(){ note_ctor("S4380C1", this);} // tgen

static void Test_S4380C1()
{
  extern Class_Descriptor cd_S4380C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S4380C1, buf);
    S4380C1 *dp, &lv = *(dp=new (buf) S4380C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S4380C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4380C1)");
    check_base_class_offset(lv, (S4380C3*)(S4380C2*), 0, "S4380C1");
    check_base_class_offset(lv, (S4380C2*), 0, "S4380C1");
    check_field_offset(lv, s4380c1f0, ABISELECT(48,32), "S4380C1.s4380c1f0");
    check_field_offset(lv, s4380c1f1, ABISELECT(72,48), "S4380C1.s4380c1f1");
    check_field_offset(lv, s4380c1f2, ABISELECT(88,60), "S4380C1.s4380c1f2");
    test_class_info(&lv, &cd_S4380C1);
    dp->~S4380C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4380C1(Test_S4380C1, "S4380C1", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN7S4380C1C1Ev();
extern void _ZN7S4380C1D1Ev();
Name_Map name_map_S4380C1[] = {
  NSPAIR(_ZN7S4380C1C1Ev),
  NSPAIR(_ZN7S4380C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4380C3;
extern VTBL_ENTRY _ZTI7S4380C3[];
extern  VTBL_ENTRY _ZTV7S4380C3[];
extern Class_Descriptor cd_S4380C2;
extern VTBL_ENTRY _ZTI7S4380C2[];
extern  VTBL_ENTRY _ZTV7S4380C2[];
static Base_Class bases_S4380C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4380C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4380C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4380C1[];
extern void _ZN7S4380C1D1Ev();
extern void _ZN7S4380C1D0Ev();
extern void _ZN7S4380C32v2Ev();
extern void _ZN7S4380C32v3Ev();
extern void _ZN7S4380C32v4Ev();
extern void _ZN7S4380C22v5Ev();
extern void _ZN7S4380C22v6Ev();
extern void _ZN7S4380C12v1Ev();
static  VTBL_ENTRY vtc_S4380C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4380C1[0]),
  (VTBL_ENTRY)&_ZN7S4380C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4380C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4380C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4380C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4380C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4380C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4380C1[];
extern  VTBL_ENTRY _ZTV7S4380C1[];
Class_Descriptor cd_S4380C1 = {  "S4380C1", // class name
  bases_S4380C1, 2,
  &(vtc_S4380C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI7S4380C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4380C1),10, //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  S2075C4  {
  ::S4473C12_nt s2075c4f0;
  int s2075c4f1[2];
  char s2075c4f2;
  virtual  ~S2075C4(); // _ZN7S2075C4D1Ev
  virtual void  v2(); // _ZN7S2075C42v2Ev
  virtual void  v3(); // _ZN7S2075C42v3Ev
  virtual void  v4(); // _ZN7S2075C42v4Ev
  S2075C4(); // tgen
};
//SIG(-1 S2075C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2075C4 ::~S2075C4(){ note_dtor("S2075C4", this);}
void  S2075C4 ::v2(){vfunc_called(this, "_ZN7S2075C42v2Ev");}
void  S2075C4 ::v3(){vfunc_called(this, "_ZN7S2075C42v3Ev");}
void  S2075C4 ::v4(){vfunc_called(this, "_ZN7S2075C42v4Ev");}
S2075C4 ::S2075C4(){ note_ctor("S2075C4", this);} // tgen

static void Test_S2075C4()
{
  extern Class_Descriptor cd_S2075C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2075C4, buf);
    S2075C4 *dp, &lv = *(dp=new (buf) S2075C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2075C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2075C4)");
    check_field_offset(lv, s2075c4f0, ABISELECT(8,4), "S2075C4.s2075c4f0");
    check_field_offset(lv, s2075c4f1, ABISELECT(24,16), "S2075C4.s2075c4f1");
    check_field_offset(lv, s2075c4f2, ABISELECT(32,24), "S2075C4.s2075c4f2");
    test_class_info(&lv, &cd_S2075C4);
    dp->~S2075C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2075C4(Test_S2075C4, "S2075C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2075C4C1Ev();
extern void _ZN7S2075C4D1Ev();
Name_Map name_map_S2075C4[] = {
  NSPAIR(_ZN7S2075C4C1Ev),
  NSPAIR(_ZN7S2075C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2075C4[];
extern void _ZN7S2075C4D1Ev();
extern void _ZN7S2075C4D0Ev();
extern void _ZN7S2075C42v2Ev();
extern void _ZN7S2075C42v3Ev();
extern void _ZN7S2075C42v4Ev();
static  VTBL_ENTRY vtc_S2075C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2075C4[0]),
  (VTBL_ENTRY)&_ZN7S2075C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2075C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2075C4[];
extern  VTBL_ENTRY _ZTV7S2075C4[];
Class_Descriptor cd_S2075C4 = {  "S2075C4", // class name
  0,0,//no base classes
  &(vtc_S2075C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2075C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2075C4),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  S2075C3  : S2075C4 {
  void *s2075c3f0;
  virtual void  v5(); // _ZN7S2075C32v5Ev
  virtual void  v6(); // _ZN7S2075C32v6Ev
  ~S2075C3(); // tgen
  S2075C3(); // tgen
};
//SIG(-1 S2075C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2075C3 ::v5(){vfunc_called(this, "_ZN7S2075C32v5Ev");}
void  S2075C3 ::v6(){vfunc_called(this, "_ZN7S2075C32v6Ev");}
S2075C3 ::~S2075C3(){ note_dtor("S2075C3", this);} // tgen
S2075C3 ::S2075C3(){ note_ctor("S2075C3", this);} // tgen

static void Test_S2075C3()
{
  extern Class_Descriptor cd_S2075C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2075C3, buf);
    S2075C3 *dp, &lv = *(dp=new (buf) S2075C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2075C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2075C3)");
    check_base_class_offset(lv, (S2075C4*), 0, "S2075C3");
    check_field_offset(lv, s2075c3f0, ABISELECT(40,28), "S2075C3.s2075c3f0");
    test_class_info(&lv, &cd_S2075C3);
    dp->~S2075C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2075C3(Test_S2075C3, "S2075C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2075C3C1Ev();
extern void _ZN7S2075C3D1Ev();
Name_Map name_map_S2075C3[] = {
  NSPAIR(_ZN7S2075C3C1Ev),
  NSPAIR(_ZN7S2075C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2075C4;
extern VTBL_ENTRY _ZTI7S2075C4[];
extern  VTBL_ENTRY _ZTV7S2075C4[];
static Base_Class bases_S2075C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2075C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2075C3[];
extern void _ZN7S2075C3D1Ev();
extern void _ZN7S2075C3D0Ev();
extern void _ZN7S2075C42v2Ev();
extern void _ZN7S2075C42v3Ev();
extern void _ZN7S2075C42v4Ev();
extern void _ZN7S2075C32v5Ev();
extern void _ZN7S2075C32v6Ev();
static  VTBL_ENTRY vtc_S2075C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2075C3[0]),
  (VTBL_ENTRY)&_ZN7S2075C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2075C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2075C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2075C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2075C3[];
extern  VTBL_ENTRY _ZTV7S2075C3[];
Class_Descriptor cd_S2075C3 = {  "S2075C3", // class name
  bases_S2075C3, 1,
  &(vtc_S2075C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2075C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2075C3),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  S2075C2  : S2075C3 {
  int s2075c2f0;
  void *s2075c2f1;
  ::S2366C19 s2075c2f2;
  int s2075c2f3;
  virtual void  v7(); // _ZN7S2075C22v7Ev
  ~S2075C2(); // tgen
  S2075C2(); // tgen
};
//SIG(-1 S2075C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 Fi Fp FC6{ m Fp} Fi}


void  S2075C2 ::v7(){vfunc_called(this, "_ZN7S2075C22v7Ev");}
S2075C2 ::~S2075C2(){ note_dtor("S2075C2", this);} // tgen
S2075C2 ::S2075C2(){ note_ctor("S2075C2", this);} // tgen

static void Test_S2075C2()
{
  extern Class_Descriptor cd_S2075C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S2075C2, buf);
    S2075C2 *dp, &lv = *(dp=new (buf) S2075C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S2075C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2075C2)");
    check_base_class_offset(lv, (S2075C4*)(S2075C3*), 0, "S2075C2");
    check_base_class_offset(lv, (S2075C3*), 0, "S2075C2");
    check_field_offset(lv, s2075c2f0, ABISELECT(48,32), "S2075C2.s2075c2f0");
    check_field_offset(lv, s2075c2f1, ABISELECT(56,36), "S2075C2.s2075c2f1");
    check_field_offset(lv, s2075c2f2, ABISELECT(64,40), "S2075C2.s2075c2f2");
    check_field_offset(lv, s2075c2f3, ABISELECT(72,44), "S2075C2.s2075c2f3");
    test_class_info(&lv, &cd_S2075C2);
    dp->~S2075C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2075C2(Test_S2075C2, "S2075C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S2075C2C1Ev();
extern void _ZN7S2075C2D1Ev();
Name_Map name_map_S2075C2[] = {
  NSPAIR(_ZN7S2075C2C1Ev),
  NSPAIR(_ZN7S2075C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2075C4;
extern VTBL_ENTRY _ZTI7S2075C4[];
extern  VTBL_ENTRY _ZTV7S2075C4[];
extern Class_Descriptor cd_S2075C3;
extern VTBL_ENTRY _ZTI7S2075C3[];
extern  VTBL_ENTRY _ZTV7S2075C3[];
static Base_Class bases_S2075C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2075C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2075C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2075C2[];
extern void _ZN7S2075C2D1Ev();
extern void _ZN7S2075C2D0Ev();
extern void _ZN7S2075C42v2Ev();
extern void _ZN7S2075C42v3Ev();
extern void _ZN7S2075C42v4Ev();
extern void _ZN7S2075C32v5Ev();
extern void _ZN7S2075C32v6Ev();
extern void _ZN7S2075C22v7Ev();
static  VTBL_ENTRY vtc_S2075C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2075C2[0]),
  (VTBL_ENTRY)&_ZN7S2075C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2075C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2075C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2075C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2075C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S2075C2[];
extern  VTBL_ENTRY _ZTV7S2075C2[];
Class_Descriptor cd_S2075C2 = {  "S2075C2", // class name
  bases_S2075C2, 2,
  &(vtc_S2075C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S2075C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2075C2),10, //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  S2075C1  : S2075C2 {
  __tsi64 s2075c1f0;
  virtual void  v1(); // _ZN7S2075C12v1Ev
  ~S2075C1(); // tgen
  S2075C1(); // tgen
};
//SIG(1 S2075C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v5 v6 Fp} v7 Fi Fp FC7{ m Fp} Fi} v1 FL}


void  S2075C1 ::v1(){vfunc_called(this, "_ZN7S2075C12v1Ev");}
S2075C1 ::~S2075C1(){ note_dtor("S2075C1", this);} // tgen
S2075C1 ::S2075C1(){ note_ctor("S2075C1", this);} // tgen

static void Test_S2075C1()
{
  extern Class_Descriptor cd_S2075C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S2075C1, buf);
    S2075C1 *dp, &lv = *(dp=new (buf) S2075C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S2075C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2075C1)");
    check_base_class_offset(lv, (S2075C4*)(S2075C3*)(S2075C2*), 0, "S2075C1");
    check_base_class_offset(lv, (S2075C3*)(S2075C2*), 0, "S2075C1");
    check_base_class_offset(lv, (S2075C2*), 0, "S2075C1");
    check_field_offset(lv, s2075c1f0, ABISELECT(80,48), "S2075C1.s2075c1f0");
    test_class_info(&lv, &cd_S2075C1);
    dp->~S2075C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2075C1(Test_S2075C1, "S2075C1", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S2075C1C1Ev();
extern void _ZN7S2075C1D1Ev();
Name_Map name_map_S2075C1[] = {
  NSPAIR(_ZN7S2075C1C1Ev),
  NSPAIR(_ZN7S2075C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2075C4;
extern VTBL_ENTRY _ZTI7S2075C4[];
extern  VTBL_ENTRY _ZTV7S2075C4[];
extern Class_Descriptor cd_S2075C3;
extern VTBL_ENTRY _ZTI7S2075C3[];
extern  VTBL_ENTRY _ZTV7S2075C3[];
extern Class_Descriptor cd_S2075C2;
extern VTBL_ENTRY _ZTI7S2075C2[];
extern  VTBL_ENTRY _ZTV7S2075C2[];
static Base_Class bases_S2075C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2075C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2075C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2075C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2075C1[];
extern void _ZN7S2075C1D1Ev();
extern void _ZN7S2075C1D0Ev();
extern void _ZN7S2075C42v2Ev();
extern void _ZN7S2075C42v3Ev();
extern void _ZN7S2075C42v4Ev();
extern void _ZN7S2075C32v5Ev();
extern void _ZN7S2075C32v6Ev();
extern void _ZN7S2075C22v7Ev();
extern void _ZN7S2075C12v1Ev();
static  VTBL_ENTRY vtc_S2075C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2075C1[0]),
  (VTBL_ENTRY)&_ZN7S2075C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2075C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2075C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2075C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2075C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2075C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2075C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2075C1[];
extern  VTBL_ENTRY _ZTV7S2075C1[];
Class_Descriptor cd_S2075C1 = {  "S2075C1", // class name
  bases_S2075C1, 3,
  &(vtc_S2075C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S2075C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2075C1),11, //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  S17901C1  {
  void *s17901c1f0[2];
  ::S4467C12 s17901c1f1;
  void  mf17901c1(); // _ZN8S17901C19mf17901c1Ev
};
//SIG(1 S17901C1) C1{ m Fp[2] FC2{ FC3{ m Fp Fi FC4{ m}} FC5{ m FC6{ vd m FL Fc} FC6} FC3 FC7{ m Fp Fi FC4 FC8{ m}}}}


void  S17901C1 ::mf17901c1(){}

static void Test_S17901C1()
{
  {
    init_simple_test("S17901C1");
    S17901C1 lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S17901C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17901C1)");
    check_field_offset(lv, s17901c1f0, 0, "S17901C1.s17901c1f0");
    check_field_offset(lv, s17901c1f1, ABISELECT(16,8), "S17901C1.s17901c1f1");
  }
}
static Arrange_To_Call_Me vS17901C1(Test_S17901C1, "S17901C1", ABISELECT(112,76));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2076C4  {
  ::S4473C12_nt s2076c4f0;
  int s2076c4f1[2];
  char s2076c4f2;
  virtual  ~S2076C4(); // _ZN7S2076C4D1Ev
  virtual void  v2(); // _ZN7S2076C42v2Ev
  virtual void  v3(); // _ZN7S2076C42v3Ev
  virtual void  v4(); // _ZN7S2076C42v4Ev
  S2076C4(); // tgen
};
//SIG(-1 S2076C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2076C4 ::~S2076C4(){ note_dtor("S2076C4", this);}
void  S2076C4 ::v2(){vfunc_called(this, "_ZN7S2076C42v2Ev");}
void  S2076C4 ::v3(){vfunc_called(this, "_ZN7S2076C42v3Ev");}
void  S2076C4 ::v4(){vfunc_called(this, "_ZN7S2076C42v4Ev");}
S2076C4 ::S2076C4(){ note_ctor("S2076C4", this);} // tgen

static void Test_S2076C4()
{
  extern Class_Descriptor cd_S2076C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2076C4, buf);
    S2076C4 *dp, &lv = *(dp=new (buf) S2076C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2076C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2076C4)");
    check_field_offset(lv, s2076c4f0, ABISELECT(8,4), "S2076C4.s2076c4f0");
    check_field_offset(lv, s2076c4f1, ABISELECT(24,16), "S2076C4.s2076c4f1");
    check_field_offset(lv, s2076c4f2, ABISELECT(32,24), "S2076C4.s2076c4f2");
    test_class_info(&lv, &cd_S2076C4);
    dp->~S2076C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2076C4(Test_S2076C4, "S2076C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2076C4C1Ev();
extern void _ZN7S2076C4D1Ev();
Name_Map name_map_S2076C4[] = {
  NSPAIR(_ZN7S2076C4C1Ev),
  NSPAIR(_ZN7S2076C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2076C4[];
extern void _ZN7S2076C4D1Ev();
extern void _ZN7S2076C4D0Ev();
extern void _ZN7S2076C42v2Ev();
extern void _ZN7S2076C42v3Ev();
extern void _ZN7S2076C42v4Ev();
static  VTBL_ENTRY vtc_S2076C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2076C4[0]),
  (VTBL_ENTRY)&_ZN7S2076C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2076C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S2076C4[];
extern  VTBL_ENTRY _ZTV7S2076C4[];
Class_Descriptor cd_S2076C4 = {  "S2076C4", // class name
  0,0,//no base classes
  &(vtc_S2076C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2076C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2076C4),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  S2076C3  : S2076C4 {
  void *s2076c3f0;
  virtual void  v5(); // _ZN7S2076C32v5Ev
  virtual void  v6(); // _ZN7S2076C32v6Ev
  ~S2076C3(); // tgen
  S2076C3(); // tgen
};
//SIG(-1 S2076C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2076C3 ::v5(){vfunc_called(this, "_ZN7S2076C32v5Ev");}
void  S2076C3 ::v6(){vfunc_called(this, "_ZN7S2076C32v6Ev");}
S2076C3 ::~S2076C3(){ note_dtor("S2076C3", this);} // tgen
S2076C3 ::S2076C3(){ note_ctor("S2076C3", this);} // tgen

static void Test_S2076C3()
{
  extern Class_Descriptor cd_S2076C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2076C3, buf);
    S2076C3 *dp, &lv = *(dp=new (buf) S2076C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2076C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2076C3)");
    check_base_class_offset(lv, (S2076C4*), 0, "S2076C3");
    check_field_offset(lv, s2076c3f0, ABISELECT(40,28), "S2076C3.s2076c3f0");
    test_class_info(&lv, &cd_S2076C3);
    dp->~S2076C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2076C3(Test_S2076C3, "S2076C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2076C3C1Ev();
extern void _ZN7S2076C3D1Ev();
Name_Map name_map_S2076C3[] = {
  NSPAIR(_ZN7S2076C3C1Ev),
  NSPAIR(_ZN7S2076C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2076C4;
extern VTBL_ENTRY _ZTI7S2076C4[];
extern  VTBL_ENTRY _ZTV7S2076C4[];
static Base_Class bases_S2076C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2076C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2076C3[];
extern void _ZN7S2076C3D1Ev();
extern void _ZN7S2076C3D0Ev();
extern void _ZN7S2076C42v2Ev();
extern void _ZN7S2076C42v3Ev();
extern void _ZN7S2076C42v4Ev();
extern void _ZN7S2076C32v5Ev();
extern void _ZN7S2076C32v6Ev();
static  VTBL_ENTRY vtc_S2076C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2076C3[0]),
  (VTBL_ENTRY)&_ZN7S2076C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2076C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2076C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2076C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S2076C3[];
extern  VTBL_ENTRY _ZTV7S2076C3[];
Class_Descriptor cd_S2076C3 = {  "S2076C3", // class name
  bases_S2076C3, 1,
  &(vtc_S2076C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2076C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2076C3),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  S2076C2  : S2076C3 {
  int s2076c2f0;
  void *s2076c2f1;
  ::S2366C19 s2076c2f2;
  int s2076c2f3;
  virtual void  v7(); // _ZN7S2076C22v7Ev
  ~S2076C2(); // tgen
  S2076C2(); // tgen
};
//SIG(-1 S2076C2) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 Fi Fp FC6{ m Fp} Fi}


void  S2076C2 ::v7(){vfunc_called(this, "_ZN7S2076C22v7Ev");}
S2076C2 ::~S2076C2(){ note_dtor("S2076C2", this);} // tgen
S2076C2 ::S2076C2(){ note_ctor("S2076C2", this);} // tgen

static void Test_S2076C2()
{
  extern Class_Descriptor cd_S2076C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S2076C2, buf);
    S2076C2 *dp, &lv = *(dp=new (buf) S2076C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S2076C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2076C2)");
    check_base_class_offset(lv, (S2076C4*)(S2076C3*), 0, "S2076C2");
    check_base_class_offset(lv, (S2076C3*), 0, "S2076C2");
    check_field_offset(lv, s2076c2f0, ABISELECT(48,32), "S2076C2.s2076c2f0");
    check_field_offset(lv, s2076c2f1, ABISELECT(56,36), "S2076C2.s2076c2f1");
    check_field_offset(lv, s2076c2f2, ABISELECT(64,40), "S2076C2.s2076c2f2");
    check_field_offset(lv, s2076c2f3, ABISELECT(72,44), "S2076C2.s2076c2f3");
    test_class_info(&lv, &cd_S2076C2);
    dp->~S2076C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2076C2(Test_S2076C2, "S2076C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S2076C2C1Ev();
extern void _ZN7S2076C2D1Ev();
Name_Map name_map_S2076C2[] = {
  NSPAIR(_ZN7S2076C2C1Ev),
  NSPAIR(_ZN7S2076C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2076C4;
extern VTBL_ENTRY _ZTI7S2076C4[];
extern  VTBL_ENTRY _ZTV7S2076C4[];
extern Class_Descriptor cd_S2076C3;
extern VTBL_ENTRY _ZTI7S2076C3[];
extern  VTBL_ENTRY _ZTV7S2076C3[];
static Base_Class bases_S2076C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2076C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2076C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2076C2[];
extern void _ZN7S2076C2D1Ev();
extern void _ZN7S2076C2D0Ev();
extern void _ZN7S2076C42v2Ev();
extern void _ZN7S2076C42v3Ev();
extern void _ZN7S2076C42v4Ev();
extern void _ZN7S2076C32v5Ev();
extern void _ZN7S2076C32v6Ev();
extern void _ZN7S2076C22v7Ev();
static  VTBL_ENTRY vtc_S2076C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2076C2[0]),
  (VTBL_ENTRY)&_ZN7S2076C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2076C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2076C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2076C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2076C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S2076C2[];
extern  VTBL_ENTRY _ZTV7S2076C2[];
Class_Descriptor cd_S2076C2 = {  "S2076C2", // class name
  bases_S2076C2, 2,
  &(vtc_S2076C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S2076C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2076C2),10, //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  S2076C1  : S2076C2 {
  virtual void  v1(); // _ZN7S2076C12v1Ev
  ~S2076C1(); // tgen
  S2076C1(); // tgen
};
//SIG(1 S2076C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v5 v6 Fp} v7 Fi Fp FC7{ m Fp} Fi} v1}


void  S2076C1 ::v1(){vfunc_called(this, "_ZN7S2076C12v1Ev");}
S2076C1 ::~S2076C1(){ note_dtor("S2076C1", this);} // tgen
S2076C1 ::S2076C1(){ note_ctor("S2076C1", this);} // tgen

static void Test_S2076C1()
{
  extern Class_Descriptor cd_S2076C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S2076C1, buf);
    S2076C1 *dp, &lv = *(dp=new (buf) S2076C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S2076C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2076C1)");
    check_base_class_offset(lv, (S2076C4*)(S2076C3*)(S2076C2*), 0, "S2076C1");
    check_base_class_offset(lv, (S2076C3*)(S2076C2*), 0, "S2076C1");
    check_base_class_offset(lv, (S2076C2*), 0, "S2076C1");
    test_class_info(&lv, &cd_S2076C1);
    dp->~S2076C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2076C1(Test_S2076C1, "S2076C1", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S2076C1C1Ev();
extern void _ZN7S2076C1D1Ev();
Name_Map name_map_S2076C1[] = {
  NSPAIR(_ZN7S2076C1C1Ev),
  NSPAIR(_ZN7S2076C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2076C4;
extern VTBL_ENTRY _ZTI7S2076C4[];
extern  VTBL_ENTRY _ZTV7S2076C4[];
extern Class_Descriptor cd_S2076C3;
extern VTBL_ENTRY _ZTI7S2076C3[];
extern  VTBL_ENTRY _ZTV7S2076C3[];
extern Class_Descriptor cd_S2076C2;
extern VTBL_ENTRY _ZTI7S2076C2[];
extern  VTBL_ENTRY _ZTV7S2076C2[];
static Base_Class bases_S2076C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2076C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2076C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2076C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2076C1[];
extern void _ZN7S2076C1D1Ev();
extern void _ZN7S2076C1D0Ev();
extern void _ZN7S2076C42v2Ev();
extern void _ZN7S2076C42v3Ev();
extern void _ZN7S2076C42v4Ev();
extern void _ZN7S2076C32v5Ev();
extern void _ZN7S2076C32v6Ev();
extern void _ZN7S2076C22v7Ev();
extern void _ZN7S2076C12v1Ev();
static  VTBL_ENTRY vtc_S2076C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2076C1[0]),
  (VTBL_ENTRY)&_ZN7S2076C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2076C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2076C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2076C32v5Ev,
  (VTBL_ENTRY)&_ZN7S2076C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2076C22v7Ev,
  (VTBL_ENTRY)&_ZN7S2076C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S2076C1[];
extern  VTBL_ENTRY _ZTV7S2076C1[];
Class_Descriptor cd_S2076C1 = {  "S2076C1", // class name
  bases_S2076C1, 3,
  &(vtc_S2076C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S2076C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2076C1),11, //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  S4364C3  {
  ::S4473C12_nt s4364c3f0;
  int s4364c3f1[2];
  char s4364c3f2;
  virtual  ~S4364C3(); // _ZN7S4364C3D1Ev
  virtual void  v2(); // _ZN7S4364C32v2Ev
  virtual void  v3(); // _ZN7S4364C32v3Ev
  virtual void  v4(); // _ZN7S4364C32v4Ev
  S4364C3(); // tgen
};
//SIG(-1 S4364C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4364C3 ::~S4364C3(){ note_dtor("S4364C3", this);}
void  S4364C3 ::v2(){vfunc_called(this, "_ZN7S4364C32v2Ev");}
void  S4364C3 ::v3(){vfunc_called(this, "_ZN7S4364C32v3Ev");}
void  S4364C3 ::v4(){vfunc_called(this, "_ZN7S4364C32v4Ev");}
S4364C3 ::S4364C3(){ note_ctor("S4364C3", this);} // tgen

static void Test_S4364C3()
{
  extern Class_Descriptor cd_S4364C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4364C3, buf);
    S4364C3 *dp, &lv = *(dp=new (buf) S4364C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4364C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4364C3)");
    check_field_offset(lv, s4364c3f0, ABISELECT(8,4), "S4364C3.s4364c3f0");
    check_field_offset(lv, s4364c3f1, ABISELECT(24,16), "S4364C3.s4364c3f1");
    check_field_offset(lv, s4364c3f2, ABISELECT(32,24), "S4364C3.s4364c3f2");
    test_class_info(&lv, &cd_S4364C3);
    dp->~S4364C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4364C3(Test_S4364C3, "S4364C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4364C3C1Ev();
extern void _ZN7S4364C3D1Ev();
Name_Map name_map_S4364C3[] = {
  NSPAIR(_ZN7S4364C3C1Ev),
  NSPAIR(_ZN7S4364C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4364C3[];
extern void _ZN7S4364C3D1Ev();
extern void _ZN7S4364C3D0Ev();
extern void _ZN7S4364C32v2Ev();
extern void _ZN7S4364C32v3Ev();
extern void _ZN7S4364C32v4Ev();
static  VTBL_ENTRY vtc_S4364C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4364C3[0]),
  (VTBL_ENTRY)&_ZN7S4364C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4364C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4364C3[];
extern  VTBL_ENTRY _ZTV7S4364C3[];
Class_Descriptor cd_S4364C3 = {  "S4364C3", // class name
  0,0,//no base classes
  &(vtc_S4364C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4364C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4364C3),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  S4364C2  : S4364C3 {
  void *s4364c2f0;
  virtual void  v5(); // _ZN7S4364C22v5Ev
  virtual void  v6(); // _ZN7S4364C22v6Ev
  ~S4364C2(); // tgen
  S4364C2(); // tgen
};
//SIG(-1 S4364C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4364C2 ::v5(){vfunc_called(this, "_ZN7S4364C22v5Ev");}
void  S4364C2 ::v6(){vfunc_called(this, "_ZN7S4364C22v6Ev");}
S4364C2 ::~S4364C2(){ note_dtor("S4364C2", this);} // tgen
S4364C2 ::S4364C2(){ note_ctor("S4364C2", this);} // tgen

static void Test_S4364C2()
{
  extern Class_Descriptor cd_S4364C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4364C2, buf);
    S4364C2 *dp, &lv = *(dp=new (buf) S4364C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4364C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4364C2)");
    check_base_class_offset(lv, (S4364C3*), 0, "S4364C2");
    check_field_offset(lv, s4364c2f0, ABISELECT(40,28), "S4364C2.s4364c2f0");
    test_class_info(&lv, &cd_S4364C2);
    dp->~S4364C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4364C2(Test_S4364C2, "S4364C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4364C2C1Ev();
extern void _ZN7S4364C2D1Ev();
Name_Map name_map_S4364C2[] = {
  NSPAIR(_ZN7S4364C2C1Ev),
  NSPAIR(_ZN7S4364C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4364C3;
extern VTBL_ENTRY _ZTI7S4364C3[];
extern  VTBL_ENTRY _ZTV7S4364C3[];
static Base_Class bases_S4364C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4364C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4364C2[];
extern void _ZN7S4364C2D1Ev();
extern void _ZN7S4364C2D0Ev();
extern void _ZN7S4364C32v2Ev();
extern void _ZN7S4364C32v3Ev();
extern void _ZN7S4364C32v4Ev();
extern void _ZN7S4364C22v5Ev();
extern void _ZN7S4364C22v6Ev();
static  VTBL_ENTRY vtc_S4364C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4364C2[0]),
  (VTBL_ENTRY)&_ZN7S4364C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4364C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4364C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4364C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4364C2[];
extern  VTBL_ENTRY _ZTV7S4364C2[];
Class_Descriptor cd_S4364C2 = {  "S4364C2", // class name
  bases_S4364C2, 1,
  &(vtc_S4364C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4364C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4364C2),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  S4364C1  : S4364C2 {
  ::S4473C12_nt s4364c1f0;
  ::S4473C12_nt s4364c1f1;
  int s4364c1f2;
  ::S2366C19 s4364c1f3;
  void *s4364c1f4;
  virtual void  v1(); // _ZN7S4364C12v1Ev
  ~S4364C1(); // tgen
  S4364C1(); // tgen
};
//SIG(1 S4364C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC4 FC4 Fi FC6{ m Fp} Fp}


void  S4364C1 ::v1(){vfunc_called(this, "_ZN7S4364C12v1Ev");}
S4364C1 ::~S4364C1(){ note_dtor("S4364C1", this);} // tgen
S4364C1 ::S4364C1(){ note_ctor("S4364C1", this);} // tgen

static void Test_S4364C1()
{
  extern Class_Descriptor cd_S4364C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S4364C1, buf);
    S4364C1 *dp, &lv = *(dp=new (buf) S4364C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S4364C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4364C1)");
    check_base_class_offset(lv, (S4364C3*)(S4364C2*), 0, "S4364C1");
    check_base_class_offset(lv, (S4364C2*), 0, "S4364C1");
    check_field_offset(lv, s4364c1f0, ABISELECT(48,32), "S4364C1.s4364c1f0");
    check_field_offset(lv, s4364c1f1, ABISELECT(64,44), "S4364C1.s4364c1f1");
    check_field_offset(lv, s4364c1f2, ABISELECT(80,56), "S4364C1.s4364c1f2");
    check_field_offset(lv, s4364c1f3, ABISELECT(88,60), "S4364C1.s4364c1f3");
    check_field_offset(lv, s4364c1f4, ABISELECT(96,64), "S4364C1.s4364c1f4");
    test_class_info(&lv, &cd_S4364C1);
    dp->~S4364C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4364C1(Test_S4364C1, "S4364C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S4364C1C1Ev();
extern void _ZN7S4364C1D1Ev();
Name_Map name_map_S4364C1[] = {
  NSPAIR(_ZN7S4364C1C1Ev),
  NSPAIR(_ZN7S4364C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4364C3;
extern VTBL_ENTRY _ZTI7S4364C3[];
extern  VTBL_ENTRY _ZTV7S4364C3[];
extern Class_Descriptor cd_S4364C2;
extern VTBL_ENTRY _ZTI7S4364C2[];
extern  VTBL_ENTRY _ZTV7S4364C2[];
static Base_Class bases_S4364C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4364C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4364C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4364C1[];
extern void _ZN7S4364C1D1Ev();
extern void _ZN7S4364C1D0Ev();
extern void _ZN7S4364C32v2Ev();
extern void _ZN7S4364C32v3Ev();
extern void _ZN7S4364C32v4Ev();
extern void _ZN7S4364C22v5Ev();
extern void _ZN7S4364C22v6Ev();
extern void _ZN7S4364C12v1Ev();
static  VTBL_ENTRY vtc_S4364C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4364C1[0]),
  (VTBL_ENTRY)&_ZN7S4364C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4364C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4364C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4364C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4364C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4364C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4364C1[];
extern  VTBL_ENTRY _ZTV7S4364C1[];
Class_Descriptor cd_S4364C1 = {  "S4364C1", // class name
  bases_S4364C1, 2,
  &(vtc_S4364C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S4364C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4364C1),10, //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  S5092C3  {
  ::S4473C12_nt s5092c3f0;
  int s5092c3f1[2];
  char s5092c3f2;
  virtual  ~S5092C3(); // _ZN7S5092C3D1Ev
  virtual void  v4(); // _ZN7S5092C32v4Ev
  virtual void  v5(); // _ZN7S5092C32v5Ev
  virtual void  v6(); // _ZN7S5092C32v6Ev
  S5092C3(); // tgen
};
//SIG(-1 S5092C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5092C3 ::~S5092C3(){ note_dtor("S5092C3", this);}
void  S5092C3 ::v4(){vfunc_called(this, "_ZN7S5092C32v4Ev");}
void  S5092C3 ::v5(){vfunc_called(this, "_ZN7S5092C32v5Ev");}
void  S5092C3 ::v6(){vfunc_called(this, "_ZN7S5092C32v6Ev");}
S5092C3 ::S5092C3(){ note_ctor("S5092C3", this);} // tgen

static void Test_S5092C3()
{
  extern Class_Descriptor cd_S5092C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5092C3, buf);
    S5092C3 *dp, &lv = *(dp=new (buf) S5092C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5092C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5092C3)");
    check_field_offset(lv, s5092c3f0, ABISELECT(8,4), "S5092C3.s5092c3f0");
    check_field_offset(lv, s5092c3f1, ABISELECT(24,16), "S5092C3.s5092c3f1");
    check_field_offset(lv, s5092c3f2, ABISELECT(32,24), "S5092C3.s5092c3f2");
    test_class_info(&lv, &cd_S5092C3);
    dp->~S5092C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5092C3(Test_S5092C3, "S5092C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5092C3C1Ev();
extern void _ZN7S5092C3D1Ev();
Name_Map name_map_S5092C3[] = {
  NSPAIR(_ZN7S5092C3C1Ev),
  NSPAIR(_ZN7S5092C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5092C3[];
extern void _ZN7S5092C3D1Ev();
extern void _ZN7S5092C3D0Ev();
extern void _ZN7S5092C32v4Ev();
extern void _ZN7S5092C32v5Ev();
extern void _ZN7S5092C32v6Ev();
static  VTBL_ENTRY vtc_S5092C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5092C3[0]),
  (VTBL_ENTRY)&_ZN7S5092C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5092C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5092C3[];
extern  VTBL_ENTRY _ZTV7S5092C3[];
Class_Descriptor cd_S5092C3 = {  "S5092C3", // class name
  0,0,//no base classes
  &(vtc_S5092C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5092C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5092C3),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  S5092C2  : S5092C3 {
  void *s5092c2f0;
  virtual void  v7(); // _ZN7S5092C22v7Ev
  virtual void  v8(); // _ZN7S5092C22v8Ev
  ~S5092C2(); // tgen
  S5092C2(); // tgen
};
//SIG(-1 S5092C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5092C2 ::v7(){vfunc_called(this, "_ZN7S5092C22v7Ev");}
void  S5092C2 ::v8(){vfunc_called(this, "_ZN7S5092C22v8Ev");}
S5092C2 ::~S5092C2(){ note_dtor("S5092C2", this);} // tgen
S5092C2 ::S5092C2(){ note_ctor("S5092C2", this);} // tgen

static void Test_S5092C2()
{
  extern Class_Descriptor cd_S5092C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5092C2, buf);
    S5092C2 *dp, &lv = *(dp=new (buf) S5092C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5092C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5092C2)");
    check_base_class_offset(lv, (S5092C3*), 0, "S5092C2");
    check_field_offset(lv, s5092c2f0, ABISELECT(40,28), "S5092C2.s5092c2f0");
    test_class_info(&lv, &cd_S5092C2);
    dp->~S5092C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5092C2(Test_S5092C2, "S5092C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5092C2C1Ev();
extern void _ZN7S5092C2D1Ev();
Name_Map name_map_S5092C2[] = {
  NSPAIR(_ZN7S5092C2C1Ev),
  NSPAIR(_ZN7S5092C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5092C3;
extern VTBL_ENTRY _ZTI7S5092C3[];
extern  VTBL_ENTRY _ZTV7S5092C3[];
static Base_Class bases_S5092C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5092C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S5092C2[];
extern void _ZN7S5092C2D1Ev();
extern void _ZN7S5092C2D0Ev();
extern void _ZN7S5092C32v4Ev();
extern void _ZN7S5092C32v5Ev();
extern void _ZN7S5092C32v6Ev();
extern void _ZN7S5092C22v7Ev();
extern void _ZN7S5092C22v8Ev();
static  VTBL_ENTRY vtc_S5092C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5092C2[0]),
  (VTBL_ENTRY)&_ZN7S5092C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5092C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5092C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5092C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5092C2[];
extern  VTBL_ENTRY _ZTV7S5092C2[];
Class_Descriptor cd_S5092C2 = {  "S5092C2", // class name
  bases_S5092C2, 1,
  &(vtc_S5092C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5092C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5092C2),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  S5092C1  : S5092C2 {
  void *s5092c1f0[5];
  int s5092c1f1[3];
  virtual  ~S5092C1(); // _ZN7S5092C1D1Ev
  virtual void  v1(); // _ZN7S5092C12v1Ev
  virtual void  v2(); // _ZN7S5092C12v2Ev
  virtual void  v3(); // _ZN7S5092C12v3Ev
  S5092C1(); // tgen
};
//SIG(1 S5092C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 Fp[5] Fi[3]}


 S5092C1 ::~S5092C1(){ note_dtor("S5092C1", this);}
void  S5092C1 ::v1(){vfunc_called(this, "_ZN7S5092C12v1Ev");}
void  S5092C1 ::v2(){vfunc_called(this, "_ZN7S5092C12v2Ev");}
void  S5092C1 ::v3(){vfunc_called(this, "_ZN7S5092C12v3Ev");}
S5092C1 ::S5092C1(){ note_ctor("S5092C1", this);} // tgen

static void Test_S5092C1()
{
  extern Class_Descriptor cd_S5092C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S5092C1, buf);
    S5092C1 *dp, &lv = *(dp=new (buf) S5092C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S5092C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5092C1)");
    check_base_class_offset(lv, (S5092C3*)(S5092C2*), 0, "S5092C1");
    check_base_class_offset(lv, (S5092C2*), 0, "S5092C1");
    check_field_offset(lv, s5092c1f0, ABISELECT(48,32), "S5092C1.s5092c1f0");
    check_field_offset(lv, s5092c1f1, ABISELECT(88,52), "S5092C1.s5092c1f1");
    test_class_info(&lv, &cd_S5092C1);
    dp->~S5092C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5092C1(Test_S5092C1, "S5092C1", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S5092C1C1Ev();
extern void _ZN7S5092C1D1Ev();
Name_Map name_map_S5092C1[] = {
  NSPAIR(_ZN7S5092C1C1Ev),
  NSPAIR(_ZN7S5092C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5092C3;
extern VTBL_ENTRY _ZTI7S5092C3[];
extern  VTBL_ENTRY _ZTV7S5092C3[];
extern Class_Descriptor cd_S5092C2;
extern VTBL_ENTRY _ZTI7S5092C2[];
extern  VTBL_ENTRY _ZTV7S5092C2[];
static Base_Class bases_S5092C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5092C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5092C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5092C1[];
extern void _ZN7S5092C1D1Ev();
extern void _ZN7S5092C1D0Ev();
extern void _ZN7S5092C32v4Ev();
extern void _ZN7S5092C32v5Ev();
extern void _ZN7S5092C32v6Ev();
extern void _ZN7S5092C22v7Ev();
extern void _ZN7S5092C22v8Ev();
extern void _ZN7S5092C12v1Ev();
extern void _ZN7S5092C12v2Ev();
extern void _ZN7S5092C12v3Ev();
static  VTBL_ENTRY vtc_S5092C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5092C1[0]),
  (VTBL_ENTRY)&_ZN7S5092C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5092C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5092C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5092C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5092C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5092C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5092C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5092C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5092C1[];
extern  VTBL_ENTRY _ZTV7S5092C1[];
Class_Descriptor cd_S5092C1 = {  "S5092C1", // class name
  bases_S5092C1, 2,
  &(vtc_S5092C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S5092C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5092C1),12, //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  S4751C3  {
  ::S4473C12_nt s4751c3f0;
  int s4751c3f1[2];
  char s4751c3f2;
  virtual  ~S4751C3(); // _ZN7S4751C3D1Ev
  virtual void  v3(); // _ZN7S4751C32v3Ev
  virtual void  v4(); // _ZN7S4751C32v4Ev
  virtual void  v5(); // _ZN7S4751C32v5Ev
  S4751C3(); // tgen
};
//SIG(-1 S4751C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4751C3 ::~S4751C3(){ note_dtor("S4751C3", this);}
void  S4751C3 ::v3(){vfunc_called(this, "_ZN7S4751C32v3Ev");}
void  S4751C3 ::v4(){vfunc_called(this, "_ZN7S4751C32v4Ev");}
void  S4751C3 ::v5(){vfunc_called(this, "_ZN7S4751C32v5Ev");}
S4751C3 ::S4751C3(){ note_ctor("S4751C3", this);} // tgen

static void Test_S4751C3()
{
  extern Class_Descriptor cd_S4751C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4751C3, buf);
    S4751C3 *dp, &lv = *(dp=new (buf) S4751C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4751C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4751C3)");
    check_field_offset(lv, s4751c3f0, ABISELECT(8,4), "S4751C3.s4751c3f0");
    check_field_offset(lv, s4751c3f1, ABISELECT(24,16), "S4751C3.s4751c3f1");
    check_field_offset(lv, s4751c3f2, ABISELECT(32,24), "S4751C3.s4751c3f2");
    test_class_info(&lv, &cd_S4751C3);
    dp->~S4751C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4751C3(Test_S4751C3, "S4751C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4751C3C1Ev();
extern void _ZN7S4751C3D1Ev();
Name_Map name_map_S4751C3[] = {
  NSPAIR(_ZN7S4751C3C1Ev),
  NSPAIR(_ZN7S4751C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4751C3[];
extern void _ZN7S4751C3D1Ev();
extern void _ZN7S4751C3D0Ev();
extern void _ZN7S4751C32v3Ev();
extern void _ZN7S4751C32v4Ev();
extern void _ZN7S4751C32v5Ev();
static  VTBL_ENTRY vtc_S4751C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4751C3[0]),
  (VTBL_ENTRY)&_ZN7S4751C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4751C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4751C3[];
extern  VTBL_ENTRY _ZTV7S4751C3[];
Class_Descriptor cd_S4751C3 = {  "S4751C3", // class name
  0,0,//no base classes
  &(vtc_S4751C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4751C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4751C3),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  S4751C2  : S4751C3 {
  void *s4751c2f0;
  virtual void  v6(); // _ZN7S4751C22v6Ev
  virtual void  v7(); // _ZN7S4751C22v7Ev
  ~S4751C2(); // tgen
  S4751C2(); // tgen
};
//SIG(-1 S4751C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4751C2 ::v6(){vfunc_called(this, "_ZN7S4751C22v6Ev");}
void  S4751C2 ::v7(){vfunc_called(this, "_ZN7S4751C22v7Ev");}
S4751C2 ::~S4751C2(){ note_dtor("S4751C2", this);} // tgen
S4751C2 ::S4751C2(){ note_ctor("S4751C2", this);} // tgen

static void Test_S4751C2()
{
  extern Class_Descriptor cd_S4751C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4751C2, buf);
    S4751C2 *dp, &lv = *(dp=new (buf) S4751C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4751C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4751C2)");
    check_base_class_offset(lv, (S4751C3*), 0, "S4751C2");
    check_field_offset(lv, s4751c2f0, ABISELECT(40,28), "S4751C2.s4751c2f0");
    test_class_info(&lv, &cd_S4751C2);
    dp->~S4751C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4751C2(Test_S4751C2, "S4751C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4751C2C1Ev();
extern void _ZN7S4751C2D1Ev();
Name_Map name_map_S4751C2[] = {
  NSPAIR(_ZN7S4751C2C1Ev),
  NSPAIR(_ZN7S4751C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4751C3;
extern VTBL_ENTRY _ZTI7S4751C3[];
extern  VTBL_ENTRY _ZTV7S4751C3[];
static Base_Class bases_S4751C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4751C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4751C2[];
extern void _ZN7S4751C2D1Ev();
extern void _ZN7S4751C2D0Ev();
extern void _ZN7S4751C32v3Ev();
extern void _ZN7S4751C32v4Ev();
extern void _ZN7S4751C32v5Ev();
extern void _ZN7S4751C22v6Ev();
extern void _ZN7S4751C22v7Ev();
static  VTBL_ENTRY vtc_S4751C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4751C2[0]),
  (VTBL_ENTRY)&_ZN7S4751C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4751C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4751C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4751C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4751C2[];
extern  VTBL_ENTRY _ZTV7S4751C2[];
Class_Descriptor cd_S4751C2 = {  "S4751C2", // class name
  bases_S4751C2, 1,
  &(vtc_S4751C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4751C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4751C2),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  S4751C1  : S4751C2 {
  ::S4473C12_nt s4751c1f0;
  ::S2366C19 s4751c1f1;
  virtual  ~S4751C1(); // _ZN7S4751C1D1Ev
  virtual void  v1(); // _ZN7S4751C12v1Ev
  virtual void  v2(); // _ZN7S4751C12v2Ev
  S4751C1(); // tgen
};
//SIG(1 S4751C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC4 FC6{ m Fp}}


 S4751C1 ::~S4751C1(){ note_dtor("S4751C1", this);}
void  S4751C1 ::v1(){vfunc_called(this, "_ZN7S4751C12v1Ev");}
void  S4751C1 ::v2(){vfunc_called(this, "_ZN7S4751C12v2Ev");}
S4751C1 ::S4751C1(){ note_ctor("S4751C1", this);} // tgen

static void Test_S4751C1()
{
  extern Class_Descriptor cd_S4751C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4751C1, buf);
    S4751C1 *dp, &lv = *(dp=new (buf) S4751C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4751C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4751C1)");
    check_base_class_offset(lv, (S4751C3*)(S4751C2*), 0, "S4751C1");
    check_base_class_offset(lv, (S4751C2*), 0, "S4751C1");
    check_field_offset(lv, s4751c1f0, ABISELECT(48,32), "S4751C1.s4751c1f0");
    check_field_offset(lv, s4751c1f1, ABISELECT(64,44), "S4751C1.s4751c1f1");
    test_class_info(&lv, &cd_S4751C1);
    dp->~S4751C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4751C1(Test_S4751C1, "S4751C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4751C1C1Ev();
extern void _ZN7S4751C1D1Ev();
Name_Map name_map_S4751C1[] = {
  NSPAIR(_ZN7S4751C1C1Ev),
  NSPAIR(_ZN7S4751C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4751C3;
extern VTBL_ENTRY _ZTI7S4751C3[];
extern  VTBL_ENTRY _ZTV7S4751C3[];
extern Class_Descriptor cd_S4751C2;
extern VTBL_ENTRY _ZTI7S4751C2[];
extern  VTBL_ENTRY _ZTV7S4751C2[];
static Base_Class bases_S4751C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4751C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4751C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4751C1[];
extern void _ZN7S4751C1D1Ev();
extern void _ZN7S4751C1D0Ev();
extern void _ZN7S4751C32v3Ev();
extern void _ZN7S4751C32v4Ev();
extern void _ZN7S4751C32v5Ev();
extern void _ZN7S4751C22v6Ev();
extern void _ZN7S4751C22v7Ev();
extern void _ZN7S4751C12v1Ev();
extern void _ZN7S4751C12v2Ev();
static  VTBL_ENTRY vtc_S4751C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4751C1[0]),
  (VTBL_ENTRY)&_ZN7S4751C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4751C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4751C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4751C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4751C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4751C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4751C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4751C1[];
extern  VTBL_ENTRY _ZTV7S4751C1[];
Class_Descriptor cd_S4751C1 = {  "S4751C1", // class name
  bases_S4751C1, 2,
  &(vtc_S4751C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4751C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4751C1),11, //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  S4800C3  {
  ::S4473C12_nt s4800c3f0;
  int s4800c3f1[2];
  char s4800c3f2;
  virtual  ~S4800C3(); // _ZN7S4800C3D1Ev
  virtual void  v3(); // _ZN7S4800C32v3Ev
  virtual void  v4(); // _ZN7S4800C32v4Ev
  virtual void  v5(); // _ZN7S4800C32v5Ev
  S4800C3(); // tgen
};
//SIG(-1 S4800C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4800C3 ::~S4800C3(){ note_dtor("S4800C3", this);}
void  S4800C3 ::v3(){vfunc_called(this, "_ZN7S4800C32v3Ev");}
void  S4800C3 ::v4(){vfunc_called(this, "_ZN7S4800C32v4Ev");}
void  S4800C3 ::v5(){vfunc_called(this, "_ZN7S4800C32v5Ev");}
S4800C3 ::S4800C3(){ note_ctor("S4800C3", this);} // tgen

static void Test_S4800C3()
{
  extern Class_Descriptor cd_S4800C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4800C3, buf);
    S4800C3 *dp, &lv = *(dp=new (buf) S4800C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4800C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4800C3)");
    check_field_offset(lv, s4800c3f0, ABISELECT(8,4), "S4800C3.s4800c3f0");
    check_field_offset(lv, s4800c3f1, ABISELECT(24,16), "S4800C3.s4800c3f1");
    check_field_offset(lv, s4800c3f2, ABISELECT(32,24), "S4800C3.s4800c3f2");
    test_class_info(&lv, &cd_S4800C3);
    dp->~S4800C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4800C3(Test_S4800C3, "S4800C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4800C3C1Ev();
extern void _ZN7S4800C3D1Ev();
Name_Map name_map_S4800C3[] = {
  NSPAIR(_ZN7S4800C3C1Ev),
  NSPAIR(_ZN7S4800C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4800C3[];
extern void _ZN7S4800C3D1Ev();
extern void _ZN7S4800C3D0Ev();
extern void _ZN7S4800C32v3Ev();
extern void _ZN7S4800C32v4Ev();
extern void _ZN7S4800C32v5Ev();
static  VTBL_ENTRY vtc_S4800C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4800C3[0]),
  (VTBL_ENTRY)&_ZN7S4800C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4800C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4800C3[];
extern  VTBL_ENTRY _ZTV7S4800C3[];
Class_Descriptor cd_S4800C3 = {  "S4800C3", // class name
  0,0,//no base classes
  &(vtc_S4800C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4800C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4800C3),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  S4800C2  : S4800C3 {
  void *s4800c2f0;
  virtual void  v6(); // _ZN7S4800C22v6Ev
  virtual void  v7(); // _ZN7S4800C22v7Ev
  ~S4800C2(); // tgen
  S4800C2(); // tgen
};
//SIG(-1 S4800C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4800C2 ::v6(){vfunc_called(this, "_ZN7S4800C22v6Ev");}
void  S4800C2 ::v7(){vfunc_called(this, "_ZN7S4800C22v7Ev");}
S4800C2 ::~S4800C2(){ note_dtor("S4800C2", this);} // tgen
S4800C2 ::S4800C2(){ note_ctor("S4800C2", this);} // tgen

static void Test_S4800C2()
{
  extern Class_Descriptor cd_S4800C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4800C2, buf);
    S4800C2 *dp, &lv = *(dp=new (buf) S4800C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4800C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4800C2)");
    check_base_class_offset(lv, (S4800C3*), 0, "S4800C2");
    check_field_offset(lv, s4800c2f0, ABISELECT(40,28), "S4800C2.s4800c2f0");
    test_class_info(&lv, &cd_S4800C2);
    dp->~S4800C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4800C2(Test_S4800C2, "S4800C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4800C2C1Ev();
extern void _ZN7S4800C2D1Ev();
Name_Map name_map_S4800C2[] = {
  NSPAIR(_ZN7S4800C2C1Ev),
  NSPAIR(_ZN7S4800C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4800C3;
extern VTBL_ENTRY _ZTI7S4800C3[];
extern  VTBL_ENTRY _ZTV7S4800C3[];
static Base_Class bases_S4800C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4800C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4800C2[];
extern void _ZN7S4800C2D1Ev();
extern void _ZN7S4800C2D0Ev();
extern void _ZN7S4800C32v3Ev();
extern void _ZN7S4800C32v4Ev();
extern void _ZN7S4800C32v5Ev();
extern void _ZN7S4800C22v6Ev();
extern void _ZN7S4800C22v7Ev();
static  VTBL_ENTRY vtc_S4800C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4800C2[0]),
  (VTBL_ENTRY)&_ZN7S4800C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4800C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4800C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4800C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4800C2[];
extern  VTBL_ENTRY _ZTV7S4800C2[];
Class_Descriptor cd_S4800C2 = {  "S4800C2", // class name
  bases_S4800C2, 1,
  &(vtc_S4800C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4800C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4800C2),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  S4800C1  : S4800C2 {
  void *s4800c1f0[2];
  int s4800c1f1[3];
  virtual  ~S4800C1(); // _ZN7S4800C1D1Ev
  virtual void  v1(); // _ZN7S4800C12v1Ev
  virtual void  v2(); // _ZN7S4800C12v2Ev
  S4800C1(); // tgen
};
//SIG(1 S4800C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 Fp[2] Fi[3]}


 S4800C1 ::~S4800C1(){ note_dtor("S4800C1", this);}
void  S4800C1 ::v1(){vfunc_called(this, "_ZN7S4800C12v1Ev");}
void  S4800C1 ::v2(){vfunc_called(this, "_ZN7S4800C12v2Ev");}
S4800C1 ::S4800C1(){ note_ctor("S4800C1", this);} // tgen

static void Test_S4800C1()
{
  extern Class_Descriptor cd_S4800C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S4800C1, buf);
    S4800C1 *dp, &lv = *(dp=new (buf) S4800C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S4800C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4800C1)");
    check_base_class_offset(lv, (S4800C3*)(S4800C2*), 0, "S4800C1");
    check_base_class_offset(lv, (S4800C2*), 0, "S4800C1");
    check_field_offset(lv, s4800c1f0, ABISELECT(48,32), "S4800C1.s4800c1f0");
    check_field_offset(lv, s4800c1f1, ABISELECT(64,40), "S4800C1.s4800c1f1");
    test_class_info(&lv, &cd_S4800C1);
    dp->~S4800C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4800C1(Test_S4800C1, "S4800C1", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S4800C1C1Ev();
extern void _ZN7S4800C1D1Ev();
Name_Map name_map_S4800C1[] = {
  NSPAIR(_ZN7S4800C1C1Ev),
  NSPAIR(_ZN7S4800C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4800C3;
extern VTBL_ENTRY _ZTI7S4800C3[];
extern  VTBL_ENTRY _ZTV7S4800C3[];
extern Class_Descriptor cd_S4800C2;
extern VTBL_ENTRY _ZTI7S4800C2[];
extern  VTBL_ENTRY _ZTV7S4800C2[];
static Base_Class bases_S4800C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4800C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4800C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4800C1[];
extern void _ZN7S4800C1D1Ev();
extern void _ZN7S4800C1D0Ev();
extern void _ZN7S4800C32v3Ev();
extern void _ZN7S4800C32v4Ev();
extern void _ZN7S4800C32v5Ev();
extern void _ZN7S4800C22v6Ev();
extern void _ZN7S4800C22v7Ev();
extern void _ZN7S4800C12v1Ev();
extern void _ZN7S4800C12v2Ev();
static  VTBL_ENTRY vtc_S4800C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4800C1[0]),
  (VTBL_ENTRY)&_ZN7S4800C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4800C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4800C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4800C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4800C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4800C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4800C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4800C1[];
extern  VTBL_ENTRY _ZTV7S4800C1[];
Class_Descriptor cd_S4800C1 = {  "S4800C1", // class name
  bases_S4800C1, 2,
  &(vtc_S4800C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S4800C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4800C1),11, //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  S4370C3  {
  ::S4473C12_nt s4370c3f0;
  int s4370c3f1[2];
  char s4370c3f2;
  virtual  ~S4370C3(); // _ZN7S4370C3D1Ev
  virtual void  v2(); // _ZN7S4370C32v2Ev
  virtual void  v3(); // _ZN7S4370C32v3Ev
  virtual void  v4(); // _ZN7S4370C32v4Ev
  S4370C3(); // tgen
};
//SIG(-1 S4370C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4370C3 ::~S4370C3(){ note_dtor("S4370C3", this);}
void  S4370C3 ::v2(){vfunc_called(this, "_ZN7S4370C32v2Ev");}
void  S4370C3 ::v3(){vfunc_called(this, "_ZN7S4370C32v3Ev");}
void  S4370C3 ::v4(){vfunc_called(this, "_ZN7S4370C32v4Ev");}
S4370C3 ::S4370C3(){ note_ctor("S4370C3", this);} // tgen

static void Test_S4370C3()
{
  extern Class_Descriptor cd_S4370C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4370C3, buf);
    S4370C3 *dp, &lv = *(dp=new (buf) S4370C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4370C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4370C3)");
    check_field_offset(lv, s4370c3f0, ABISELECT(8,4), "S4370C3.s4370c3f0");
    check_field_offset(lv, s4370c3f1, ABISELECT(24,16), "S4370C3.s4370c3f1");
    check_field_offset(lv, s4370c3f2, ABISELECT(32,24), "S4370C3.s4370c3f2");
    test_class_info(&lv, &cd_S4370C3);
    dp->~S4370C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4370C3(Test_S4370C3, "S4370C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4370C3C1Ev();
extern void _ZN7S4370C3D1Ev();
Name_Map name_map_S4370C3[] = {
  NSPAIR(_ZN7S4370C3C1Ev),
  NSPAIR(_ZN7S4370C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4370C3[];
extern void _ZN7S4370C3D1Ev();
extern void _ZN7S4370C3D0Ev();
extern void _ZN7S4370C32v2Ev();
extern void _ZN7S4370C32v3Ev();
extern void _ZN7S4370C32v4Ev();
static  VTBL_ENTRY vtc_S4370C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4370C3[0]),
  (VTBL_ENTRY)&_ZN7S4370C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4370C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4370C3[];
extern  VTBL_ENTRY _ZTV7S4370C3[];
Class_Descriptor cd_S4370C3 = {  "S4370C3", // class name
  0,0,//no base classes
  &(vtc_S4370C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4370C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4370C3),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  S4370C2  : S4370C3 {
  void *s4370c2f0;
  virtual void  v5(); // _ZN7S4370C22v5Ev
  virtual void  v6(); // _ZN7S4370C22v6Ev
  ~S4370C2(); // tgen
  S4370C2(); // tgen
};
//SIG(-1 S4370C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4370C2 ::v5(){vfunc_called(this, "_ZN7S4370C22v5Ev");}
void  S4370C2 ::v6(){vfunc_called(this, "_ZN7S4370C22v6Ev");}
S4370C2 ::~S4370C2(){ note_dtor("S4370C2", this);} // tgen
S4370C2 ::S4370C2(){ note_ctor("S4370C2", this);} // tgen

static void Test_S4370C2()
{
  extern Class_Descriptor cd_S4370C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4370C2, buf);
    S4370C2 *dp, &lv = *(dp=new (buf) S4370C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4370C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4370C2)");
    check_base_class_offset(lv, (S4370C3*), 0, "S4370C2");
    check_field_offset(lv, s4370c2f0, ABISELECT(40,28), "S4370C2.s4370c2f0");
    test_class_info(&lv, &cd_S4370C2);
    dp->~S4370C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4370C2(Test_S4370C2, "S4370C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4370C2C1Ev();
extern void _ZN7S4370C2D1Ev();
Name_Map name_map_S4370C2[] = {
  NSPAIR(_ZN7S4370C2C1Ev),
  NSPAIR(_ZN7S4370C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4370C3;
extern VTBL_ENTRY _ZTI7S4370C3[];
extern  VTBL_ENTRY _ZTV7S4370C3[];
static Base_Class bases_S4370C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4370C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4370C2[];
extern void _ZN7S4370C2D1Ev();
extern void _ZN7S4370C2D0Ev();
extern void _ZN7S4370C32v2Ev();
extern void _ZN7S4370C32v3Ev();
extern void _ZN7S4370C32v4Ev();
extern void _ZN7S4370C22v5Ev();
extern void _ZN7S4370C22v6Ev();
static  VTBL_ENTRY vtc_S4370C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4370C2[0]),
  (VTBL_ENTRY)&_ZN7S4370C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4370C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4370C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4370C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4370C2[];
extern  VTBL_ENTRY _ZTV7S4370C2[];
Class_Descriptor cd_S4370C2 = {  "S4370C2", // class name
  bases_S4370C2, 1,
  &(vtc_S4370C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4370C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4370C2),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  S4370C1  : S4370C2 {
  ::S4473C12_nt s4370c1f0;
  ::S5075C8_nt s4370c1f1;
  virtual void  v1(); // _ZN7S4370C12v1Ev
  ~S4370C1(); // tgen
  S4370C1(); // tgen
};
//SIG(1 S4370C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC4 FC6{ m Fp[2]}}


void  S4370C1 ::v1(){vfunc_called(this, "_ZN7S4370C12v1Ev");}
S4370C1 ::~S4370C1(){ note_dtor("S4370C1", this);} // tgen
S4370C1 ::S4370C1(){ note_ctor("S4370C1", this);} // tgen

static void Test_S4370C1()
{
  extern Class_Descriptor cd_S4370C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S4370C1, buf);
    S4370C1 *dp, &lv = *(dp=new (buf) S4370C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S4370C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4370C1)");
    check_base_class_offset(lv, (S4370C3*)(S4370C2*), 0, "S4370C1");
    check_base_class_offset(lv, (S4370C2*), 0, "S4370C1");
    check_field_offset(lv, s4370c1f0, ABISELECT(48,32), "S4370C1.s4370c1f0");
    check_field_offset(lv, s4370c1f1, ABISELECT(64,44), "S4370C1.s4370c1f1");
    test_class_info(&lv, &cd_S4370C1);
    dp->~S4370C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4370C1(Test_S4370C1, "S4370C1", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S4370C1C1Ev();
extern void _ZN7S4370C1D1Ev();
Name_Map name_map_S4370C1[] = {
  NSPAIR(_ZN7S4370C1C1Ev),
  NSPAIR(_ZN7S4370C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4370C3;
extern VTBL_ENTRY _ZTI7S4370C3[];
extern  VTBL_ENTRY _ZTV7S4370C3[];
extern Class_Descriptor cd_S4370C2;
extern VTBL_ENTRY _ZTI7S4370C2[];
extern  VTBL_ENTRY _ZTV7S4370C2[];
static Base_Class bases_S4370C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4370C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4370C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4370C1[];
extern void _ZN7S4370C1D1Ev();
extern void _ZN7S4370C1D0Ev();
extern void _ZN7S4370C32v2Ev();
extern void _ZN7S4370C32v3Ev();
extern void _ZN7S4370C32v4Ev();
extern void _ZN7S4370C22v5Ev();
extern void _ZN7S4370C22v6Ev();
extern void _ZN7S4370C12v1Ev();
static  VTBL_ENTRY vtc_S4370C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4370C1[0]),
  (VTBL_ENTRY)&_ZN7S4370C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4370C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4370C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4370C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4370C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4370C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4370C1[];
extern  VTBL_ENTRY _ZTV7S4370C1[];
Class_Descriptor cd_S4370C1 = {  "S4370C1", // class name
  bases_S4370C1, 2,
  &(vtc_S4370C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S4370C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4370C1),10, //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  S4779C3  {
  ::S4473C12_nt s4779c3f0;
  int s4779c3f1[2];
  char s4779c3f2;
  virtual  ~S4779C3(); // _ZN7S4779C3D1Ev
  virtual void  v3(); // _ZN7S4779C32v3Ev
  virtual void  v4(); // _ZN7S4779C32v4Ev
  virtual void  v5(); // _ZN7S4779C32v5Ev
  S4779C3(); // tgen
};
//SIG(-1 S4779C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4779C3 ::~S4779C3(){ note_dtor("S4779C3", this);}
void  S4779C3 ::v3(){vfunc_called(this, "_ZN7S4779C32v3Ev");}
void  S4779C3 ::v4(){vfunc_called(this, "_ZN7S4779C32v4Ev");}
void  S4779C3 ::v5(){vfunc_called(this, "_ZN7S4779C32v5Ev");}
S4779C3 ::S4779C3(){ note_ctor("S4779C3", this);} // tgen

static void Test_S4779C3()
{
  extern Class_Descriptor cd_S4779C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4779C3, buf);
    S4779C3 *dp, &lv = *(dp=new (buf) S4779C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4779C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4779C3)");
    check_field_offset(lv, s4779c3f0, ABISELECT(8,4), "S4779C3.s4779c3f0");
    check_field_offset(lv, s4779c3f1, ABISELECT(24,16), "S4779C3.s4779c3f1");
    check_field_offset(lv, s4779c3f2, ABISELECT(32,24), "S4779C3.s4779c3f2");
    test_class_info(&lv, &cd_S4779C3);
    dp->~S4779C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4779C3(Test_S4779C3, "S4779C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4779C3C1Ev();
extern void _ZN7S4779C3D1Ev();
Name_Map name_map_S4779C3[] = {
  NSPAIR(_ZN7S4779C3C1Ev),
  NSPAIR(_ZN7S4779C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4779C3[];
extern void _ZN7S4779C3D1Ev();
extern void _ZN7S4779C3D0Ev();
extern void _ZN7S4779C32v3Ev();
extern void _ZN7S4779C32v4Ev();
extern void _ZN7S4779C32v5Ev();
static  VTBL_ENTRY vtc_S4779C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4779C3[0]),
  (VTBL_ENTRY)&_ZN7S4779C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4779C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4779C3[];
extern  VTBL_ENTRY _ZTV7S4779C3[];
Class_Descriptor cd_S4779C3 = {  "S4779C3", // class name
  0,0,//no base classes
  &(vtc_S4779C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4779C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4779C3),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  S4779C2  : S4779C3 {
  void *s4779c2f0;
  virtual void  v6(); // _ZN7S4779C22v6Ev
  virtual void  v7(); // _ZN7S4779C22v7Ev
  ~S4779C2(); // tgen
  S4779C2(); // tgen
};
//SIG(-1 S4779C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4779C2 ::v6(){vfunc_called(this, "_ZN7S4779C22v6Ev");}
void  S4779C2 ::v7(){vfunc_called(this, "_ZN7S4779C22v7Ev");}
S4779C2 ::~S4779C2(){ note_dtor("S4779C2", this);} // tgen
S4779C2 ::S4779C2(){ note_ctor("S4779C2", this);} // tgen

static void Test_S4779C2()
{
  extern Class_Descriptor cd_S4779C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4779C2, buf);
    S4779C2 *dp, &lv = *(dp=new (buf) S4779C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4779C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4779C2)");
    check_base_class_offset(lv, (S4779C3*), 0, "S4779C2");
    check_field_offset(lv, s4779c2f0, ABISELECT(40,28), "S4779C2.s4779c2f0");
    test_class_info(&lv, &cd_S4779C2);
    dp->~S4779C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4779C2(Test_S4779C2, "S4779C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4779C2C1Ev();
extern void _ZN7S4779C2D1Ev();
Name_Map name_map_S4779C2[] = {
  NSPAIR(_ZN7S4779C2C1Ev),
  NSPAIR(_ZN7S4779C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4779C3;
extern VTBL_ENTRY _ZTI7S4779C3[];
extern  VTBL_ENTRY _ZTV7S4779C3[];
static Base_Class bases_S4779C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4779C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4779C2[];
extern void _ZN7S4779C2D1Ev();
extern void _ZN7S4779C2D0Ev();
extern void _ZN7S4779C32v3Ev();
extern void _ZN7S4779C32v4Ev();
extern void _ZN7S4779C32v5Ev();
extern void _ZN7S4779C22v6Ev();
extern void _ZN7S4779C22v7Ev();
static  VTBL_ENTRY vtc_S4779C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4779C2[0]),
  (VTBL_ENTRY)&_ZN7S4779C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4779C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4779C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4779C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4779C2[];
extern  VTBL_ENTRY _ZTV7S4779C2[];
Class_Descriptor cd_S4779C2 = {  "S4779C2", // class name
  bases_S4779C2, 1,
  &(vtc_S4779C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4779C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4779C2),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  S4779C1  : S4779C2 {
  ::S2366C19 s4779c1f0;
  virtual  ~S4779C1(); // _ZN7S4779C1D1Ev
  virtual void  v1(); // _ZN7S4779C12v1Ev
  virtual void  v2(); // _ZN7S4779C12v2Ev
  S4779C1(); // tgen
};
//SIG(1 S4779C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ m Fp}}


 S4779C1 ::~S4779C1(){ note_dtor("S4779C1", this);}
void  S4779C1 ::v1(){vfunc_called(this, "_ZN7S4779C12v1Ev");}
void  S4779C1 ::v2(){vfunc_called(this, "_ZN7S4779C12v2Ev");}
S4779C1 ::S4779C1(){ note_ctor("S4779C1", this);} // tgen

static void Test_S4779C1()
{
  extern Class_Descriptor cd_S4779C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4779C1, buf);
    S4779C1 *dp, &lv = *(dp=new (buf) S4779C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4779C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4779C1)");
    check_base_class_offset(lv, (S4779C3*)(S4779C2*), 0, "S4779C1");
    check_base_class_offset(lv, (S4779C2*), 0, "S4779C1");
    check_field_offset(lv, s4779c1f0, ABISELECT(48,32), "S4779C1.s4779c1f0");
    test_class_info(&lv, &cd_S4779C1);
    dp->~S4779C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4779C1(Test_S4779C1, "S4779C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4779C1C1Ev();
extern void _ZN7S4779C1D1Ev();
Name_Map name_map_S4779C1[] = {
  NSPAIR(_ZN7S4779C1C1Ev),
  NSPAIR(_ZN7S4779C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4779C3;
extern VTBL_ENTRY _ZTI7S4779C3[];
extern  VTBL_ENTRY _ZTV7S4779C3[];
extern Class_Descriptor cd_S4779C2;
extern VTBL_ENTRY _ZTI7S4779C2[];
extern  VTBL_ENTRY _ZTV7S4779C2[];
static Base_Class bases_S4779C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4779C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4779C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4779C1[];
extern void _ZN7S4779C1D1Ev();
extern void _ZN7S4779C1D0Ev();
extern void _ZN7S4779C32v3Ev();
extern void _ZN7S4779C32v4Ev();
extern void _ZN7S4779C32v5Ev();
extern void _ZN7S4779C22v6Ev();
extern void _ZN7S4779C22v7Ev();
extern void _ZN7S4779C12v1Ev();
extern void _ZN7S4779C12v2Ev();
static  VTBL_ENTRY vtc_S4779C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4779C1[0]),
  (VTBL_ENTRY)&_ZN7S4779C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4779C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4779C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4779C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4779C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4779C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4779C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4779C1[];
extern  VTBL_ENTRY _ZTV7S4779C1[];
Class_Descriptor cd_S4779C1 = {  "S4779C1", // class name
  bases_S4779C1, 2,
  &(vtc_S4779C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4779C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4779C1),11, //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  S5077C3  {
  ::S4473C12_nt s5077c3f0;
  int s5077c3f1[2];
  char s5077c3f2;
  virtual  ~S5077C3(); // _ZN7S5077C3D1Ev
  virtual void  v4(); // _ZN7S5077C32v4Ev
  virtual void  v5(); // _ZN7S5077C32v5Ev
  virtual void  v6(); // _ZN7S5077C32v6Ev
  S5077C3(); // tgen
};
//SIG(-1 S5077C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5077C3 ::~S5077C3(){ note_dtor("S5077C3", this);}
void  S5077C3 ::v4(){vfunc_called(this, "_ZN7S5077C32v4Ev");}
void  S5077C3 ::v5(){vfunc_called(this, "_ZN7S5077C32v5Ev");}
void  S5077C3 ::v6(){vfunc_called(this, "_ZN7S5077C32v6Ev");}
S5077C3 ::S5077C3(){ note_ctor("S5077C3", this);} // tgen

static void Test_S5077C3()
{
  extern Class_Descriptor cd_S5077C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5077C3, buf);
    S5077C3 *dp, &lv = *(dp=new (buf) S5077C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5077C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5077C3)");
    check_field_offset(lv, s5077c3f0, ABISELECT(8,4), "S5077C3.s5077c3f0");
    check_field_offset(lv, s5077c3f1, ABISELECT(24,16), "S5077C3.s5077c3f1");
    check_field_offset(lv, s5077c3f2, ABISELECT(32,24), "S5077C3.s5077c3f2");
    test_class_info(&lv, &cd_S5077C3);
    dp->~S5077C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5077C3(Test_S5077C3, "S5077C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5077C3C1Ev();
extern void _ZN7S5077C3D1Ev();
Name_Map name_map_S5077C3[] = {
  NSPAIR(_ZN7S5077C3C1Ev),
  NSPAIR(_ZN7S5077C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5077C3[];
extern void _ZN7S5077C3D1Ev();
extern void _ZN7S5077C3D0Ev();
extern void _ZN7S5077C32v4Ev();
extern void _ZN7S5077C32v5Ev();
extern void _ZN7S5077C32v6Ev();
static  VTBL_ENTRY vtc_S5077C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5077C3[0]),
  (VTBL_ENTRY)&_ZN7S5077C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5077C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5077C3[];
extern  VTBL_ENTRY _ZTV7S5077C3[];
Class_Descriptor cd_S5077C3 = {  "S5077C3", // class name
  0,0,//no base classes
  &(vtc_S5077C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5077C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5077C3),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  S5077C2  : S5077C3 {
  void *s5077c2f0;
  virtual void  v7(); // _ZN7S5077C22v7Ev
  virtual void  v8(); // _ZN7S5077C22v8Ev
  ~S5077C2(); // tgen
  S5077C2(); // tgen
};
//SIG(-1 S5077C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5077C2 ::v7(){vfunc_called(this, "_ZN7S5077C22v7Ev");}
void  S5077C2 ::v8(){vfunc_called(this, "_ZN7S5077C22v8Ev");}
S5077C2 ::~S5077C2(){ note_dtor("S5077C2", this);} // tgen
S5077C2 ::S5077C2(){ note_ctor("S5077C2", this);} // tgen

static void Test_S5077C2()
{
  extern Class_Descriptor cd_S5077C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5077C2, buf);
    S5077C2 *dp, &lv = *(dp=new (buf) S5077C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5077C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5077C2)");
    check_base_class_offset(lv, (S5077C3*), 0, "S5077C2");
    check_field_offset(lv, s5077c2f0, ABISELECT(40,28), "S5077C2.s5077c2f0");
    test_class_info(&lv, &cd_S5077C2);
    dp->~S5077C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5077C2(Test_S5077C2, "S5077C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5077C2C1Ev();
extern void _ZN7S5077C2D1Ev();
Name_Map name_map_S5077C2[] = {
  NSPAIR(_ZN7S5077C2C1Ev),
  NSPAIR(_ZN7S5077C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5077C3;
extern VTBL_ENTRY _ZTI7S5077C3[];
extern  VTBL_ENTRY _ZTV7S5077C3[];
static Base_Class bases_S5077C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5077C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S5077C2[];
extern void _ZN7S5077C2D1Ev();
extern void _ZN7S5077C2D0Ev();
extern void _ZN7S5077C32v4Ev();
extern void _ZN7S5077C32v5Ev();
extern void _ZN7S5077C32v6Ev();
extern void _ZN7S5077C22v7Ev();
extern void _ZN7S5077C22v8Ev();
static  VTBL_ENTRY vtc_S5077C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5077C2[0]),
  (VTBL_ENTRY)&_ZN7S5077C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5077C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5077C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5077C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5077C2[];
extern  VTBL_ENTRY _ZTV7S5077C2[];
Class_Descriptor cd_S5077C2 = {  "S5077C2", // class name
  bases_S5077C2, 1,
  &(vtc_S5077C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5077C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5077C2),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  S5077C1  : S5077C2 {
  ::S4473C12_nt s5077c1f0;
  virtual  ~S5077C1(); // _ZN7S5077C1D1Ev
  virtual void  v1(); // _ZN7S5077C12v1Ev
  virtual void  v2(); // _ZN7S5077C12v2Ev
  virtual void  v3(); // _ZN7S5077C12v3Ev
  S5077C1(); // tgen
};
//SIG(1 S5077C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 FC4}


 S5077C1 ::~S5077C1(){ note_dtor("S5077C1", this);}
void  S5077C1 ::v1(){vfunc_called(this, "_ZN7S5077C12v1Ev");}
void  S5077C1 ::v2(){vfunc_called(this, "_ZN7S5077C12v2Ev");}
void  S5077C1 ::v3(){vfunc_called(this, "_ZN7S5077C12v3Ev");}
S5077C1 ::S5077C1(){ note_ctor("S5077C1", this);} // tgen

static void Test_S5077C1()
{
  extern Class_Descriptor cd_S5077C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S5077C1, buf);
    S5077C1 *dp, &lv = *(dp=new (buf) S5077C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S5077C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5077C1)");
    check_base_class_offset(lv, (S5077C3*)(S5077C2*), 0, "S5077C1");
    check_base_class_offset(lv, (S5077C2*), 0, "S5077C1");
    check_field_offset(lv, s5077c1f0, ABISELECT(48,32), "S5077C1.s5077c1f0");
    test_class_info(&lv, &cd_S5077C1);
    dp->~S5077C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5077C1(Test_S5077C1, "S5077C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S5077C1C1Ev();
extern void _ZN7S5077C1D1Ev();
Name_Map name_map_S5077C1[] = {
  NSPAIR(_ZN7S5077C1C1Ev),
  NSPAIR(_ZN7S5077C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5077C3;
extern VTBL_ENTRY _ZTI7S5077C3[];
extern  VTBL_ENTRY _ZTV7S5077C3[];
extern Class_Descriptor cd_S5077C2;
extern VTBL_ENTRY _ZTI7S5077C2[];
extern  VTBL_ENTRY _ZTV7S5077C2[];
static Base_Class bases_S5077C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5077C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S5077C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5077C1[];
extern void _ZN7S5077C1D1Ev();
extern void _ZN7S5077C1D0Ev();
extern void _ZN7S5077C32v4Ev();
extern void _ZN7S5077C32v5Ev();
extern void _ZN7S5077C32v6Ev();
extern void _ZN7S5077C22v7Ev();
extern void _ZN7S5077C22v8Ev();
extern void _ZN7S5077C12v1Ev();
extern void _ZN7S5077C12v2Ev();
extern void _ZN7S5077C12v3Ev();
static  VTBL_ENTRY vtc_S5077C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5077C1[0]),
  (VTBL_ENTRY)&_ZN7S5077C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5077C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5077C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5077C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5077C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5077C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5077C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5077C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5077C1[];
extern  VTBL_ENTRY _ZTV7S5077C1[];
Class_Descriptor cd_S5077C1 = {  "S5077C1", // class name
  bases_S5077C1, 2,
  &(vtc_S5077C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S5077C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5077C1),12, //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  S2179C4  {
  ::S4473C12_nt s2179c4f0;
  int s2179c4f1[2];
  char s2179c4f2;
  virtual  ~S2179C4(); // _ZN7S2179C4D1Ev
  virtual void  v3(); // _ZN7S2179C42v3Ev
  virtual void  v4(); // _ZN7S2179C42v4Ev
  virtual void  v5(); // _ZN7S2179C42v5Ev
  S2179C4(); // tgen
};
//SIG(-1 S2179C4) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2179C4 ::~S2179C4(){ note_dtor("S2179C4", this);}
void  S2179C4 ::v3(){vfunc_called(this, "_ZN7S2179C42v3Ev");}
void  S2179C4 ::v4(){vfunc_called(this, "_ZN7S2179C42v4Ev");}
void  S2179C4 ::v5(){vfunc_called(this, "_ZN7S2179C42v5Ev");}
S2179C4 ::S2179C4(){ note_ctor("S2179C4", this);} // tgen

static void Test_S2179C4()
{
  extern Class_Descriptor cd_S2179C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S2179C4, buf);
    S2179C4 *dp, &lv = *(dp=new (buf) S2179C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2179C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2179C4)");
    check_field_offset(lv, s2179c4f0, ABISELECT(8,4), "S2179C4.s2179c4f0");
    check_field_offset(lv, s2179c4f1, ABISELECT(24,16), "S2179C4.s2179c4f1");
    check_field_offset(lv, s2179c4f2, ABISELECT(32,24), "S2179C4.s2179c4f2");
    test_class_info(&lv, &cd_S2179C4);
    dp->~S2179C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2179C4(Test_S2179C4, "S2179C4", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S2179C4C1Ev();
extern void _ZN7S2179C4D1Ev();
Name_Map name_map_S2179C4[] = {
  NSPAIR(_ZN7S2179C4C1Ev),
  NSPAIR(_ZN7S2179C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2179C4[];
extern void _ZN7S2179C4D1Ev();
extern void _ZN7S2179C4D0Ev();
extern void _ZN7S2179C42v3Ev();
extern void _ZN7S2179C42v4Ev();
extern void _ZN7S2179C42v5Ev();
static  VTBL_ENTRY vtc_S2179C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2179C4[0]),
  (VTBL_ENTRY)&_ZN7S2179C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2179C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S2179C4[];
extern  VTBL_ENTRY _ZTV7S2179C4[];
Class_Descriptor cd_S2179C4 = {  "S2179C4", // class name
  0,0,//no base classes
  &(vtc_S2179C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S2179C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2179C4),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  S2179C3  : S2179C4 {
  void *s2179c3f0;
  virtual void  v6(); // _ZN7S2179C32v6Ev
  virtual void  v7(); // _ZN7S2179C32v7Ev
  ~S2179C3(); // tgen
  S2179C3(); // tgen
};
//SIG(-1 S2179C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2179C3 ::v6(){vfunc_called(this, "_ZN7S2179C32v6Ev");}
void  S2179C3 ::v7(){vfunc_called(this, "_ZN7S2179C32v7Ev");}
S2179C3 ::~S2179C3(){ note_dtor("S2179C3", this);} // tgen
S2179C3 ::S2179C3(){ note_ctor("S2179C3", this);} // tgen

static void Test_S2179C3()
{
  extern Class_Descriptor cd_S2179C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2179C3, buf);
    S2179C3 *dp, &lv = *(dp=new (buf) S2179C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2179C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2179C3)");
    check_base_class_offset(lv, (S2179C4*), 0, "S2179C3");
    check_field_offset(lv, s2179c3f0, ABISELECT(40,28), "S2179C3.s2179c3f0");
    test_class_info(&lv, &cd_S2179C3);
    dp->~S2179C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2179C3(Test_S2179C3, "S2179C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2179C3C1Ev();
extern void _ZN7S2179C3D1Ev();
Name_Map name_map_S2179C3[] = {
  NSPAIR(_ZN7S2179C3C1Ev),
  NSPAIR(_ZN7S2179C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2179C4;
extern VTBL_ENTRY _ZTI7S2179C4[];
extern  VTBL_ENTRY _ZTV7S2179C4[];
static Base_Class bases_S2179C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2179C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2179C3[];
extern void _ZN7S2179C3D1Ev();
extern void _ZN7S2179C3D0Ev();
extern void _ZN7S2179C42v3Ev();
extern void _ZN7S2179C42v4Ev();
extern void _ZN7S2179C42v5Ev();
extern void _ZN7S2179C32v6Ev();
extern void _ZN7S2179C32v7Ev();
static  VTBL_ENTRY vtc_S2179C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2179C3[0]),
  (VTBL_ENTRY)&_ZN7S2179C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2179C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2179C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2179C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2179C3[];
extern  VTBL_ENTRY _ZTV7S2179C3[];
Class_Descriptor cd_S2179C3 = {  "S2179C3", // class name
  bases_S2179C3, 1,
  &(vtc_S2179C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2179C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2179C3),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  S2179C2  : S2179C3 {
  virtual  ~S2179C2(); // _ZN7S2179C2D1Ev
  S2179C2(); // tgen
};
//SIG(-1 S2179C2) C1{ BC2{ BC3{ vd v1 v2 v3 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v4 v5 Fp} vd}


 S2179C2 ::~S2179C2(){ note_dtor("S2179C2", this);}
S2179C2 ::S2179C2(){ note_ctor("S2179C2", this);} // tgen

static void Test_S2179C2()
{
  extern Class_Descriptor cd_S2179C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2179C2, buf);
    S2179C2 *dp, &lv = *(dp=new (buf) S2179C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2179C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2179C2)");
    check_base_class_offset(lv, (S2179C4*)(S2179C3*), 0, "S2179C2");
    check_base_class_offset(lv, (S2179C3*), 0, "S2179C2");
    test_class_info(&lv, &cd_S2179C2);
    dp->~S2179C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2179C2(Test_S2179C2, "S2179C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2179C2C1Ev();
extern void _ZN7S2179C2D1Ev();
Name_Map name_map_S2179C2[] = {
  NSPAIR(_ZN7S2179C2C1Ev),
  NSPAIR(_ZN7S2179C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2179C4;
extern VTBL_ENTRY _ZTI7S2179C4[];
extern  VTBL_ENTRY _ZTV7S2179C4[];
extern Class_Descriptor cd_S2179C3;
extern VTBL_ENTRY _ZTI7S2179C3[];
extern  VTBL_ENTRY _ZTV7S2179C3[];
static Base_Class bases_S2179C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2179C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2179C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2179C2[];
extern void _ZN7S2179C2D1Ev();
extern void _ZN7S2179C2D0Ev();
extern void _ZN7S2179C42v3Ev();
extern void _ZN7S2179C42v4Ev();
extern void _ZN7S2179C42v5Ev();
extern void _ZN7S2179C32v6Ev();
extern void _ZN7S2179C32v7Ev();
static  VTBL_ENTRY vtc_S2179C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2179C2[0]),
  (VTBL_ENTRY)&_ZN7S2179C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2179C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2179C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2179C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S2179C2[];
extern  VTBL_ENTRY _ZTV7S2179C2[];
Class_Descriptor cd_S2179C2 = {  "S2179C2", // class name
  bases_S2179C2, 2,
  &(vtc_S2179C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2179C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2179C2),9, //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  S2179C1  : S2179C2 {
  virtual  ~S2179C1(); // _ZN7S2179C1D1Ev
  virtual void  v1(); // _ZN7S2179C12v1Ev
  virtual void  v2(); // _ZN7S2179C12v2Ev
  S2179C1(); // tgen
};
//SIG(1 S2179C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v6 v7 Fp} vd} vd v1 v2}


 S2179C1 ::~S2179C1(){ note_dtor("S2179C1", this);}
void  S2179C1 ::v1(){vfunc_called(this, "_ZN7S2179C12v1Ev");}
void  S2179C1 ::v2(){vfunc_called(this, "_ZN7S2179C12v2Ev");}
S2179C1 ::S2179C1(){ note_ctor("S2179C1", this);} // tgen

static void Test_S2179C1()
{
  extern Class_Descriptor cd_S2179C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2179C1, buf);
    S2179C1 *dp, &lv = *(dp=new (buf) S2179C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2179C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2179C1)");
    check_base_class_offset(lv, (S2179C4*)(S2179C3*)(S2179C2*), 0, "S2179C1");
    check_base_class_offset(lv, (S2179C3*)(S2179C2*), 0, "S2179C1");
    check_base_class_offset(lv, (S2179C2*), 0, "S2179C1");
    test_class_info(&lv, &cd_S2179C1);
    dp->~S2179C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2179C1(Test_S2179C1, "S2179C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2179C1C1Ev();
extern void _ZN7S2179C1D1Ev();
Name_Map name_map_S2179C1[] = {
  NSPAIR(_ZN7S2179C1C1Ev),
  NSPAIR(_ZN7S2179C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2179C4;
extern VTBL_ENTRY _ZTI7S2179C4[];
extern  VTBL_ENTRY _ZTV7S2179C4[];
extern Class_Descriptor cd_S2179C3;
extern VTBL_ENTRY _ZTI7S2179C3[];
extern  VTBL_ENTRY _ZTV7S2179C3[];
extern Class_Descriptor cd_S2179C2;
extern VTBL_ENTRY _ZTI7S2179C2[];
extern  VTBL_ENTRY _ZTV7S2179C2[];
static Base_Class bases_S2179C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2179C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2179C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2179C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2179C1[];
extern void _ZN7S2179C1D1Ev();
extern void _ZN7S2179C1D0Ev();
extern void _ZN7S2179C42v3Ev();
extern void _ZN7S2179C42v4Ev();
extern void _ZN7S2179C42v5Ev();
extern void _ZN7S2179C32v6Ev();
extern void _ZN7S2179C32v7Ev();
extern void _ZN7S2179C12v1Ev();
extern void _ZN7S2179C12v2Ev();
static  VTBL_ENTRY vtc_S2179C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2179C1[0]),
  (VTBL_ENTRY)&_ZN7S2179C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2179C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v3Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2179C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2179C32v6Ev,
  (VTBL_ENTRY)&_ZN7S2179C32v7Ev,
  (VTBL_ENTRY)&_ZN7S2179C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2179C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S2179C1[];
extern  VTBL_ENTRY _ZTV7S2179C1[];
Class_Descriptor cd_S2179C1 = {  "S2179C1", // class name
  bases_S2179C1, 3,
  &(vtc_S2179C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2179C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2179C1),11, //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  S4802C3  {
  ::S4473C12_nt s4802c3f0;
  int s4802c3f1[2];
  char s4802c3f2;
  virtual  ~S4802C3(); // _ZN7S4802C3D1Ev
  virtual void  v3(); // _ZN7S4802C32v3Ev
  virtual void  v4(); // _ZN7S4802C32v4Ev
  virtual void  v5(); // _ZN7S4802C32v5Ev
  S4802C3(); // tgen
};
//SIG(-1 S4802C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4802C3 ::~S4802C3(){ note_dtor("S4802C3", this);}
void  S4802C3 ::v3(){vfunc_called(this, "_ZN7S4802C32v3Ev");}
void  S4802C3 ::v4(){vfunc_called(this, "_ZN7S4802C32v4Ev");}
void  S4802C3 ::v5(){vfunc_called(this, "_ZN7S4802C32v5Ev");}
S4802C3 ::S4802C3(){ note_ctor("S4802C3", this);} // tgen

static void Test_S4802C3()
{
  extern Class_Descriptor cd_S4802C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4802C3, buf);
    S4802C3 *dp, &lv = *(dp=new (buf) S4802C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4802C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4802C3)");
    check_field_offset(lv, s4802c3f0, ABISELECT(8,4), "S4802C3.s4802c3f0");
    check_field_offset(lv, s4802c3f1, ABISELECT(24,16), "S4802C3.s4802c3f1");
    check_field_offset(lv, s4802c3f2, ABISELECT(32,24), "S4802C3.s4802c3f2");
    test_class_info(&lv, &cd_S4802C3);
    dp->~S4802C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4802C3(Test_S4802C3, "S4802C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4802C3C1Ev();
extern void _ZN7S4802C3D1Ev();
Name_Map name_map_S4802C3[] = {
  NSPAIR(_ZN7S4802C3C1Ev),
  NSPAIR(_ZN7S4802C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4802C3[];
extern void _ZN7S4802C3D1Ev();
extern void _ZN7S4802C3D0Ev();
extern void _ZN7S4802C32v3Ev();
extern void _ZN7S4802C32v4Ev();
extern void _ZN7S4802C32v5Ev();
static  VTBL_ENTRY vtc_S4802C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4802C3[0]),
  (VTBL_ENTRY)&_ZN7S4802C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4802C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4802C3[];
extern  VTBL_ENTRY _ZTV7S4802C3[];
Class_Descriptor cd_S4802C3 = {  "S4802C3", // class name
  0,0,//no base classes
  &(vtc_S4802C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4802C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4802C3),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  S4802C2  : S4802C3 {
  void *s4802c2f0;
  virtual void  v6(); // _ZN7S4802C22v6Ev
  virtual void  v7(); // _ZN7S4802C22v7Ev
  ~S4802C2(); // tgen
  S4802C2(); // tgen
};
//SIG(-1 S4802C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4802C2 ::v6(){vfunc_called(this, "_ZN7S4802C22v6Ev");}
void  S4802C2 ::v7(){vfunc_called(this, "_ZN7S4802C22v7Ev");}
S4802C2 ::~S4802C2(){ note_dtor("S4802C2", this);} // tgen
S4802C2 ::S4802C2(){ note_ctor("S4802C2", this);} // tgen

static void Test_S4802C2()
{
  extern Class_Descriptor cd_S4802C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4802C2, buf);
    S4802C2 *dp, &lv = *(dp=new (buf) S4802C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4802C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4802C2)");
    check_base_class_offset(lv, (S4802C3*), 0, "S4802C2");
    check_field_offset(lv, s4802c2f0, ABISELECT(40,28), "S4802C2.s4802c2f0");
    test_class_info(&lv, &cd_S4802C2);
    dp->~S4802C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4802C2(Test_S4802C2, "S4802C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4802C2C1Ev();
extern void _ZN7S4802C2D1Ev();
Name_Map name_map_S4802C2[] = {
  NSPAIR(_ZN7S4802C2C1Ev),
  NSPAIR(_ZN7S4802C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4802C3;
extern VTBL_ENTRY _ZTI7S4802C3[];
extern  VTBL_ENTRY _ZTV7S4802C3[];
static Base_Class bases_S4802C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4802C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4802C2[];
extern void _ZN7S4802C2D1Ev();
extern void _ZN7S4802C2D0Ev();
extern void _ZN7S4802C32v3Ev();
extern void _ZN7S4802C32v4Ev();
extern void _ZN7S4802C32v5Ev();
extern void _ZN7S4802C22v6Ev();
extern void _ZN7S4802C22v7Ev();
static  VTBL_ENTRY vtc_S4802C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4802C2[0]),
  (VTBL_ENTRY)&_ZN7S4802C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4802C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4802C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4802C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4802C2[];
extern  VTBL_ENTRY _ZTV7S4802C2[];
Class_Descriptor cd_S4802C2 = {  "S4802C2", // class name
  bases_S4802C2, 1,
  &(vtc_S4802C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4802C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4802C2),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  S4802C1  : S4802C2 {
  void *s4802c1f0[2];
  virtual  ~S4802C1(); // _ZN7S4802C1D1Ev
  virtual void  v1(); // _ZN7S4802C12v1Ev
  virtual void  v2(); // _ZN7S4802C12v2Ev
  S4802C1(); // tgen
};
//SIG(1 S4802C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 Fp[2]}


 S4802C1 ::~S4802C1(){ note_dtor("S4802C1", this);}
void  S4802C1 ::v1(){vfunc_called(this, "_ZN7S4802C12v1Ev");}
void  S4802C1 ::v2(){vfunc_called(this, "_ZN7S4802C12v2Ev");}
S4802C1 ::S4802C1(){ note_ctor("S4802C1", this);} // tgen

static void Test_S4802C1()
{
  extern Class_Descriptor cd_S4802C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S4802C1, buf);
    S4802C1 *dp, &lv = *(dp=new (buf) S4802C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S4802C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4802C1)");
    check_base_class_offset(lv, (S4802C3*)(S4802C2*), 0, "S4802C1");
    check_base_class_offset(lv, (S4802C2*), 0, "S4802C1");
    check_field_offset(lv, s4802c1f0, ABISELECT(48,32), "S4802C1.s4802c1f0");
    test_class_info(&lv, &cd_S4802C1);
    dp->~S4802C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4802C1(Test_S4802C1, "S4802C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S4802C1C1Ev();
extern void _ZN7S4802C1D1Ev();
Name_Map name_map_S4802C1[] = {
  NSPAIR(_ZN7S4802C1C1Ev),
  NSPAIR(_ZN7S4802C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4802C3;
extern VTBL_ENTRY _ZTI7S4802C3[];
extern  VTBL_ENTRY _ZTV7S4802C3[];
extern Class_Descriptor cd_S4802C2;
extern VTBL_ENTRY _ZTI7S4802C2[];
extern  VTBL_ENTRY _ZTV7S4802C2[];
static Base_Class bases_S4802C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4802C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4802C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4802C1[];
extern void _ZN7S4802C1D1Ev();
extern void _ZN7S4802C1D0Ev();
extern void _ZN7S4802C32v3Ev();
extern void _ZN7S4802C32v4Ev();
extern void _ZN7S4802C32v5Ev();
extern void _ZN7S4802C22v6Ev();
extern void _ZN7S4802C22v7Ev();
extern void _ZN7S4802C12v1Ev();
extern void _ZN7S4802C12v2Ev();
static  VTBL_ENTRY vtc_S4802C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4802C1[0]),
  (VTBL_ENTRY)&_ZN7S4802C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4802C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4802C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4802C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4802C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4802C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4802C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4802C1[];
extern  VTBL_ENTRY _ZTV7S4802C1[];
Class_Descriptor cd_S4802C1 = {  "S4802C1", // class name
  bases_S4802C1, 2,
  &(vtc_S4802C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S4802C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4802C1),11, //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  S4359C3  {
  ::S4473C12_nt s4359c3f0;
  int s4359c3f1[2];
  char s4359c3f2;
  virtual  ~S4359C3(); // _ZN7S4359C3D1Ev
  virtual void  v2(); // _ZN7S4359C32v2Ev
  virtual void  v3(); // _ZN7S4359C32v3Ev
  virtual void  v4(); // _ZN7S4359C32v4Ev
  S4359C3(); // tgen
};
//SIG(-1 S4359C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4359C3 ::~S4359C3(){ note_dtor("S4359C3", this);}
void  S4359C3 ::v2(){vfunc_called(this, "_ZN7S4359C32v2Ev");}
void  S4359C3 ::v3(){vfunc_called(this, "_ZN7S4359C32v3Ev");}
void  S4359C3 ::v4(){vfunc_called(this, "_ZN7S4359C32v4Ev");}
S4359C3 ::S4359C3(){ note_ctor("S4359C3", this);} // tgen

static void Test_S4359C3()
{
  extern Class_Descriptor cd_S4359C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4359C3, buf);
    S4359C3 *dp, &lv = *(dp=new (buf) S4359C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4359C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4359C3)");
    check_field_offset(lv, s4359c3f0, ABISELECT(8,4), "S4359C3.s4359c3f0");
    check_field_offset(lv, s4359c3f1, ABISELECT(24,16), "S4359C3.s4359c3f1");
    check_field_offset(lv, s4359c3f2, ABISELECT(32,24), "S4359C3.s4359c3f2");
    test_class_info(&lv, &cd_S4359C3);
    dp->~S4359C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4359C3(Test_S4359C3, "S4359C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4359C3C1Ev();
extern void _ZN7S4359C3D1Ev();
Name_Map name_map_S4359C3[] = {
  NSPAIR(_ZN7S4359C3C1Ev),
  NSPAIR(_ZN7S4359C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4359C3[];
extern void _ZN7S4359C3D1Ev();
extern void _ZN7S4359C3D0Ev();
extern void _ZN7S4359C32v2Ev();
extern void _ZN7S4359C32v3Ev();
extern void _ZN7S4359C32v4Ev();
static  VTBL_ENTRY vtc_S4359C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4359C3[0]),
  (VTBL_ENTRY)&_ZN7S4359C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4359C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4359C3[];
extern  VTBL_ENTRY _ZTV7S4359C3[];
Class_Descriptor cd_S4359C3 = {  "S4359C3", // class name
  0,0,//no base classes
  &(vtc_S4359C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4359C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4359C3),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  S4359C2  : S4359C3 {
  void *s4359c2f0;
  virtual void  v5(); // _ZN7S4359C22v5Ev
  virtual void  v6(); // _ZN7S4359C22v6Ev
  ~S4359C2(); // tgen
  S4359C2(); // tgen
};
//SIG(-1 S4359C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4359C2 ::v5(){vfunc_called(this, "_ZN7S4359C22v5Ev");}
void  S4359C2 ::v6(){vfunc_called(this, "_ZN7S4359C22v6Ev");}
S4359C2 ::~S4359C2(){ note_dtor("S4359C2", this);} // tgen
S4359C2 ::S4359C2(){ note_ctor("S4359C2", this);} // tgen

static void Test_S4359C2()
{
  extern Class_Descriptor cd_S4359C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4359C2, buf);
    S4359C2 *dp, &lv = *(dp=new (buf) S4359C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4359C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4359C2)");
    check_base_class_offset(lv, (S4359C3*), 0, "S4359C2");
    check_field_offset(lv, s4359c2f0, ABISELECT(40,28), "S4359C2.s4359c2f0");
    test_class_info(&lv, &cd_S4359C2);
    dp->~S4359C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4359C2(Test_S4359C2, "S4359C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4359C2C1Ev();
extern void _ZN7S4359C2D1Ev();
Name_Map name_map_S4359C2[] = {
  NSPAIR(_ZN7S4359C2C1Ev),
  NSPAIR(_ZN7S4359C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4359C3;
extern VTBL_ENTRY _ZTI7S4359C3[];
extern  VTBL_ENTRY _ZTV7S4359C3[];
static Base_Class bases_S4359C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4359C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4359C2[];
extern void _ZN7S4359C2D1Ev();
extern void _ZN7S4359C2D0Ev();
extern void _ZN7S4359C32v2Ev();
extern void _ZN7S4359C32v3Ev();
extern void _ZN7S4359C32v4Ev();
extern void _ZN7S4359C22v5Ev();
extern void _ZN7S4359C22v6Ev();
static  VTBL_ENTRY vtc_S4359C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4359C2[0]),
  (VTBL_ENTRY)&_ZN7S4359C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4359C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4359C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4359C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4359C2[];
extern  VTBL_ENTRY _ZTV7S4359C2[];
Class_Descriptor cd_S4359C2 = {  "S4359C2", // class name
  bases_S4359C2, 1,
  &(vtc_S4359C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4359C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4359C2),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  S4359C1  : S4359C2 {
  char s4359c1f0;
  int s4359c1f1;
  ::S4473C12_nt s4359c1f2;
  virtual void  v1(); // _ZN7S4359C12v1Ev
  ~S4359C1(); // tgen
  S4359C1(); // tgen
};
//SIG(1 S4359C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 Fc Fi FC4}


void  S4359C1 ::v1(){vfunc_called(this, "_ZN7S4359C12v1Ev");}
S4359C1 ::~S4359C1(){ note_dtor("S4359C1", this);} // tgen
S4359C1 ::S4359C1(){ note_ctor("S4359C1", this);} // tgen

static void Test_S4359C1()
{
  extern Class_Descriptor cd_S4359C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S4359C1, buf);
    S4359C1 *dp, &lv = *(dp=new (buf) S4359C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S4359C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4359C1)");
    check_base_class_offset(lv, (S4359C3*)(S4359C2*), 0, "S4359C1");
    check_base_class_offset(lv, (S4359C2*), 0, "S4359C1");
    check_field_offset(lv, s4359c1f0, ABISELECT(48,32), "S4359C1.s4359c1f0");
    check_field_offset(lv, s4359c1f1, ABISELECT(52,36), "S4359C1.s4359c1f1");
    check_field_offset(lv, s4359c1f2, ABISELECT(56,40), "S4359C1.s4359c1f2");
    test_class_info(&lv, &cd_S4359C1);
    dp->~S4359C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4359C1(Test_S4359C1, "S4359C1", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S4359C1C1Ev();
extern void _ZN7S4359C1D1Ev();
Name_Map name_map_S4359C1[] = {
  NSPAIR(_ZN7S4359C1C1Ev),
  NSPAIR(_ZN7S4359C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4359C3;
extern VTBL_ENTRY _ZTI7S4359C3[];
extern  VTBL_ENTRY _ZTV7S4359C3[];
extern Class_Descriptor cd_S4359C2;
extern VTBL_ENTRY _ZTI7S4359C2[];
extern  VTBL_ENTRY _ZTV7S4359C2[];
static Base_Class bases_S4359C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4359C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4359C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4359C1[];
extern void _ZN7S4359C1D1Ev();
extern void _ZN7S4359C1D0Ev();
extern void _ZN7S4359C32v2Ev();
extern void _ZN7S4359C32v3Ev();
extern void _ZN7S4359C32v4Ev();
extern void _ZN7S4359C22v5Ev();
extern void _ZN7S4359C22v6Ev();
extern void _ZN7S4359C12v1Ev();
static  VTBL_ENTRY vtc_S4359C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4359C1[0]),
  (VTBL_ENTRY)&_ZN7S4359C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4359C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4359C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4359C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4359C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4359C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4359C1[];
extern  VTBL_ENTRY _ZTV7S4359C1[];
Class_Descriptor cd_S4359C1 = {  "S4359C1", // class name
  bases_S4359C1, 2,
  &(vtc_S4359C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S4359C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4359C1),10, //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  S4808C3  {
  ::S4473C12_nt s4808c3f0;
  int s4808c3f1[2];
  char s4808c3f2;
  virtual  ~S4808C3(); // _ZN7S4808C3D1Ev
  virtual void  v3(); // _ZN7S4808C32v3Ev
  virtual void  v4(); // _ZN7S4808C32v4Ev
  virtual void  v5(); // _ZN7S4808C32v5Ev
  S4808C3(); // tgen
};
//SIG(-1 S4808C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4808C3 ::~S4808C3(){ note_dtor("S4808C3", this);}
void  S4808C3 ::v3(){vfunc_called(this, "_ZN7S4808C32v3Ev");}
void  S4808C3 ::v4(){vfunc_called(this, "_ZN7S4808C32v4Ev");}
void  S4808C3 ::v5(){vfunc_called(this, "_ZN7S4808C32v5Ev");}
S4808C3 ::S4808C3(){ note_ctor("S4808C3", this);} // tgen

static void Test_S4808C3()
{
  extern Class_Descriptor cd_S4808C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4808C3, buf);
    S4808C3 *dp, &lv = *(dp=new (buf) S4808C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4808C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4808C3)");
    check_field_offset(lv, s4808c3f0, ABISELECT(8,4), "S4808C3.s4808c3f0");
    check_field_offset(lv, s4808c3f1, ABISELECT(24,16), "S4808C3.s4808c3f1");
    check_field_offset(lv, s4808c3f2, ABISELECT(32,24), "S4808C3.s4808c3f2");
    test_class_info(&lv, &cd_S4808C3);
    dp->~S4808C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4808C3(Test_S4808C3, "S4808C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4808C3C1Ev();
extern void _ZN7S4808C3D1Ev();
Name_Map name_map_S4808C3[] = {
  NSPAIR(_ZN7S4808C3C1Ev),
  NSPAIR(_ZN7S4808C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4808C3[];
extern void _ZN7S4808C3D1Ev();
extern void _ZN7S4808C3D0Ev();
extern void _ZN7S4808C32v3Ev();
extern void _ZN7S4808C32v4Ev();
extern void _ZN7S4808C32v5Ev();
static  VTBL_ENTRY vtc_S4808C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4808C3[0]),
  (VTBL_ENTRY)&_ZN7S4808C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4808C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4808C3[];
extern  VTBL_ENTRY _ZTV7S4808C3[];
Class_Descriptor cd_S4808C3 = {  "S4808C3", // class name
  0,0,//no base classes
  &(vtc_S4808C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4808C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4808C3),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  S4808C2  : S4808C3 {
  void *s4808c2f0;
  virtual void  v6(); // _ZN7S4808C22v6Ev
  virtual void  v7(); // _ZN7S4808C22v7Ev
  ~S4808C2(); // tgen
  S4808C2(); // tgen
};
//SIG(-1 S4808C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4808C2 ::v6(){vfunc_called(this, "_ZN7S4808C22v6Ev");}
void  S4808C2 ::v7(){vfunc_called(this, "_ZN7S4808C22v7Ev");}
S4808C2 ::~S4808C2(){ note_dtor("S4808C2", this);} // tgen
S4808C2 ::S4808C2(){ note_ctor("S4808C2", this);} // tgen

static void Test_S4808C2()
{
  extern Class_Descriptor cd_S4808C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4808C2, buf);
    S4808C2 *dp, &lv = *(dp=new (buf) S4808C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4808C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4808C2)");
    check_base_class_offset(lv, (S4808C3*), 0, "S4808C2");
    check_field_offset(lv, s4808c2f0, ABISELECT(40,28), "S4808C2.s4808c2f0");
    test_class_info(&lv, &cd_S4808C2);
    dp->~S4808C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4808C2(Test_S4808C2, "S4808C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4808C2C1Ev();
extern void _ZN7S4808C2D1Ev();
Name_Map name_map_S4808C2[] = {
  NSPAIR(_ZN7S4808C2C1Ev),
  NSPAIR(_ZN7S4808C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4808C3;
extern VTBL_ENTRY _ZTI7S4808C3[];
extern  VTBL_ENTRY _ZTV7S4808C3[];
static Base_Class bases_S4808C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4808C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4808C2[];
extern void _ZN7S4808C2D1Ev();
extern void _ZN7S4808C2D0Ev();
extern void _ZN7S4808C32v3Ev();
extern void _ZN7S4808C32v4Ev();
extern void _ZN7S4808C32v5Ev();
extern void _ZN7S4808C22v6Ev();
extern void _ZN7S4808C22v7Ev();
static  VTBL_ENTRY vtc_S4808C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4808C2[0]),
  (VTBL_ENTRY)&_ZN7S4808C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4808C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4808C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4808C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4808C2[];
extern  VTBL_ENTRY _ZTV7S4808C2[];
Class_Descriptor cd_S4808C2 = {  "S4808C2", // class name
  bases_S4808C2, 1,
  &(vtc_S4808C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4808C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4808C2),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  S4808C1  : S4808C2 {
  void *s4808c1f0;
  virtual  ~S4808C1(); // _ZN7S4808C1D1Ev
  virtual void  v1(); // _ZN7S4808C12v1Ev
  virtual void  v2(); // _ZN7S4808C12v2Ev
  S4808C1(); // tgen
};
//SIG(1 S4808C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 Fp}


 S4808C1 ::~S4808C1(){ note_dtor("S4808C1", this);}
void  S4808C1 ::v1(){vfunc_called(this, "_ZN7S4808C12v1Ev");}
void  S4808C1 ::v2(){vfunc_called(this, "_ZN7S4808C12v2Ev");}
S4808C1 ::S4808C1(){ note_ctor("S4808C1", this);} // tgen

static void Test_S4808C1()
{
  extern Class_Descriptor cd_S4808C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4808C1, buf);
    S4808C1 *dp, &lv = *(dp=new (buf) S4808C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4808C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4808C1)");
    check_base_class_offset(lv, (S4808C3*)(S4808C2*), 0, "S4808C1");
    check_base_class_offset(lv, (S4808C2*), 0, "S4808C1");
    check_field_offset(lv, s4808c1f0, ABISELECT(48,32), "S4808C1.s4808c1f0");
    test_class_info(&lv, &cd_S4808C1);
    dp->~S4808C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4808C1(Test_S4808C1, "S4808C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4808C1C1Ev();
extern void _ZN7S4808C1D1Ev();
Name_Map name_map_S4808C1[] = {
  NSPAIR(_ZN7S4808C1C1Ev),
  NSPAIR(_ZN7S4808C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4808C3;
extern VTBL_ENTRY _ZTI7S4808C3[];
extern  VTBL_ENTRY _ZTV7S4808C3[];
extern Class_Descriptor cd_S4808C2;
extern VTBL_ENTRY _ZTI7S4808C2[];
extern  VTBL_ENTRY _ZTV7S4808C2[];
static Base_Class bases_S4808C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4808C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4808C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4808C1[];
extern void _ZN7S4808C1D1Ev();
extern void _ZN7S4808C1D0Ev();
extern void _ZN7S4808C32v3Ev();
extern void _ZN7S4808C32v4Ev();
extern void _ZN7S4808C32v5Ev();
extern void _ZN7S4808C22v6Ev();
extern void _ZN7S4808C22v7Ev();
extern void _ZN7S4808C12v1Ev();
extern void _ZN7S4808C12v2Ev();
static  VTBL_ENTRY vtc_S4808C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4808C1[0]),
  (VTBL_ENTRY)&_ZN7S4808C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4808C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4808C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4808C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4808C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4808C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4808C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4808C1[];
extern  VTBL_ENTRY _ZTV7S4808C1[];
Class_Descriptor cd_S4808C1 = {  "S4808C1", // class name
  bases_S4808C1, 2,
  &(vtc_S4808C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4808C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4808C1),11, //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  S4740C3  {
  ::S4473C12_nt s4740c3f0;
  int s4740c3f1[2];
  char s4740c3f2;
  virtual  ~S4740C3(); // _ZN7S4740C3D1Ev
  virtual void  v3(); // _ZN7S4740C32v3Ev
  virtual void  v4(); // _ZN7S4740C32v4Ev
  virtual void  v5(); // _ZN7S4740C32v5Ev
  S4740C3(); // tgen
};
//SIG(-1 S4740C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4740C3 ::~S4740C3(){ note_dtor("S4740C3", this);}
void  S4740C3 ::v3(){vfunc_called(this, "_ZN7S4740C32v3Ev");}
void  S4740C3 ::v4(){vfunc_called(this, "_ZN7S4740C32v4Ev");}
void  S4740C3 ::v5(){vfunc_called(this, "_ZN7S4740C32v5Ev");}
S4740C3 ::S4740C3(){ note_ctor("S4740C3", this);} // tgen

static void Test_S4740C3()
{
  extern Class_Descriptor cd_S4740C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4740C3, buf);
    S4740C3 *dp, &lv = *(dp=new (buf) S4740C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4740C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4740C3)");
    check_field_offset(lv, s4740c3f0, ABISELECT(8,4), "S4740C3.s4740c3f0");
    check_field_offset(lv, s4740c3f1, ABISELECT(24,16), "S4740C3.s4740c3f1");
    check_field_offset(lv, s4740c3f2, ABISELECT(32,24), "S4740C3.s4740c3f2");
    test_class_info(&lv, &cd_S4740C3);
    dp->~S4740C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4740C3(Test_S4740C3, "S4740C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4740C3C1Ev();
extern void _ZN7S4740C3D1Ev();
Name_Map name_map_S4740C3[] = {
  NSPAIR(_ZN7S4740C3C1Ev),
  NSPAIR(_ZN7S4740C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4740C3[];
extern void _ZN7S4740C3D1Ev();
extern void _ZN7S4740C3D0Ev();
extern void _ZN7S4740C32v3Ev();
extern void _ZN7S4740C32v4Ev();
extern void _ZN7S4740C32v5Ev();
static  VTBL_ENTRY vtc_S4740C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4740C3[0]),
  (VTBL_ENTRY)&_ZN7S4740C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4740C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4740C3[];
extern  VTBL_ENTRY _ZTV7S4740C3[];
Class_Descriptor cd_S4740C3 = {  "S4740C3", // class name
  0,0,//no base classes
  &(vtc_S4740C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4740C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4740C3),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  S4740C2  : S4740C3 {
  void *s4740c2f0;
  virtual void  v6(); // _ZN7S4740C22v6Ev
  virtual void  v7(); // _ZN7S4740C22v7Ev
  ~S4740C2(); // tgen
  S4740C2(); // tgen
};
//SIG(-1 S4740C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4740C2 ::v6(){vfunc_called(this, "_ZN7S4740C22v6Ev");}
void  S4740C2 ::v7(){vfunc_called(this, "_ZN7S4740C22v7Ev");}
S4740C2 ::~S4740C2(){ note_dtor("S4740C2", this);} // tgen
S4740C2 ::S4740C2(){ note_ctor("S4740C2", this);} // tgen

static void Test_S4740C2()
{
  extern Class_Descriptor cd_S4740C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4740C2, buf);
    S4740C2 *dp, &lv = *(dp=new (buf) S4740C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4740C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4740C2)");
    check_base_class_offset(lv, (S4740C3*), 0, "S4740C2");
    check_field_offset(lv, s4740c2f0, ABISELECT(40,28), "S4740C2.s4740c2f0");
    test_class_info(&lv, &cd_S4740C2);
    dp->~S4740C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4740C2(Test_S4740C2, "S4740C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4740C2C1Ev();
extern void _ZN7S4740C2D1Ev();
Name_Map name_map_S4740C2[] = {
  NSPAIR(_ZN7S4740C2C1Ev),
  NSPAIR(_ZN7S4740C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4740C3;
extern VTBL_ENTRY _ZTI7S4740C3[];
extern  VTBL_ENTRY _ZTV7S4740C3[];
static Base_Class bases_S4740C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4740C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4740C2[];
extern void _ZN7S4740C2D1Ev();
extern void _ZN7S4740C2D0Ev();
extern void _ZN7S4740C32v3Ev();
extern void _ZN7S4740C32v4Ev();
extern void _ZN7S4740C32v5Ev();
extern void _ZN7S4740C22v6Ev();
extern void _ZN7S4740C22v7Ev();
static  VTBL_ENTRY vtc_S4740C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4740C2[0]),
  (VTBL_ENTRY)&_ZN7S4740C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4740C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4740C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4740C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4740C2[];
extern  VTBL_ENTRY _ZTV7S4740C2[];
Class_Descriptor cd_S4740C2 = {  "S4740C2", // class name
  bases_S4740C2, 1,
  &(vtc_S4740C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4740C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4740C2),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  S4740C1  : S4740C2 {
  int s4740c1f0[3];
  virtual void  v1(); // _ZN7S4740C12v1Ev
  virtual void  v2(); // _ZN7S4740C12v2Ev
  ~S4740C1(); // tgen
  S4740C1(); // tgen
};
//SIG(1 S4740C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} v1 v2 Fi[3]}


void  S4740C1 ::v1(){vfunc_called(this, "_ZN7S4740C12v1Ev");}
void  S4740C1 ::v2(){vfunc_called(this, "_ZN7S4740C12v2Ev");}
S4740C1 ::~S4740C1(){ note_dtor("S4740C1", this);} // tgen
S4740C1 ::S4740C1(){ note_ctor("S4740C1", this);} // tgen

static void Test_S4740C1()
{
  extern Class_Descriptor cd_S4740C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4740C1, buf);
    S4740C1 *dp, &lv = *(dp=new (buf) S4740C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4740C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4740C1)");
    check_base_class_offset(lv, (S4740C3*)(S4740C2*), 0, "S4740C1");
    check_base_class_offset(lv, (S4740C2*), 0, "S4740C1");
    check_field_offset(lv, s4740c1f0, ABISELECT(48,32), "S4740C1.s4740c1f0");
    test_class_info(&lv, &cd_S4740C1);
    dp->~S4740C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4740C1(Test_S4740C1, "S4740C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4740C1C1Ev();
extern void _ZN7S4740C1D1Ev();
Name_Map name_map_S4740C1[] = {
  NSPAIR(_ZN7S4740C1C1Ev),
  NSPAIR(_ZN7S4740C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4740C3;
extern VTBL_ENTRY _ZTI7S4740C3[];
extern  VTBL_ENTRY _ZTV7S4740C3[];
extern Class_Descriptor cd_S4740C2;
extern VTBL_ENTRY _ZTI7S4740C2[];
extern  VTBL_ENTRY _ZTV7S4740C2[];
static Base_Class bases_S4740C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4740C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4740C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4740C1[];
extern void _ZN7S4740C1D1Ev();
extern void _ZN7S4740C1D0Ev();
extern void _ZN7S4740C32v3Ev();
extern void _ZN7S4740C32v4Ev();
extern void _ZN7S4740C32v5Ev();
extern void _ZN7S4740C22v6Ev();
extern void _ZN7S4740C22v7Ev();
extern void _ZN7S4740C12v1Ev();
extern void _ZN7S4740C12v2Ev();
static  VTBL_ENTRY vtc_S4740C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4740C1[0]),
  (VTBL_ENTRY)&_ZN7S4740C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4740C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4740C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4740C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4740C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4740C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4740C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4740C1[];
extern  VTBL_ENTRY _ZTV7S4740C1[];
Class_Descriptor cd_S4740C1 = {  "S4740C1", // class name
  bases_S4740C1, 2,
  &(vtc_S4740C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4740C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4740C1),11, //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  S4809C3  {
  ::S4473C12_nt s4809c3f0;
  int s4809c3f1[2];
  char s4809c3f2;
  virtual  ~S4809C3(); // _ZN7S4809C3D1Ev
  virtual void  v3(); // _ZN7S4809C32v3Ev
  virtual void  v4(); // _ZN7S4809C32v4Ev
  virtual void  v5(); // _ZN7S4809C32v5Ev
  S4809C3(); // tgen
};
//SIG(-1 S4809C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4809C3 ::~S4809C3(){ note_dtor("S4809C3", this);}
void  S4809C3 ::v3(){vfunc_called(this, "_ZN7S4809C32v3Ev");}
void  S4809C3 ::v4(){vfunc_called(this, "_ZN7S4809C32v4Ev");}
void  S4809C3 ::v5(){vfunc_called(this, "_ZN7S4809C32v5Ev");}
S4809C3 ::S4809C3(){ note_ctor("S4809C3", this);} // tgen

static void Test_S4809C3()
{
  extern Class_Descriptor cd_S4809C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4809C3, buf);
    S4809C3 *dp, &lv = *(dp=new (buf) S4809C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4809C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4809C3)");
    check_field_offset(lv, s4809c3f0, ABISELECT(8,4), "S4809C3.s4809c3f0");
    check_field_offset(lv, s4809c3f1, ABISELECT(24,16), "S4809C3.s4809c3f1");
    check_field_offset(lv, s4809c3f2, ABISELECT(32,24), "S4809C3.s4809c3f2");
    test_class_info(&lv, &cd_S4809C3);
    dp->~S4809C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4809C3(Test_S4809C3, "S4809C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4809C3C1Ev();
extern void _ZN7S4809C3D1Ev();
Name_Map name_map_S4809C3[] = {
  NSPAIR(_ZN7S4809C3C1Ev),
  NSPAIR(_ZN7S4809C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4809C3[];
extern void _ZN7S4809C3D1Ev();
extern void _ZN7S4809C3D0Ev();
extern void _ZN7S4809C32v3Ev();
extern void _ZN7S4809C32v4Ev();
extern void _ZN7S4809C32v5Ev();
static  VTBL_ENTRY vtc_S4809C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4809C3[0]),
  (VTBL_ENTRY)&_ZN7S4809C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4809C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4809C3[];
extern  VTBL_ENTRY _ZTV7S4809C3[];
Class_Descriptor cd_S4809C3 = {  "S4809C3", // class name
  0,0,//no base classes
  &(vtc_S4809C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4809C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4809C3),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  S4809C2  : S4809C3 {
  void *s4809c2f0;
  virtual void  v6(); // _ZN7S4809C22v6Ev
  virtual void  v7(); // _ZN7S4809C22v7Ev
  ~S4809C2(); // tgen
  S4809C2(); // tgen
};
//SIG(-1 S4809C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4809C2 ::v6(){vfunc_called(this, "_ZN7S4809C22v6Ev");}
void  S4809C2 ::v7(){vfunc_called(this, "_ZN7S4809C22v7Ev");}
S4809C2 ::~S4809C2(){ note_dtor("S4809C2", this);} // tgen
S4809C2 ::S4809C2(){ note_ctor("S4809C2", this);} // tgen

static void Test_S4809C2()
{
  extern Class_Descriptor cd_S4809C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4809C2, buf);
    S4809C2 *dp, &lv = *(dp=new (buf) S4809C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4809C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4809C2)");
    check_base_class_offset(lv, (S4809C3*), 0, "S4809C2");
    check_field_offset(lv, s4809c2f0, ABISELECT(40,28), "S4809C2.s4809c2f0");
    test_class_info(&lv, &cd_S4809C2);
    dp->~S4809C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4809C2(Test_S4809C2, "S4809C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4809C2C1Ev();
extern void _ZN7S4809C2D1Ev();
Name_Map name_map_S4809C2[] = {
  NSPAIR(_ZN7S4809C2C1Ev),
  NSPAIR(_ZN7S4809C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4809C3;
extern VTBL_ENTRY _ZTI7S4809C3[];
extern  VTBL_ENTRY _ZTV7S4809C3[];
static Base_Class bases_S4809C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4809C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4809C2[];
extern void _ZN7S4809C2D1Ev();
extern void _ZN7S4809C2D0Ev();
extern void _ZN7S4809C32v3Ev();
extern void _ZN7S4809C32v4Ev();
extern void _ZN7S4809C32v5Ev();
extern void _ZN7S4809C22v6Ev();
extern void _ZN7S4809C22v7Ev();
static  VTBL_ENTRY vtc_S4809C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4809C2[0]),
  (VTBL_ENTRY)&_ZN7S4809C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4809C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4809C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4809C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4809C2[];
extern  VTBL_ENTRY _ZTV7S4809C2[];
Class_Descriptor cd_S4809C2 = {  "S4809C2", // class name
  bases_S4809C2, 1,
  &(vtc_S4809C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4809C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4809C2),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  S4809C1  : S4809C2 {
  virtual  ~S4809C1(); // _ZN7S4809C1D1Ev
  virtual void  v1(); // _ZN7S4809C12v1Ev
  virtual void  v2(); // _ZN7S4809C12v2Ev
  S4809C1(); // tgen
};
//SIG(1 S4809C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2}


 S4809C1 ::~S4809C1(){ note_dtor("S4809C1", this);}
void  S4809C1 ::v1(){vfunc_called(this, "_ZN7S4809C12v1Ev");}
void  S4809C1 ::v2(){vfunc_called(this, "_ZN7S4809C12v2Ev");}
S4809C1 ::S4809C1(){ note_ctor("S4809C1", this);} // tgen

static void Test_S4809C1()
{
  extern Class_Descriptor cd_S4809C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4809C1, buf);
    S4809C1 *dp, &lv = *(dp=new (buf) S4809C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4809C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4809C1)");
    check_base_class_offset(lv, (S4809C3*)(S4809C2*), 0, "S4809C1");
    check_base_class_offset(lv, (S4809C2*), 0, "S4809C1");
    test_class_info(&lv, &cd_S4809C1);
    dp->~S4809C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4809C1(Test_S4809C1, "S4809C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4809C1C1Ev();
extern void _ZN7S4809C1D1Ev();
Name_Map name_map_S4809C1[] = {
  NSPAIR(_ZN7S4809C1C1Ev),
  NSPAIR(_ZN7S4809C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4809C3;
extern VTBL_ENTRY _ZTI7S4809C3[];
extern  VTBL_ENTRY _ZTV7S4809C3[];
extern Class_Descriptor cd_S4809C2;
extern VTBL_ENTRY _ZTI7S4809C2[];
extern  VTBL_ENTRY _ZTV7S4809C2[];
static Base_Class bases_S4809C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4809C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4809C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4809C1[];
extern void _ZN7S4809C1D1Ev();
extern void _ZN7S4809C1D0Ev();
extern void _ZN7S4809C32v3Ev();
extern void _ZN7S4809C32v4Ev();
extern void _ZN7S4809C32v5Ev();
extern void _ZN7S4809C22v6Ev();
extern void _ZN7S4809C22v7Ev();
extern void _ZN7S4809C12v1Ev();
extern void _ZN7S4809C12v2Ev();
static  VTBL_ENTRY vtc_S4809C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4809C1[0]),
  (VTBL_ENTRY)&_ZN7S4809C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4809C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4809C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4809C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4809C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4809C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4809C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4809C1[];
extern  VTBL_ENTRY _ZTV7S4809C1[];
Class_Descriptor cd_S4809C1 = {  "S4809C1", // class name
  bases_S4809C1, 2,
  &(vtc_S4809C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4809C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4809C1),11, //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  S4741C3  {
  ::S4473C12_nt s4741c3f0;
  int s4741c3f1[2];
  char s4741c3f2;
  virtual  ~S4741C3(); // _ZN7S4741C3D1Ev
  virtual void  v3(); // _ZN7S4741C32v3Ev
  virtual void  v4(); // _ZN7S4741C32v4Ev
  virtual void  v5(); // _ZN7S4741C32v5Ev
  S4741C3(); // tgen
};
//SIG(-1 S4741C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4741C3 ::~S4741C3(){ note_dtor("S4741C3", this);}
void  S4741C3 ::v3(){vfunc_called(this, "_ZN7S4741C32v3Ev");}
void  S4741C3 ::v4(){vfunc_called(this, "_ZN7S4741C32v4Ev");}
void  S4741C3 ::v5(){vfunc_called(this, "_ZN7S4741C32v5Ev");}
S4741C3 ::S4741C3(){ note_ctor("S4741C3", this);} // tgen

static void Test_S4741C3()
{
  extern Class_Descriptor cd_S4741C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4741C3, buf);
    S4741C3 *dp, &lv = *(dp=new (buf) S4741C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4741C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4741C3)");
    check_field_offset(lv, s4741c3f0, ABISELECT(8,4), "S4741C3.s4741c3f0");
    check_field_offset(lv, s4741c3f1, ABISELECT(24,16), "S4741C3.s4741c3f1");
    check_field_offset(lv, s4741c3f2, ABISELECT(32,24), "S4741C3.s4741c3f2");
    test_class_info(&lv, &cd_S4741C3);
    dp->~S4741C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4741C3(Test_S4741C3, "S4741C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4741C3C1Ev();
extern void _ZN7S4741C3D1Ev();
Name_Map name_map_S4741C3[] = {
  NSPAIR(_ZN7S4741C3C1Ev),
  NSPAIR(_ZN7S4741C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4741C3[];
extern void _ZN7S4741C3D1Ev();
extern void _ZN7S4741C3D0Ev();
extern void _ZN7S4741C32v3Ev();
extern void _ZN7S4741C32v4Ev();
extern void _ZN7S4741C32v5Ev();
static  VTBL_ENTRY vtc_S4741C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4741C3[0]),
  (VTBL_ENTRY)&_ZN7S4741C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4741C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4741C3[];
extern  VTBL_ENTRY _ZTV7S4741C3[];
Class_Descriptor cd_S4741C3 = {  "S4741C3", // class name
  0,0,//no base classes
  &(vtc_S4741C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4741C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4741C3),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  S4741C2  : S4741C3 {
  void *s4741c2f0;
  virtual void  v6(); // _ZN7S4741C22v6Ev
  virtual void  v7(); // _ZN7S4741C22v7Ev
  ~S4741C2(); // tgen
  S4741C2(); // tgen
};
//SIG(-1 S4741C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4741C2 ::v6(){vfunc_called(this, "_ZN7S4741C22v6Ev");}
void  S4741C2 ::v7(){vfunc_called(this, "_ZN7S4741C22v7Ev");}
S4741C2 ::~S4741C2(){ note_dtor("S4741C2", this);} // tgen
S4741C2 ::S4741C2(){ note_ctor("S4741C2", this);} // tgen

static void Test_S4741C2()
{
  extern Class_Descriptor cd_S4741C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4741C2, buf);
    S4741C2 *dp, &lv = *(dp=new (buf) S4741C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4741C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4741C2)");
    check_base_class_offset(lv, (S4741C3*), 0, "S4741C2");
    check_field_offset(lv, s4741c2f0, ABISELECT(40,28), "S4741C2.s4741c2f0");
    test_class_info(&lv, &cd_S4741C2);
    dp->~S4741C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4741C2(Test_S4741C2, "S4741C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4741C2C1Ev();
extern void _ZN7S4741C2D1Ev();
Name_Map name_map_S4741C2[] = {
  NSPAIR(_ZN7S4741C2C1Ev),
  NSPAIR(_ZN7S4741C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4741C3;
extern VTBL_ENTRY _ZTI7S4741C3[];
extern  VTBL_ENTRY _ZTV7S4741C3[];
static Base_Class bases_S4741C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4741C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4741C2[];
extern void _ZN7S4741C2D1Ev();
extern void _ZN7S4741C2D0Ev();
extern void _ZN7S4741C32v3Ev();
extern void _ZN7S4741C32v4Ev();
extern void _ZN7S4741C32v5Ev();
extern void _ZN7S4741C22v6Ev();
extern void _ZN7S4741C22v7Ev();
static  VTBL_ENTRY vtc_S4741C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4741C2[0]),
  (VTBL_ENTRY)&_ZN7S4741C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4741C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4741C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4741C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4741C2[];
extern  VTBL_ENTRY _ZTV7S4741C2[];
Class_Descriptor cd_S4741C2 = {  "S4741C2", // class name
  bases_S4741C2, 1,
  &(vtc_S4741C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4741C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4741C2),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  S4741C1  : S4741C2 {
  int s4741c1f0;
  virtual void  v1(); // _ZN7S4741C12v1Ev
  virtual void  v2(); // _ZN7S4741C12v2Ev
  ~S4741C1(); // tgen
  S4741C1(); // tgen
};
//SIG(1 S4741C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} v1 v2 Fi}


void  S4741C1 ::v1(){vfunc_called(this, "_ZN7S4741C12v1Ev");}
void  S4741C1 ::v2(){vfunc_called(this, "_ZN7S4741C12v2Ev");}
S4741C1 ::~S4741C1(){ note_dtor("S4741C1", this);} // tgen
S4741C1 ::S4741C1(){ note_ctor("S4741C1", this);} // tgen

static void Test_S4741C1()
{
  extern Class_Descriptor cd_S4741C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4741C1, buf);
    S4741C1 *dp, &lv = *(dp=new (buf) S4741C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4741C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4741C1)");
    check_base_class_offset(lv, (S4741C3*)(S4741C2*), 0, "S4741C1");
    check_base_class_offset(lv, (S4741C2*), 0, "S4741C1");
    check_field_offset(lv, s4741c1f0, ABISELECT(48,32), "S4741C1.s4741c1f0");
    test_class_info(&lv, &cd_S4741C1);
    dp->~S4741C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4741C1(Test_S4741C1, "S4741C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4741C1C1Ev();
extern void _ZN7S4741C1D1Ev();
Name_Map name_map_S4741C1[] = {
  NSPAIR(_ZN7S4741C1C1Ev),
  NSPAIR(_ZN7S4741C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4741C3;
extern VTBL_ENTRY _ZTI7S4741C3[];
extern  VTBL_ENTRY _ZTV7S4741C3[];
extern Class_Descriptor cd_S4741C2;
extern VTBL_ENTRY _ZTI7S4741C2[];
extern  VTBL_ENTRY _ZTV7S4741C2[];
static Base_Class bases_S4741C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4741C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4741C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4741C1[];
extern void _ZN7S4741C1D1Ev();
extern void _ZN7S4741C1D0Ev();
extern void _ZN7S4741C32v3Ev();
extern void _ZN7S4741C32v4Ev();
extern void _ZN7S4741C32v5Ev();
extern void _ZN7S4741C22v6Ev();
extern void _ZN7S4741C22v7Ev();
extern void _ZN7S4741C12v1Ev();
extern void _ZN7S4741C12v2Ev();
static  VTBL_ENTRY vtc_S4741C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4741C1[0]),
  (VTBL_ENTRY)&_ZN7S4741C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4741C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4741C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4741C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4741C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4741C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4741C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4741C1[];
extern  VTBL_ENTRY _ZTV7S4741C1[];
Class_Descriptor cd_S4741C1 = {  "S4741C1", // class name
  bases_S4741C1, 2,
  &(vtc_S4741C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4741C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4741C1),11, //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  S4374C3  {
  ::S4473C12_nt s4374c3f0;
  int s4374c3f1[2];
  char s4374c3f2;
  virtual  ~S4374C3(); // _ZN7S4374C3D1Ev
  virtual void  v2(); // _ZN7S4374C32v2Ev
  virtual void  v3(); // _ZN7S4374C32v3Ev
  virtual void  v4(); // _ZN7S4374C32v4Ev
  S4374C3(); // tgen
};
//SIG(-1 S4374C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4374C3 ::~S4374C3(){ note_dtor("S4374C3", this);}
void  S4374C3 ::v2(){vfunc_called(this, "_ZN7S4374C32v2Ev");}
void  S4374C3 ::v3(){vfunc_called(this, "_ZN7S4374C32v3Ev");}
void  S4374C3 ::v4(){vfunc_called(this, "_ZN7S4374C32v4Ev");}
S4374C3 ::S4374C3(){ note_ctor("S4374C3", this);} // tgen

static void Test_S4374C3()
{
  extern Class_Descriptor cd_S4374C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4374C3, buf);
    S4374C3 *dp, &lv = *(dp=new (buf) S4374C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4374C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4374C3)");
    check_field_offset(lv, s4374c3f0, ABISELECT(8,4), "S4374C3.s4374c3f0");
    check_field_offset(lv, s4374c3f1, ABISELECT(24,16), "S4374C3.s4374c3f1");
    check_field_offset(lv, s4374c3f2, ABISELECT(32,24), "S4374C3.s4374c3f2");
    test_class_info(&lv, &cd_S4374C3);
    dp->~S4374C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4374C3(Test_S4374C3, "S4374C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4374C3C1Ev();
extern void _ZN7S4374C3D1Ev();
Name_Map name_map_S4374C3[] = {
  NSPAIR(_ZN7S4374C3C1Ev),
  NSPAIR(_ZN7S4374C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4374C3[];
extern void _ZN7S4374C3D1Ev();
extern void _ZN7S4374C3D0Ev();
extern void _ZN7S4374C32v2Ev();
extern void _ZN7S4374C32v3Ev();
extern void _ZN7S4374C32v4Ev();
static  VTBL_ENTRY vtc_S4374C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4374C3[0]),
  (VTBL_ENTRY)&_ZN7S4374C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4374C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4374C3[];
extern  VTBL_ENTRY _ZTV7S4374C3[];
Class_Descriptor cd_S4374C3 = {  "S4374C3", // class name
  0,0,//no base classes
  &(vtc_S4374C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4374C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4374C3),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  S4374C2  : S4374C3 {
  void *s4374c2f0;
  virtual void  v5(); // _ZN7S4374C22v5Ev
  virtual void  v6(); // _ZN7S4374C22v6Ev
  ~S4374C2(); // tgen
  S4374C2(); // tgen
};
//SIG(-1 S4374C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4374C2 ::v5(){vfunc_called(this, "_ZN7S4374C22v5Ev");}
void  S4374C2 ::v6(){vfunc_called(this, "_ZN7S4374C22v6Ev");}
S4374C2 ::~S4374C2(){ note_dtor("S4374C2", this);} // tgen
S4374C2 ::S4374C2(){ note_ctor("S4374C2", this);} // tgen

static void Test_S4374C2()
{
  extern Class_Descriptor cd_S4374C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4374C2, buf);
    S4374C2 *dp, &lv = *(dp=new (buf) S4374C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4374C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4374C2)");
    check_base_class_offset(lv, (S4374C3*), 0, "S4374C2");
    check_field_offset(lv, s4374c2f0, ABISELECT(40,28), "S4374C2.s4374c2f0");
    test_class_info(&lv, &cd_S4374C2);
    dp->~S4374C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4374C2(Test_S4374C2, "S4374C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4374C2C1Ev();
extern void _ZN7S4374C2D1Ev();
Name_Map name_map_S4374C2[] = {
  NSPAIR(_ZN7S4374C2C1Ev),
  NSPAIR(_ZN7S4374C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4374C3;
extern VTBL_ENTRY _ZTI7S4374C3[];
extern  VTBL_ENTRY _ZTV7S4374C3[];
static Base_Class bases_S4374C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4374C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4374C2[];
extern void _ZN7S4374C2D1Ev();
extern void _ZN7S4374C2D0Ev();
extern void _ZN7S4374C32v2Ev();
extern void _ZN7S4374C32v3Ev();
extern void _ZN7S4374C32v4Ev();
extern void _ZN7S4374C22v5Ev();
extern void _ZN7S4374C22v6Ev();
static  VTBL_ENTRY vtc_S4374C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4374C2[0]),
  (VTBL_ENTRY)&_ZN7S4374C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4374C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4374C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4374C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4374C2[];
extern  VTBL_ENTRY _ZTV7S4374C2[];
Class_Descriptor cd_S4374C2 = {  "S4374C2", // class name
  bases_S4374C2, 1,
  &(vtc_S4374C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4374C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4374C2),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  S4374C1  : S4374C2 {
  ::S4473C12_nt s4374c1f0;
  virtual void  v1(); // _ZN7S4374C12v1Ev
  ~S4374C1(); // tgen
  S4374C1(); // tgen
};
//SIG(1 S4374C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FC4}


void  S4374C1 ::v1(){vfunc_called(this, "_ZN7S4374C12v1Ev");}
S4374C1 ::~S4374C1(){ note_dtor("S4374C1", this);} // tgen
S4374C1 ::S4374C1(){ note_ctor("S4374C1", this);} // tgen

static void Test_S4374C1()
{
  extern Class_Descriptor cd_S4374C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4374C1, buf);
    S4374C1 *dp, &lv = *(dp=new (buf) S4374C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4374C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4374C1)");
    check_base_class_offset(lv, (S4374C3*)(S4374C2*), 0, "S4374C1");
    check_base_class_offset(lv, (S4374C2*), 0, "S4374C1");
    check_field_offset(lv, s4374c1f0, ABISELECT(48,32), "S4374C1.s4374c1f0");
    test_class_info(&lv, &cd_S4374C1);
    dp->~S4374C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4374C1(Test_S4374C1, "S4374C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4374C1C1Ev();
extern void _ZN7S4374C1D1Ev();
Name_Map name_map_S4374C1[] = {
  NSPAIR(_ZN7S4374C1C1Ev),
  NSPAIR(_ZN7S4374C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4374C3;
extern VTBL_ENTRY _ZTI7S4374C3[];
extern  VTBL_ENTRY _ZTV7S4374C3[];
extern Class_Descriptor cd_S4374C2;
extern VTBL_ENTRY _ZTI7S4374C2[];
extern  VTBL_ENTRY _ZTV7S4374C2[];
static Base_Class bases_S4374C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4374C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4374C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4374C1[];
extern void _ZN7S4374C1D1Ev();
extern void _ZN7S4374C1D0Ev();
extern void _ZN7S4374C32v2Ev();
extern void _ZN7S4374C32v3Ev();
extern void _ZN7S4374C32v4Ev();
extern void _ZN7S4374C22v5Ev();
extern void _ZN7S4374C22v6Ev();
extern void _ZN7S4374C12v1Ev();
static  VTBL_ENTRY vtc_S4374C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4374C1[0]),
  (VTBL_ENTRY)&_ZN7S4374C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4374C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4374C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4374C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4374C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4374C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4374C1[];
extern  VTBL_ENTRY _ZTV7S4374C1[];
Class_Descriptor cd_S4374C1 = {  "S4374C1", // class name
  bases_S4374C1, 2,
  &(vtc_S4374C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4374C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4374C1),10, //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  S4404C3  {
  ::S4473C12_nt s4404c3f0;
  int s4404c3f1[2];
  char s4404c3f2;
  virtual  ~S4404C3(); // _ZN7S4404C3D1Ev
  virtual void  v2(); // _ZN7S4404C32v2Ev
  virtual void  v3(); // _ZN7S4404C32v3Ev
  virtual void  v4(); // _ZN7S4404C32v4Ev
  S4404C3(); // tgen
};
//SIG(-1 S4404C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4404C3 ::~S4404C3(){ note_dtor("S4404C3", this);}
void  S4404C3 ::v2(){vfunc_called(this, "_ZN7S4404C32v2Ev");}
void  S4404C3 ::v3(){vfunc_called(this, "_ZN7S4404C32v3Ev");}
void  S4404C3 ::v4(){vfunc_called(this, "_ZN7S4404C32v4Ev");}
S4404C3 ::S4404C3(){ note_ctor("S4404C3", this);} // tgen

static void Test_S4404C3()
{
  extern Class_Descriptor cd_S4404C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4404C3, buf);
    S4404C3 *dp, &lv = *(dp=new (buf) S4404C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4404C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4404C3)");
    check_field_offset(lv, s4404c3f0, ABISELECT(8,4), "S4404C3.s4404c3f0");
    check_field_offset(lv, s4404c3f1, ABISELECT(24,16), "S4404C3.s4404c3f1");
    check_field_offset(lv, s4404c3f2, ABISELECT(32,24), "S4404C3.s4404c3f2");
    test_class_info(&lv, &cd_S4404C3);
    dp->~S4404C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4404C3(Test_S4404C3, "S4404C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4404C3C1Ev();
extern void _ZN7S4404C3D1Ev();
Name_Map name_map_S4404C3[] = {
  NSPAIR(_ZN7S4404C3C1Ev),
  NSPAIR(_ZN7S4404C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4404C3[];
extern void _ZN7S4404C3D1Ev();
extern void _ZN7S4404C3D0Ev();
extern void _ZN7S4404C32v2Ev();
extern void _ZN7S4404C32v3Ev();
extern void _ZN7S4404C32v4Ev();
static  VTBL_ENTRY vtc_S4404C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4404C3[0]),
  (VTBL_ENTRY)&_ZN7S4404C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4404C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4404C3[];
extern  VTBL_ENTRY _ZTV7S4404C3[];
Class_Descriptor cd_S4404C3 = {  "S4404C3", // class name
  0,0,//no base classes
  &(vtc_S4404C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4404C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4404C3),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  S4404C2  : S4404C3 {
  void *s4404c2f0;
  virtual void  v5(); // _ZN7S4404C22v5Ev
  virtual void  v6(); // _ZN7S4404C22v6Ev
  ~S4404C2(); // tgen
  S4404C2(); // tgen
};
//SIG(-1 S4404C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4404C2 ::v5(){vfunc_called(this, "_ZN7S4404C22v5Ev");}
void  S4404C2 ::v6(){vfunc_called(this, "_ZN7S4404C22v6Ev");}
S4404C2 ::~S4404C2(){ note_dtor("S4404C2", this);} // tgen
S4404C2 ::S4404C2(){ note_ctor("S4404C2", this);} // tgen

static void Test_S4404C2()
{
  extern Class_Descriptor cd_S4404C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4404C2, buf);
    S4404C2 *dp, &lv = *(dp=new (buf) S4404C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4404C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4404C2)");
    check_base_class_offset(lv, (S4404C3*), 0, "S4404C2");
    check_field_offset(lv, s4404c2f0, ABISELECT(40,28), "S4404C2.s4404c2f0");
    test_class_info(&lv, &cd_S4404C2);
    dp->~S4404C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4404C2(Test_S4404C2, "S4404C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4404C2C1Ev();
extern void _ZN7S4404C2D1Ev();
Name_Map name_map_S4404C2[] = {
  NSPAIR(_ZN7S4404C2C1Ev),
  NSPAIR(_ZN7S4404C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4404C3;
extern VTBL_ENTRY _ZTI7S4404C3[];
extern  VTBL_ENTRY _ZTV7S4404C3[];
static Base_Class bases_S4404C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4404C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4404C2[];
extern void _ZN7S4404C2D1Ev();
extern void _ZN7S4404C2D0Ev();
extern void _ZN7S4404C32v2Ev();
extern void _ZN7S4404C32v3Ev();
extern void _ZN7S4404C32v4Ev();
extern void _ZN7S4404C22v5Ev();
extern void _ZN7S4404C22v6Ev();
static  VTBL_ENTRY vtc_S4404C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4404C2[0]),
  (VTBL_ENTRY)&_ZN7S4404C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4404C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4404C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4404C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4404C2[];
extern  VTBL_ENTRY _ZTV7S4404C2[];
Class_Descriptor cd_S4404C2 = {  "S4404C2", // class name
  bases_S4404C2, 1,
  &(vtc_S4404C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4404C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4404C2),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  S4404C1  : S4404C2 {
  virtual  ~S4404C1(); // _ZN7S4404C1D1Ev
  virtual void  v1(); // _ZN7S4404C12v1Ev
  S4404C1(); // tgen
};
//SIG(1 S4404C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1}


 S4404C1 ::~S4404C1(){ note_dtor("S4404C1", this);}
void  S4404C1 ::v1(){vfunc_called(this, "_ZN7S4404C12v1Ev");}
S4404C1 ::S4404C1(){ note_ctor("S4404C1", this);} // tgen

static void Test_S4404C1()
{
  extern Class_Descriptor cd_S4404C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4404C1, buf);
    S4404C1 *dp, &lv = *(dp=new (buf) S4404C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4404C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4404C1)");
    check_base_class_offset(lv, (S4404C3*)(S4404C2*), 0, "S4404C1");
    check_base_class_offset(lv, (S4404C2*), 0, "S4404C1");
    test_class_info(&lv, &cd_S4404C1);
    dp->~S4404C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4404C1(Test_S4404C1, "S4404C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4404C1C1Ev();
extern void _ZN7S4404C1D1Ev();
Name_Map name_map_S4404C1[] = {
  NSPAIR(_ZN7S4404C1C1Ev),
  NSPAIR(_ZN7S4404C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4404C3;
extern VTBL_ENTRY _ZTI7S4404C3[];
extern  VTBL_ENTRY _ZTV7S4404C3[];
extern Class_Descriptor cd_S4404C2;
extern VTBL_ENTRY _ZTI7S4404C2[];
extern  VTBL_ENTRY _ZTV7S4404C2[];
static Base_Class bases_S4404C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4404C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4404C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4404C1[];
extern void _ZN7S4404C1D1Ev();
extern void _ZN7S4404C1D0Ev();
extern void _ZN7S4404C32v2Ev();
extern void _ZN7S4404C32v3Ev();
extern void _ZN7S4404C32v4Ev();
extern void _ZN7S4404C22v5Ev();
extern void _ZN7S4404C22v6Ev();
extern void _ZN7S4404C12v1Ev();
static  VTBL_ENTRY vtc_S4404C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4404C1[0]),
  (VTBL_ENTRY)&_ZN7S4404C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4404C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4404C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4404C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4404C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4404C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4404C1[];
extern  VTBL_ENTRY _ZTV7S4404C1[];
Class_Descriptor cd_S4404C1 = {  "S4404C1", // class name
  bases_S4404C1, 2,
  &(vtc_S4404C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4404C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4404C1),10, //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  S4393C3  {
  ::S4473C12_nt s4393c3f0;
  int s4393c3f1[2];
  char s4393c3f2;
  virtual  ~S4393C3(); // _ZN7S4393C3D1Ev
  virtual void  v2(); // _ZN7S4393C32v2Ev
  virtual void  v3(); // _ZN7S4393C32v3Ev
  virtual void  v4(); // _ZN7S4393C32v4Ev
  S4393C3(); // tgen
};
//SIG(-1 S4393C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4393C3 ::~S4393C3(){ note_dtor("S4393C3", this);}
void  S4393C3 ::v2(){vfunc_called(this, "_ZN7S4393C32v2Ev");}
void  S4393C3 ::v3(){vfunc_called(this, "_ZN7S4393C32v3Ev");}
void  S4393C3 ::v4(){vfunc_called(this, "_ZN7S4393C32v4Ev");}
S4393C3 ::S4393C3(){ note_ctor("S4393C3", this);} // tgen

static void Test_S4393C3()
{
  extern Class_Descriptor cd_S4393C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4393C3, buf);
    S4393C3 *dp, &lv = *(dp=new (buf) S4393C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4393C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4393C3)");
    check_field_offset(lv, s4393c3f0, ABISELECT(8,4), "S4393C3.s4393c3f0");
    check_field_offset(lv, s4393c3f1, ABISELECT(24,16), "S4393C3.s4393c3f1");
    check_field_offset(lv, s4393c3f2, ABISELECT(32,24), "S4393C3.s4393c3f2");
    test_class_info(&lv, &cd_S4393C3);
    dp->~S4393C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4393C3(Test_S4393C3, "S4393C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4393C3C1Ev();
extern void _ZN7S4393C3D1Ev();
Name_Map name_map_S4393C3[] = {
  NSPAIR(_ZN7S4393C3C1Ev),
  NSPAIR(_ZN7S4393C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4393C3[];
extern void _ZN7S4393C3D1Ev();
extern void _ZN7S4393C3D0Ev();
extern void _ZN7S4393C32v2Ev();
extern void _ZN7S4393C32v3Ev();
extern void _ZN7S4393C32v4Ev();
static  VTBL_ENTRY vtc_S4393C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4393C3[0]),
  (VTBL_ENTRY)&_ZN7S4393C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4393C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4393C3[];
extern  VTBL_ENTRY _ZTV7S4393C3[];
Class_Descriptor cd_S4393C3 = {  "S4393C3", // class name
  0,0,//no base classes
  &(vtc_S4393C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4393C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4393C3),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  S4393C2  : S4393C3 {
  void *s4393c2f0;
  virtual void  v5(); // _ZN7S4393C22v5Ev
  virtual void  v6(); // _ZN7S4393C22v6Ev
  ~S4393C2(); // tgen
  S4393C2(); // tgen
};
//SIG(-1 S4393C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4393C2 ::v5(){vfunc_called(this, "_ZN7S4393C22v5Ev");}
void  S4393C2 ::v6(){vfunc_called(this, "_ZN7S4393C22v6Ev");}
S4393C2 ::~S4393C2(){ note_dtor("S4393C2", this);} // tgen
S4393C2 ::S4393C2(){ note_ctor("S4393C2", this);} // tgen

static void Test_S4393C2()
{
  extern Class_Descriptor cd_S4393C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4393C2, buf);
    S4393C2 *dp, &lv = *(dp=new (buf) S4393C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4393C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4393C2)");
    check_base_class_offset(lv, (S4393C3*), 0, "S4393C2");
    check_field_offset(lv, s4393c2f0, ABISELECT(40,28), "S4393C2.s4393c2f0");
    test_class_info(&lv, &cd_S4393C2);
    dp->~S4393C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4393C2(Test_S4393C2, "S4393C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4393C2C1Ev();
extern void _ZN7S4393C2D1Ev();
Name_Map name_map_S4393C2[] = {
  NSPAIR(_ZN7S4393C2C1Ev),
  NSPAIR(_ZN7S4393C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4393C3;
extern VTBL_ENTRY _ZTI7S4393C3[];
extern  VTBL_ENTRY _ZTV7S4393C3[];
static Base_Class bases_S4393C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4393C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4393C2[];
extern void _ZN7S4393C2D1Ev();
extern void _ZN7S4393C2D0Ev();
extern void _ZN7S4393C32v2Ev();
extern void _ZN7S4393C32v3Ev();
extern void _ZN7S4393C32v4Ev();
extern void _ZN7S4393C22v5Ev();
extern void _ZN7S4393C22v6Ev();
static  VTBL_ENTRY vtc_S4393C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4393C2[0]),
  (VTBL_ENTRY)&_ZN7S4393C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4393C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4393C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4393C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4393C2[];
extern  VTBL_ENTRY _ZTV7S4393C2[];
Class_Descriptor cd_S4393C2 = {  "S4393C2", // class name
  bases_S4393C2, 1,
  &(vtc_S4393C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4393C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4393C2),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  S4393C1  : S4393C2 {
  __tsi64 s4393c1f0;
  virtual void  v1(); // _ZN7S4393C12v1Ev
  ~S4393C1(); // tgen
  S4393C1(); // tgen
};
//SIG(1 S4393C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1 FL}


void  S4393C1 ::v1(){vfunc_called(this, "_ZN7S4393C12v1Ev");}
S4393C1 ::~S4393C1(){ note_dtor("S4393C1", this);} // tgen
S4393C1 ::S4393C1(){ note_ctor("S4393C1", this);} // tgen

static void Test_S4393C1()
{
  extern Class_Descriptor cd_S4393C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S4393C1, buf);
    S4393C1 *dp, &lv = *(dp=new (buf) S4393C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S4393C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4393C1)");
    check_base_class_offset(lv, (S4393C3*)(S4393C2*), 0, "S4393C1");
    check_base_class_offset(lv, (S4393C2*), 0, "S4393C1");
    check_field_offset(lv, s4393c1f0, ABISELECT(48,32), "S4393C1.s4393c1f0");
    test_class_info(&lv, &cd_S4393C1);
    dp->~S4393C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4393C1(Test_S4393C1, "S4393C1", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S4393C1C1Ev();
extern void _ZN7S4393C1D1Ev();
Name_Map name_map_S4393C1[] = {
  NSPAIR(_ZN7S4393C1C1Ev),
  NSPAIR(_ZN7S4393C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4393C3;
extern VTBL_ENTRY _ZTI7S4393C3[];
extern  VTBL_ENTRY _ZTV7S4393C3[];
extern Class_Descriptor cd_S4393C2;
extern VTBL_ENTRY _ZTI7S4393C2[];
extern  VTBL_ENTRY _ZTV7S4393C2[];
static Base_Class bases_S4393C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4393C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4393C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4393C1[];
extern void _ZN7S4393C1D1Ev();
extern void _ZN7S4393C1D0Ev();
extern void _ZN7S4393C32v2Ev();
extern void _ZN7S4393C32v3Ev();
extern void _ZN7S4393C32v4Ev();
extern void _ZN7S4393C22v5Ev();
extern void _ZN7S4393C22v6Ev();
extern void _ZN7S4393C12v1Ev();
static  VTBL_ENTRY vtc_S4393C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4393C1[0]),
  (VTBL_ENTRY)&_ZN7S4393C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4393C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4393C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4393C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4393C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4393C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4393C1[];
extern  VTBL_ENTRY _ZTV7S4393C1[];
Class_Descriptor cd_S4393C1 = {  "S4393C1", // class name
  bases_S4393C1, 2,
  &(vtc_S4393C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S4393C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4393C1),10, //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  S4395C3  {
  ::S4473C12_nt s4395c3f0;
  int s4395c3f1[2];
  char s4395c3f2;
  virtual  ~S4395C3(); // _ZN7S4395C3D1Ev
  virtual void  v2(); // _ZN7S4395C32v2Ev
  virtual void  v3(); // _ZN7S4395C32v3Ev
  virtual void  v4(); // _ZN7S4395C32v4Ev
  S4395C3(); // tgen
};
//SIG(-1 S4395C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4395C3 ::~S4395C3(){ note_dtor("S4395C3", this);}
void  S4395C3 ::v2(){vfunc_called(this, "_ZN7S4395C32v2Ev");}
void  S4395C3 ::v3(){vfunc_called(this, "_ZN7S4395C32v3Ev");}
void  S4395C3 ::v4(){vfunc_called(this, "_ZN7S4395C32v4Ev");}
S4395C3 ::S4395C3(){ note_ctor("S4395C3", this);} // tgen

static void Test_S4395C3()
{
  extern Class_Descriptor cd_S4395C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4395C3, buf);
    S4395C3 *dp, &lv = *(dp=new (buf) S4395C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4395C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4395C3)");
    check_field_offset(lv, s4395c3f0, ABISELECT(8,4), "S4395C3.s4395c3f0");
    check_field_offset(lv, s4395c3f1, ABISELECT(24,16), "S4395C3.s4395c3f1");
    check_field_offset(lv, s4395c3f2, ABISELECT(32,24), "S4395C3.s4395c3f2");
    test_class_info(&lv, &cd_S4395C3);
    dp->~S4395C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4395C3(Test_S4395C3, "S4395C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4395C3C1Ev();
extern void _ZN7S4395C3D1Ev();
Name_Map name_map_S4395C3[] = {
  NSPAIR(_ZN7S4395C3C1Ev),
  NSPAIR(_ZN7S4395C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4395C3[];
extern void _ZN7S4395C3D1Ev();
extern void _ZN7S4395C3D0Ev();
extern void _ZN7S4395C32v2Ev();
extern void _ZN7S4395C32v3Ev();
extern void _ZN7S4395C32v4Ev();
static  VTBL_ENTRY vtc_S4395C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4395C3[0]),
  (VTBL_ENTRY)&_ZN7S4395C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4395C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4395C3[];
extern  VTBL_ENTRY _ZTV7S4395C3[];
Class_Descriptor cd_S4395C3 = {  "S4395C3", // class name
  0,0,//no base classes
  &(vtc_S4395C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4395C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4395C3),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  S4395C2  : S4395C3 {
  void *s4395c2f0;
  virtual void  v5(); // _ZN7S4395C22v5Ev
  virtual void  v6(); // _ZN7S4395C22v6Ev
  ~S4395C2(); // tgen
  S4395C2(); // tgen
};
//SIG(-1 S4395C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4395C2 ::v5(){vfunc_called(this, "_ZN7S4395C22v5Ev");}
void  S4395C2 ::v6(){vfunc_called(this, "_ZN7S4395C22v6Ev");}
S4395C2 ::~S4395C2(){ note_dtor("S4395C2", this);} // tgen
S4395C2 ::S4395C2(){ note_ctor("S4395C2", this);} // tgen

static void Test_S4395C2()
{
  extern Class_Descriptor cd_S4395C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4395C2, buf);
    S4395C2 *dp, &lv = *(dp=new (buf) S4395C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4395C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4395C2)");
    check_base_class_offset(lv, (S4395C3*), 0, "S4395C2");
    check_field_offset(lv, s4395c2f0, ABISELECT(40,28), "S4395C2.s4395c2f0");
    test_class_info(&lv, &cd_S4395C2);
    dp->~S4395C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4395C2(Test_S4395C2, "S4395C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4395C2C1Ev();
extern void _ZN7S4395C2D1Ev();
Name_Map name_map_S4395C2[] = {
  NSPAIR(_ZN7S4395C2C1Ev),
  NSPAIR(_ZN7S4395C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4395C3;
extern VTBL_ENTRY _ZTI7S4395C3[];
extern  VTBL_ENTRY _ZTV7S4395C3[];
static Base_Class bases_S4395C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4395C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4395C2[];
extern void _ZN7S4395C2D1Ev();
extern void _ZN7S4395C2D0Ev();
extern void _ZN7S4395C32v2Ev();
extern void _ZN7S4395C32v3Ev();
extern void _ZN7S4395C32v4Ev();
extern void _ZN7S4395C22v5Ev();
extern void _ZN7S4395C22v6Ev();
static  VTBL_ENTRY vtc_S4395C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4395C2[0]),
  (VTBL_ENTRY)&_ZN7S4395C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4395C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4395C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4395C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4395C2[];
extern  VTBL_ENTRY _ZTV7S4395C2[];
Class_Descriptor cd_S4395C2 = {  "S4395C2", // class name
  bases_S4395C2, 1,
  &(vtc_S4395C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4395C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4395C2),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  S4395C1  : S4395C2 {
  virtual void  v1(); // _ZN7S4395C12v1Ev
  ~S4395C1(); // tgen
  S4395C1(); // tgen
};
//SIG(1 S4395C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} v1}


void  S4395C1 ::v1(){vfunc_called(this, "_ZN7S4395C12v1Ev");}
S4395C1 ::~S4395C1(){ note_dtor("S4395C1", this);} // tgen
S4395C1 ::S4395C1(){ note_ctor("S4395C1", this);} // tgen

static void Test_S4395C1()
{
  extern Class_Descriptor cd_S4395C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4395C1, buf);
    S4395C1 *dp, &lv = *(dp=new (buf) S4395C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4395C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4395C1)");
    check_base_class_offset(lv, (S4395C3*)(S4395C2*), 0, "S4395C1");
    check_base_class_offset(lv, (S4395C2*), 0, "S4395C1");
    test_class_info(&lv, &cd_S4395C1);
    dp->~S4395C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4395C1(Test_S4395C1, "S4395C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4395C1C1Ev();
extern void _ZN7S4395C1D1Ev();
Name_Map name_map_S4395C1[] = {
  NSPAIR(_ZN7S4395C1C1Ev),
  NSPAIR(_ZN7S4395C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4395C3;
extern VTBL_ENTRY _ZTI7S4395C3[];
extern  VTBL_ENTRY _ZTV7S4395C3[];
extern Class_Descriptor cd_S4395C2;
extern VTBL_ENTRY _ZTI7S4395C2[];
extern  VTBL_ENTRY _ZTV7S4395C2[];
static Base_Class bases_S4395C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4395C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4395C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4395C1[];
extern void _ZN7S4395C1D1Ev();
extern void _ZN7S4395C1D0Ev();
extern void _ZN7S4395C32v2Ev();
extern void _ZN7S4395C32v3Ev();
extern void _ZN7S4395C32v4Ev();
extern void _ZN7S4395C22v5Ev();
extern void _ZN7S4395C22v6Ev();
extern void _ZN7S4395C12v1Ev();
static  VTBL_ENTRY vtc_S4395C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4395C1[0]),
  (VTBL_ENTRY)&_ZN7S4395C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4395C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4395C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4395C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4395C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4395C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4395C1[];
extern  VTBL_ENTRY _ZTV7S4395C1[];
Class_Descriptor cd_S4395C1 = {  "S4395C1", // class name
  bases_S4395C1, 2,
  &(vtc_S4395C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4395C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4395C1),10, //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  S4140C3  {
  ::S4473C12_nt s4140c3f0;
  int s4140c3f1[2];
  char s4140c3f2;
  virtual  ~S4140C3(); // _ZN7S4140C3D1Ev
  virtual void  v1(); // _ZN7S4140C32v1Ev
  virtual void  v2(); // _ZN7S4140C32v2Ev
  virtual void  v3(); // _ZN7S4140C32v3Ev
  S4140C3(); // tgen
};
//SIG(-1 S4140C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4140C3 ::~S4140C3(){ note_dtor("S4140C3", this);}
void  S4140C3 ::v1(){vfunc_called(this, "_ZN7S4140C32v1Ev");}
void  S4140C3 ::v2(){vfunc_called(this, "_ZN7S4140C32v2Ev");}
void  S4140C3 ::v3(){vfunc_called(this, "_ZN7S4140C32v3Ev");}
S4140C3 ::S4140C3(){ note_ctor("S4140C3", this);} // tgen

static void Test_S4140C3()
{
  extern Class_Descriptor cd_S4140C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4140C3, buf);
    S4140C3 *dp, &lv = *(dp=new (buf) S4140C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4140C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4140C3)");
    check_field_offset(lv, s4140c3f0, ABISELECT(8,4), "S4140C3.s4140c3f0");
    check_field_offset(lv, s4140c3f1, ABISELECT(24,16), "S4140C3.s4140c3f1");
    check_field_offset(lv, s4140c3f2, ABISELECT(32,24), "S4140C3.s4140c3f2");
    test_class_info(&lv, &cd_S4140C3);
    dp->~S4140C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4140C3(Test_S4140C3, "S4140C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4140C3C1Ev();
extern void _ZN7S4140C3D1Ev();
Name_Map name_map_S4140C3[] = {
  NSPAIR(_ZN7S4140C3C1Ev),
  NSPAIR(_ZN7S4140C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4140C3[];
extern void _ZN7S4140C3D1Ev();
extern void _ZN7S4140C3D0Ev();
extern void _ZN7S4140C32v1Ev();
extern void _ZN7S4140C32v2Ev();
extern void _ZN7S4140C32v3Ev();
static  VTBL_ENTRY vtc_S4140C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4140C3[0]),
  (VTBL_ENTRY)&_ZN7S4140C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4140C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4140C3[];
extern  VTBL_ENTRY _ZTV7S4140C3[];
Class_Descriptor cd_S4140C3 = {  "S4140C3", // class name
  0,0,//no base classes
  &(vtc_S4140C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4140C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4140C3),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  S4140C2  : S4140C3 {
  void *s4140c2f0;
  virtual void  v4(); // _ZN7S4140C22v4Ev
  virtual void  v5(); // _ZN7S4140C22v5Ev
  ~S4140C2(); // tgen
  S4140C2(); // tgen
};
//SIG(-1 S4140C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4140C2 ::v4(){vfunc_called(this, "_ZN7S4140C22v4Ev");}
void  S4140C2 ::v5(){vfunc_called(this, "_ZN7S4140C22v5Ev");}
S4140C2 ::~S4140C2(){ note_dtor("S4140C2", this);} // tgen
S4140C2 ::S4140C2(){ note_ctor("S4140C2", this);} // tgen

static void Test_S4140C2()
{
  extern Class_Descriptor cd_S4140C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4140C2, buf);
    S4140C2 *dp, &lv = *(dp=new (buf) S4140C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4140C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4140C2)");
    check_base_class_offset(lv, (S4140C3*), 0, "S4140C2");
    check_field_offset(lv, s4140c2f0, ABISELECT(40,28), "S4140C2.s4140c2f0");
    test_class_info(&lv, &cd_S4140C2);
    dp->~S4140C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4140C2(Test_S4140C2, "S4140C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4140C2C1Ev();
extern void _ZN7S4140C2D1Ev();
Name_Map name_map_S4140C2[] = {
  NSPAIR(_ZN7S4140C2C1Ev),
  NSPAIR(_ZN7S4140C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4140C3;
extern VTBL_ENTRY _ZTI7S4140C3[];
extern  VTBL_ENTRY _ZTV7S4140C3[];
static Base_Class bases_S4140C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4140C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S4140C2[];
extern void _ZN7S4140C2D1Ev();
extern void _ZN7S4140C2D0Ev();
extern void _ZN7S4140C32v1Ev();
extern void _ZN7S4140C32v2Ev();
extern void _ZN7S4140C32v3Ev();
extern void _ZN7S4140C22v4Ev();
extern void _ZN7S4140C22v5Ev();
static  VTBL_ENTRY vtc_S4140C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4140C2[0]),
  (VTBL_ENTRY)&_ZN7S4140C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4140C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4140C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4140C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4140C2[];
extern  VTBL_ENTRY _ZTV7S4140C2[];
Class_Descriptor cd_S4140C2 = {  "S4140C2", // class name
  bases_S4140C2, 1,
  &(vtc_S4140C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4140C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4140C2),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  S4140C1  : S4140C2 {
  ~S4140C1(); // tgen
  S4140C1(); // tgen
};
//SIG(1 S4140C1) C1{ BC2{ BC3{ vd v1 v2 v3 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v4 v5 Fp}}


S4140C1 ::~S4140C1(){ note_dtor("S4140C1", this);} // tgen
S4140C1 ::S4140C1(){ note_ctor("S4140C1", this);} // tgen

static void Test_S4140C1()
{
  extern Class_Descriptor cd_S4140C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4140C1, buf);
    S4140C1 *dp, &lv = *(dp=new (buf) S4140C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4140C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4140C1)");
    check_base_class_offset(lv, (S4140C3*)(S4140C2*), 0, "S4140C1");
    check_base_class_offset(lv, (S4140C2*), 0, "S4140C1");
    test_class_info(&lv, &cd_S4140C1);
    dp->~S4140C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4140C1(Test_S4140C1, "S4140C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4140C1C1Ev();
extern void _ZN7S4140C1D1Ev();
Name_Map name_map_S4140C1[] = {
  NSPAIR(_ZN7S4140C1C1Ev),
  NSPAIR(_ZN7S4140C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4140C3;
extern VTBL_ENTRY _ZTI7S4140C3[];
extern  VTBL_ENTRY _ZTV7S4140C3[];
extern Class_Descriptor cd_S4140C2;
extern VTBL_ENTRY _ZTI7S4140C2[];
extern  VTBL_ENTRY _ZTV7S4140C2[];
static Base_Class bases_S4140C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4140C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4140C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4140C1[];
extern void _ZN7S4140C1D1Ev();
extern void _ZN7S4140C1D0Ev();
extern void _ZN7S4140C32v1Ev();
extern void _ZN7S4140C32v2Ev();
extern void _ZN7S4140C32v3Ev();
extern void _ZN7S4140C22v4Ev();
extern void _ZN7S4140C22v5Ev();
static  VTBL_ENTRY vtc_S4140C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4140C1[0]),
  (VTBL_ENTRY)&_ZN7S4140C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4140C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v1Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4140C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4140C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4140C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S4140C1[];
extern  VTBL_ENTRY _ZTV7S4140C1[];
Class_Descriptor cd_S4140C1 = {  "S4140C1", // class name
  bases_S4140C1, 2,
  &(vtc_S4140C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4140C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4140C1),9, //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  S9412C2  {
  ::S4473C12_nt s9412c2f0;
  int s9412c2f1[2];
  char s9412c2f2;
  virtual  ~S9412C2(); // _ZN7S9412C2D1Ev
  virtual void  v3(); // _ZN7S9412C22v3Ev
  virtual void  v4(); // _ZN7S9412C22v4Ev
  virtual void  v5(); // _ZN7S9412C22v5Ev
  S9412C2(); // tgen
};
//SIG(-1 S9412C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9412C2 ::~S9412C2(){ note_dtor("S9412C2", this);}
void  S9412C2 ::v3(){vfunc_called(this, "_ZN7S9412C22v3Ev");}
void  S9412C2 ::v4(){vfunc_called(this, "_ZN7S9412C22v4Ev");}
void  S9412C2 ::v5(){vfunc_called(this, "_ZN7S9412C22v5Ev");}
S9412C2 ::S9412C2(){ note_ctor("S9412C2", this);} // tgen

static void Test_S9412C2()
{
  extern Class_Descriptor cd_S9412C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9412C2, buf);
    S9412C2 *dp, &lv = *(dp=new (buf) S9412C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9412C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9412C2)");
    check_field_offset(lv, s9412c2f0, ABISELECT(8,4), "S9412C2.s9412c2f0");
    check_field_offset(lv, s9412c2f1, ABISELECT(24,16), "S9412C2.s9412c2f1");
    check_field_offset(lv, s9412c2f2, ABISELECT(32,24), "S9412C2.s9412c2f2");
    test_class_info(&lv, &cd_S9412C2);
    dp->~S9412C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9412C2(Test_S9412C2, "S9412C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9412C2C1Ev();
extern void _ZN7S9412C2D1Ev();
Name_Map name_map_S9412C2[] = {
  NSPAIR(_ZN7S9412C2C1Ev),
  NSPAIR(_ZN7S9412C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9412C2[];
extern void _ZN7S9412C2D1Ev();
extern void _ZN7S9412C2D0Ev();
extern void _ZN7S9412C22v3Ev();
extern void _ZN7S9412C22v4Ev();
extern void _ZN7S9412C22v5Ev();
static  VTBL_ENTRY vtc_S9412C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9412C2[0]),
  (VTBL_ENTRY)&_ZN7S9412C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9412C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9412C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9412C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9412C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9412C2[];
extern  VTBL_ENTRY _ZTV7S9412C2[];
Class_Descriptor cd_S9412C2 = {  "S9412C2", // class name
  0,0,//no base classes
  &(vtc_S9412C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9412C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9412C2),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  S9412C1  : S9412C2 {
  void *s9412c1f0;
  virtual  ~S9412C1(); // _ZN7S9412C1D1Ev
  virtual void  v1(); // _ZN7S9412C12v1Ev
  virtual void  v2(); // _ZN7S9412C12v2Ev
  S9412C1(); // tgen
};
//SIG(1 S9412C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp}


 S9412C1 ::~S9412C1(){ note_dtor("S9412C1", this);}
void  S9412C1 ::v1(){vfunc_called(this, "_ZN7S9412C12v1Ev");}
void  S9412C1 ::v2(){vfunc_called(this, "_ZN7S9412C12v2Ev");}
S9412C1 ::S9412C1(){ note_ctor("S9412C1", this);} // tgen

static void Test_S9412C1()
{
  extern Class_Descriptor cd_S9412C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S9412C1, buf);
    S9412C1 *dp, &lv = *(dp=new (buf) S9412C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S9412C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9412C1)");
    check_base_class_offset(lv, (S9412C2*), 0, "S9412C1");
    check_field_offset(lv, s9412c1f0, ABISELECT(40,28), "S9412C1.s9412c1f0");
    test_class_info(&lv, &cd_S9412C1);
    dp->~S9412C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9412C1(Test_S9412C1, "S9412C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S9412C1C1Ev();
extern void _ZN7S9412C1D1Ev();
Name_Map name_map_S9412C1[] = {
  NSPAIR(_ZN7S9412C1C1Ev),
  NSPAIR(_ZN7S9412C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9412C2;
extern VTBL_ENTRY _ZTI7S9412C2[];
extern  VTBL_ENTRY _ZTV7S9412C2[];
static Base_Class bases_S9412C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9412C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S9412C1[];
extern void _ZN7S9412C1D1Ev();
extern void _ZN7S9412C1D0Ev();
extern void _ZN7S9412C22v3Ev();
extern void _ZN7S9412C22v4Ev();
extern void _ZN7S9412C22v5Ev();
extern void _ZN7S9412C12v1Ev();
extern void _ZN7S9412C12v2Ev();
static  VTBL_ENTRY vtc_S9412C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9412C1[0]),
  (VTBL_ENTRY)&_ZN7S9412C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9412C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9412C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9412C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9412C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9412C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9412C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9412C1[];
extern  VTBL_ENTRY _ZTV7S9412C1[];
Class_Descriptor cd_S9412C1 = {  "S9412C1", // class name
  bases_S9412C1, 1,
  &(vtc_S9412C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S9412C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9412C1),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  S9213C2  {
  ::S4473C12_nt s9213c2f0;
  int s9213c2f1[2];
  char s9213c2f2;
  virtual  ~S9213C2(); // _ZN7S9213C2D1Ev
  virtual void  v3(); // _ZN7S9213C22v3Ev
  virtual void  v4(); // _ZN7S9213C22v4Ev
  virtual void  v5(); // _ZN7S9213C22v5Ev
  S9213C2(); // tgen
};
//SIG(-1 S9213C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9213C2 ::~S9213C2(){ note_dtor("S9213C2", this);}
void  S9213C2 ::v3(){vfunc_called(this, "_ZN7S9213C22v3Ev");}
void  S9213C2 ::v4(){vfunc_called(this, "_ZN7S9213C22v4Ev");}
void  S9213C2 ::v5(){vfunc_called(this, "_ZN7S9213C22v5Ev");}
S9213C2 ::S9213C2(){ note_ctor("S9213C2", this);} // tgen

static void Test_S9213C2()
{
  extern Class_Descriptor cd_S9213C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9213C2, buf);
    S9213C2 *dp, &lv = *(dp=new (buf) S9213C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9213C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9213C2)");
    check_field_offset(lv, s9213c2f0, ABISELECT(8,4), "S9213C2.s9213c2f0");
    check_field_offset(lv, s9213c2f1, ABISELECT(24,16), "S9213C2.s9213c2f1");
    check_field_offset(lv, s9213c2f2, ABISELECT(32,24), "S9213C2.s9213c2f2");
    test_class_info(&lv, &cd_S9213C2);
    dp->~S9213C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9213C2(Test_S9213C2, "S9213C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9213C2C1Ev();
extern void _ZN7S9213C2D1Ev();
Name_Map name_map_S9213C2[] = {
  NSPAIR(_ZN7S9213C2C1Ev),
  NSPAIR(_ZN7S9213C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9213C2[];
extern void _ZN7S9213C2D1Ev();
extern void _ZN7S9213C2D0Ev();
extern void _ZN7S9213C22v3Ev();
extern void _ZN7S9213C22v4Ev();
extern void _ZN7S9213C22v5Ev();
static  VTBL_ENTRY vtc_S9213C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9213C2[0]),
  (VTBL_ENTRY)&_ZN7S9213C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9213C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9213C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9213C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9213C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9213C2[];
extern  VTBL_ENTRY _ZTV7S9213C2[];
Class_Descriptor cd_S9213C2 = {  "S9213C2", // class name
  0,0,//no base classes
  &(vtc_S9213C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9213C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9213C2),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  S9213C1  : S9213C2 {
  ::S4473C12_nt s9213c1f0;
  virtual void  v1(); // _ZN7S9213C12v1Ev
  virtual void  v2(); // _ZN7S9213C12v2Ev
  ~S9213C1(); // tgen
  S9213C1(); // tgen
};
//SIG(1 S9213C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 FC3}


void  S9213C1 ::v1(){vfunc_called(this, "_ZN7S9213C12v1Ev");}
void  S9213C1 ::v2(){vfunc_called(this, "_ZN7S9213C12v2Ev");}
S9213C1 ::~S9213C1(){ note_dtor("S9213C1", this);} // tgen
S9213C1 ::S9213C1(){ note_ctor("S9213C1", this);} // tgen

static void Test_S9213C1()
{
  extern Class_Descriptor cd_S9213C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S9213C1, buf);
    S9213C1 *dp, &lv = *(dp=new (buf) S9213C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S9213C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9213C1)");
    check_base_class_offset(lv, (S9213C2*), 0, "S9213C1");
    check_field_offset(lv, s9213c1f0, ABISELECT(40,28), "S9213C1.s9213c1f0");
    test_class_info(&lv, &cd_S9213C1);
    dp->~S9213C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9213C1(Test_S9213C1, "S9213C1", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S9213C1C1Ev();
extern void _ZN7S9213C1D1Ev();
Name_Map name_map_S9213C1[] = {
  NSPAIR(_ZN7S9213C1C1Ev),
  NSPAIR(_ZN7S9213C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9213C2;
extern VTBL_ENTRY _ZTI7S9213C2[];
extern  VTBL_ENTRY _ZTV7S9213C2[];
static Base_Class bases_S9213C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9213C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S9213C1[];
extern void _ZN7S9213C1D1Ev();
extern void _ZN7S9213C1D0Ev();
extern void _ZN7S9213C22v3Ev();
extern void _ZN7S9213C22v4Ev();
extern void _ZN7S9213C22v5Ev();
extern void _ZN7S9213C12v1Ev();
extern void _ZN7S9213C12v2Ev();
static  VTBL_ENTRY vtc_S9213C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9213C1[0]),
  (VTBL_ENTRY)&_ZN7S9213C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9213C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9213C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9213C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9213C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9213C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9213C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9213C1[];
extern  VTBL_ENTRY _ZTV7S9213C1[];
Class_Descriptor cd_S9213C1 = {  "S9213C1", // class name
  bases_S9213C1, 1,
  &(vtc_S9213C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S9213C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9213C1),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  S9223C2  {
  ::S4473C12_nt s9223c2f0;
  int s9223c2f1[2];
  char s9223c2f2;
  virtual  ~S9223C2(); // _ZN7S9223C2D1Ev
  virtual void  v3(); // _ZN7S9223C22v3Ev
  virtual void  v4(); // _ZN7S9223C22v4Ev
  virtual void  v5(); // _ZN7S9223C22v5Ev
  S9223C2(); // tgen
};
//SIG(-1 S9223C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9223C2 ::~S9223C2(){ note_dtor("S9223C2", this);}
void  S9223C2 ::v3(){vfunc_called(this, "_ZN7S9223C22v3Ev");}
void  S9223C2 ::v4(){vfunc_called(this, "_ZN7S9223C22v4Ev");}
void  S9223C2 ::v5(){vfunc_called(this, "_ZN7S9223C22v5Ev");}
S9223C2 ::S9223C2(){ note_ctor("S9223C2", this);} // tgen

static void Test_S9223C2()
{
  extern Class_Descriptor cd_S9223C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9223C2, buf);
    S9223C2 *dp, &lv = *(dp=new (buf) S9223C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9223C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9223C2)");
    check_field_offset(lv, s9223c2f0, ABISELECT(8,4), "S9223C2.s9223c2f0");
    check_field_offset(lv, s9223c2f1, ABISELECT(24,16), "S9223C2.s9223c2f1");
    check_field_offset(lv, s9223c2f2, ABISELECT(32,24), "S9223C2.s9223c2f2");
    test_class_info(&lv, &cd_S9223C2);
    dp->~S9223C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9223C2(Test_S9223C2, "S9223C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9223C2C1Ev();
extern void _ZN7S9223C2D1Ev();
Name_Map name_map_S9223C2[] = {
  NSPAIR(_ZN7S9223C2C1Ev),
  NSPAIR(_ZN7S9223C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9223C2[];
extern void _ZN7S9223C2D1Ev();
extern void _ZN7S9223C2D0Ev();
extern void _ZN7S9223C22v3Ev();
extern void _ZN7S9223C22v4Ev();
extern void _ZN7S9223C22v5Ev();
static  VTBL_ENTRY vtc_S9223C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9223C2[0]),
  (VTBL_ENTRY)&_ZN7S9223C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9223C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9223C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9223C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9223C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9223C2[];
extern  VTBL_ENTRY _ZTV7S9223C2[];
Class_Descriptor cd_S9223C2 = {  "S9223C2", // class name
  0,0,//no base classes
  &(vtc_S9223C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9223C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9223C2),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  S9223C1  : S9223C2 {
  int s9223c1f0;
  virtual void  v1(); // _ZN7S9223C12v1Ev
  virtual void  v2(); // _ZN7S9223C12v2Ev
  ~S9223C1(); // tgen
  S9223C1(); // tgen
};
//SIG(1 S9223C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fi}


void  S9223C1 ::v1(){vfunc_called(this, "_ZN7S9223C12v1Ev");}
void  S9223C1 ::v2(){vfunc_called(this, "_ZN7S9223C12v2Ev");}
S9223C1 ::~S9223C1(){ note_dtor("S9223C1", this);} // tgen
S9223C1 ::S9223C1(){ note_ctor("S9223C1", this);} // tgen

static void Test_S9223C1()
{
  extern Class_Descriptor cd_S9223C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S9223C1, buf);
    S9223C1 *dp, &lv = *(dp=new (buf) S9223C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S9223C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9223C1)");
    check_base_class_offset(lv, (S9223C2*), 0, "S9223C1");
    check_field_offset(lv, s9223c1f0, ABISELECT(36,28), "S9223C1.s9223c1f0");
    test_class_info(&lv, &cd_S9223C1);
    dp->~S9223C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9223C1(Test_S9223C1, "S9223C1", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN7S9223C1C1Ev();
extern void _ZN7S9223C1D1Ev();
Name_Map name_map_S9223C1[] = {
  NSPAIR(_ZN7S9223C1C1Ev),
  NSPAIR(_ZN7S9223C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9223C2;
extern VTBL_ENTRY _ZTI7S9223C2[];
extern  VTBL_ENTRY _ZTV7S9223C2[];
static Base_Class bases_S9223C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9223C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S9223C1[];
extern void _ZN7S9223C1D1Ev();
extern void _ZN7S9223C1D0Ev();
extern void _ZN7S9223C22v3Ev();
extern void _ZN7S9223C22v4Ev();
extern void _ZN7S9223C22v5Ev();
extern void _ZN7S9223C12v1Ev();
extern void _ZN7S9223C12v2Ev();
static  VTBL_ENTRY vtc_S9223C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9223C1[0]),
  (VTBL_ENTRY)&_ZN7S9223C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9223C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9223C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9223C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9223C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9223C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9223C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9223C1[];
extern  VTBL_ENTRY _ZTV7S9223C1[];
Class_Descriptor cd_S9223C1 = {  "S9223C1", // class name
  bases_S9223C1, 1,
  &(vtc_S9223C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI7S9223C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9223C1),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  S9240C2  {
  ::S4473C12_nt s9240c2f0;
  int s9240c2f1[2];
  char s9240c2f2;
  virtual  ~S9240C2(); // _ZN7S9240C2D1Ev
  virtual void  v3(); // _ZN7S9240C22v3Ev
  virtual void  v4(); // _ZN7S9240C22v4Ev
  virtual void  v5(); // _ZN7S9240C22v5Ev
  S9240C2(); // tgen
};
//SIG(-1 S9240C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9240C2 ::~S9240C2(){ note_dtor("S9240C2", this);}
void  S9240C2 ::v3(){vfunc_called(this, "_ZN7S9240C22v3Ev");}
void  S9240C2 ::v4(){vfunc_called(this, "_ZN7S9240C22v4Ev");}
void  S9240C2 ::v5(){vfunc_called(this, "_ZN7S9240C22v5Ev");}
S9240C2 ::S9240C2(){ note_ctor("S9240C2", this);} // tgen

static void Test_S9240C2()
{
  extern Class_Descriptor cd_S9240C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9240C2, buf);
    S9240C2 *dp, &lv = *(dp=new (buf) S9240C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9240C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9240C2)");
    check_field_offset(lv, s9240c2f0, ABISELECT(8,4), "S9240C2.s9240c2f0");
    check_field_offset(lv, s9240c2f1, ABISELECT(24,16), "S9240C2.s9240c2f1");
    check_field_offset(lv, s9240c2f2, ABISELECT(32,24), "S9240C2.s9240c2f2");
    test_class_info(&lv, &cd_S9240C2);
    dp->~S9240C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9240C2(Test_S9240C2, "S9240C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9240C2C1Ev();
extern void _ZN7S9240C2D1Ev();
Name_Map name_map_S9240C2[] = {
  NSPAIR(_ZN7S9240C2C1Ev),
  NSPAIR(_ZN7S9240C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9240C2[];
extern void _ZN7S9240C2D1Ev();
extern void _ZN7S9240C2D0Ev();
extern void _ZN7S9240C22v3Ev();
extern void _ZN7S9240C22v4Ev();
extern void _ZN7S9240C22v5Ev();
static  VTBL_ENTRY vtc_S9240C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9240C2[0]),
  (VTBL_ENTRY)&_ZN7S9240C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9240C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9240C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9240C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9240C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9240C2[];
extern  VTBL_ENTRY _ZTV7S9240C2[];
Class_Descriptor cd_S9240C2 = {  "S9240C2", // class name
  0,0,//no base classes
  &(vtc_S9240C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9240C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9240C2),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  S9240C1  : S9240C2 {
  virtual void  v1(); // _ZN7S9240C12v1Ev
  virtual void  v2(); // _ZN7S9240C12v2Ev
  ~S9240C1(); // tgen
  S9240C1(); // tgen
};
//SIG(1 S9240C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2}


void  S9240C1 ::v1(){vfunc_called(this, "_ZN7S9240C12v1Ev");}
void  S9240C1 ::v2(){vfunc_called(this, "_ZN7S9240C12v2Ev");}
S9240C1 ::~S9240C1(){ note_dtor("S9240C1", this);} // tgen
S9240C1 ::S9240C1(){ note_ctor("S9240C1", this);} // tgen

static void Test_S9240C1()
{
  extern Class_Descriptor cd_S9240C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9240C1, buf);
    S9240C1 *dp, &lv = *(dp=new (buf) S9240C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9240C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9240C1)");
    check_base_class_offset(lv, (S9240C2*), 0, "S9240C1");
    test_class_info(&lv, &cd_S9240C1);
    dp->~S9240C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9240C1(Test_S9240C1, "S9240C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9240C1C1Ev();
extern void _ZN7S9240C1D1Ev();
Name_Map name_map_S9240C1[] = {
  NSPAIR(_ZN7S9240C1C1Ev),
  NSPAIR(_ZN7S9240C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9240C2;
extern VTBL_ENTRY _ZTI7S9240C2[];
extern  VTBL_ENTRY _ZTV7S9240C2[];
static Base_Class bases_S9240C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9240C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S9240C1[];
extern void _ZN7S9240C1D1Ev();
extern void _ZN7S9240C1D0Ev();
extern void _ZN7S9240C22v3Ev();
extern void _ZN7S9240C22v4Ev();
extern void _ZN7S9240C22v5Ev();
extern void _ZN7S9240C12v1Ev();
extern void _ZN7S9240C12v2Ev();
static  VTBL_ENTRY vtc_S9240C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9240C1[0]),
  (VTBL_ENTRY)&_ZN7S9240C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9240C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9240C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9240C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9240C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9240C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9240C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9240C1[];
extern  VTBL_ENTRY _ZTV7S9240C1[];
Class_Descriptor cd_S9240C1 = {  "S9240C1", // class name
  bases_S9240C1, 1,
  &(vtc_S9240C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9240C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9240C1),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  S6922C2  {
  virtual void  v5(); // _ZN7S6922C22v5Ev
  virtual void  v6(); // _ZN7S6922C22v6Ev
  virtual void  v7(); // _ZN7S6922C22v7Ev
  virtual void  v8(); // _ZN7S6922C22v8Ev
  virtual void  v9(); // _ZN7S6922C22v9Ev
  virtual void  v10(); // _ZN7S6922C23v10Ev
  ~S6922C2(); // tgen
  S6922C2(); // tgen
};
//SIG(-1 S6922C2) C1{ v1 v2 v3 v4 v5 v6}


void  S6922C2 ::v5(){vfunc_called(this, "_ZN7S6922C22v5Ev");}
void  S6922C2 ::v6(){vfunc_called(this, "_ZN7S6922C22v6Ev");}
void  S6922C2 ::v7(){vfunc_called(this, "_ZN7S6922C22v7Ev");}
void  S6922C2 ::v8(){vfunc_called(this, "_ZN7S6922C22v8Ev");}
void  S6922C2 ::v9(){vfunc_called(this, "_ZN7S6922C22v9Ev");}
void  S6922C2 ::v10(){vfunc_called(this, "_ZN7S6922C23v10Ev");}
S6922C2 ::~S6922C2(){ note_dtor("S6922C2", this);} // tgen
S6922C2 ::S6922C2(){ note_ctor("S6922C2", this);} // tgen

static void Test_S6922C2()
{
  extern Class_Descriptor cd_S6922C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6922C2, buf);
    S6922C2 *dp, &lv = *(dp=new (buf) S6922C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6922C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6922C2)");
    test_class_info(&lv, &cd_S6922C2);
    dp->~S6922C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6922C2(Test_S6922C2, "S6922C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6922C2C1Ev();
extern void _ZN7S6922C2D1Ev();
Name_Map name_map_S6922C2[] = {
  NSPAIR(_ZN7S6922C2C1Ev),
  NSPAIR(_ZN7S6922C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6922C2[];
extern void _ZN7S6922C22v5Ev();
extern void _ZN7S6922C22v6Ev();
extern void _ZN7S6922C22v7Ev();
extern void _ZN7S6922C22v8Ev();
extern void _ZN7S6922C22v9Ev();
extern void _ZN7S6922C23v10Ev();
static  VTBL_ENTRY vtc_S6922C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6922C2[0]),
  (VTBL_ENTRY)&_ZN7S6922C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6922C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6922C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6922C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6922C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6922C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S6922C2[];
extern  VTBL_ENTRY _ZTV7S6922C2[];
Class_Descriptor cd_S6922C2 = {  "S6922C2", // class name
  0,0,//no base classes
  &(vtc_S6922C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6922C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6922C2),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  S6922C1  : S6922C2 {
  void *s6922c1f0;
  __tsi64 s6922c1f1;
  virtual  ~S6922C1(); // _ZN7S6922C1D1Ev
  virtual void  v1(); // _ZN7S6922C12v1Ev
  virtual void  v2(); // _ZN7S6922C12v2Ev
  virtual void  v3(); // _ZN7S6922C12v3Ev
  virtual void  v4(); // _ZN7S6922C12v4Ev
  S6922C1(); // tgen
};
//SIG(1 S6922C1) C1{ BC2{ v5 v6 v7 v8 v9 v10} vd v1 v2 v3 v4 Fp FL}


 S6922C1 ::~S6922C1(){ note_dtor("S6922C1", this);}
void  S6922C1 ::v1(){vfunc_called(this, "_ZN7S6922C12v1Ev");}
void  S6922C1 ::v2(){vfunc_called(this, "_ZN7S6922C12v2Ev");}
void  S6922C1 ::v3(){vfunc_called(this, "_ZN7S6922C12v3Ev");}
void  S6922C1 ::v4(){vfunc_called(this, "_ZN7S6922C12v4Ev");}
S6922C1 ::S6922C1(){ note_ctor("S6922C1", this);} // tgen

static void Test_S6922C1()
{
  extern Class_Descriptor cd_S6922C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S6922C1, buf);
    S6922C1 *dp, &lv = *(dp=new (buf) S6922C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S6922C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6922C1)");
    check_base_class_offset(lv, (S6922C2*), 0, "S6922C1");
    check_field_offset(lv, s6922c1f0, ABISELECT(8,4), "S6922C1.s6922c1f0");
    check_field_offset(lv, s6922c1f1, ABISELECT(16,8), "S6922C1.s6922c1f1");
    test_class_info(&lv, &cd_S6922C1);
    dp->~S6922C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6922C1(Test_S6922C1, "S6922C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S6922C1C1Ev();
extern void _ZN7S6922C1D1Ev();
Name_Map name_map_S6922C1[] = {
  NSPAIR(_ZN7S6922C1C1Ev),
  NSPAIR(_ZN7S6922C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6922C2;
extern VTBL_ENTRY _ZTI7S6922C2[];
extern  VTBL_ENTRY _ZTV7S6922C2[];
static Base_Class bases_S6922C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6922C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S6922C1[];
extern void _ZN7S6922C22v5Ev();
extern void _ZN7S6922C22v6Ev();
extern void _ZN7S6922C22v7Ev();
extern void _ZN7S6922C22v8Ev();
extern void _ZN7S6922C22v9Ev();
extern void _ZN7S6922C23v10Ev();
extern void _ZN7S6922C1D1Ev();
extern void _ZN7S6922C1D0Ev();
extern void _ZN7S6922C12v1Ev();
extern void _ZN7S6922C12v2Ev();
extern void _ZN7S6922C12v3Ev();
extern void _ZN7S6922C12v4Ev();
static  VTBL_ENTRY vtc_S6922C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6922C1[0]),
  (VTBL_ENTRY)&_ZN7S6922C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6922C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6922C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6922C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6922C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6922C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6922C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6922C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6922C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6922C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6922C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6922C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S6922C1[];
extern  VTBL_ENTRY _ZTV7S6922C1[];
Class_Descriptor cd_S6922C1 = {  "S6922C1", // class name
  bases_S6922C1, 1,
  &(vtc_S6922C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S6922C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6922C1),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  S20268C2  {
  virtual void  v5(); // _ZN8S20268C22v5Ev
  virtual void  v6(); // _ZN8S20268C22v6Ev
  virtual void  v7(); // _ZN8S20268C22v7Ev
  virtual void  v8(); // _ZN8S20268C22v8Ev
  virtual void  v9(); // _ZN8S20268C22v9Ev
  virtual void  v10(); // _ZN8S20268C23v10Ev
  ~S20268C2(); // tgen
  S20268C2(); // tgen
};
//SIG(-1 S20268C2) C1{ v1 v2 v3 v4 v5 v6}


void  S20268C2 ::v5(){vfunc_called(this, "_ZN8S20268C22v5Ev");}
void  S20268C2 ::v6(){vfunc_called(this, "_ZN8S20268C22v6Ev");}
void  S20268C2 ::v7(){vfunc_called(this, "_ZN8S20268C22v7Ev");}
void  S20268C2 ::v8(){vfunc_called(this, "_ZN8S20268C22v8Ev");}
void  S20268C2 ::v9(){vfunc_called(this, "_ZN8S20268C22v9Ev");}
void  S20268C2 ::v10(){vfunc_called(this, "_ZN8S20268C23v10Ev");}
S20268C2 ::~S20268C2(){ note_dtor("S20268C2", this);} // tgen
S20268C2 ::S20268C2(){ note_ctor("S20268C2", this);} // tgen

static void Test_S20268C2()
{
  extern Class_Descriptor cd_S20268C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20268C2, buf);
    S20268C2 *dp, &lv = *(dp=new (buf) S20268C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20268C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20268C2)");
    test_class_info(&lv, &cd_S20268C2);
    dp->~S20268C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20268C2(Test_S20268C2, "S20268C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20268C2C1Ev();
extern void _ZN8S20268C2D1Ev();
Name_Map name_map_S20268C2[] = {
  NSPAIR(_ZN8S20268C2C1Ev),
  NSPAIR(_ZN8S20268C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20268C2[];
extern void _ZN8S20268C22v5Ev();
extern void _ZN8S20268C22v6Ev();
extern void _ZN8S20268C22v7Ev();
extern void _ZN8S20268C22v8Ev();
extern void _ZN8S20268C22v9Ev();
extern void _ZN8S20268C23v10Ev();
static  VTBL_ENTRY vtc_S20268C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20268C2[0]),
  (VTBL_ENTRY)&_ZN8S20268C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20268C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20268C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20268C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20268C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20268C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S20268C2[];
extern  VTBL_ENTRY _ZTV8S20268C2[];
Class_Descriptor cd_S20268C2 = {  "S20268C2", // class name
  0,0,//no base classes
  &(vtc_S20268C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20268C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20268C2),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  S20268C1  : virtual S20268C2 {
  char s20268c1f0:8;
  virtual void  v1(); // _ZN8S20268C12v1Ev
  virtual void  v2(); // _ZN8S20268C12v2Ev
  virtual void  v3(); // _ZN8S20268C12v3Ev
  virtual void  v4(); // _ZN8S20268C12v4Ev
  ~S20268C1(); // tgen
  S20268C1(); // tgen
};
//SIG(1 S20268C1) C1{ VBC2{ v5 v6 v7 v8 v9 v10} v1 v2 v3 v4 Fc:8}


void  S20268C1 ::v1(){vfunc_called(this, "_ZN8S20268C12v1Ev");}
void  S20268C1 ::v2(){vfunc_called(this, "_ZN8S20268C12v2Ev");}
void  S20268C1 ::v3(){vfunc_called(this, "_ZN8S20268C12v3Ev");}
void  S20268C1 ::v4(){vfunc_called(this, "_ZN8S20268C12v4Ev");}
S20268C1 ::~S20268C1(){ note_dtor("S20268C1", this);} // tgen
S20268C1 ::S20268C1(){ note_ctor("S20268C1", this);} // tgen

static void Test_S20268C1()
{
  extern Class_Descriptor cd_S20268C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20268C1, buf);
    S20268C1 *dp, &lv = *(dp=new (buf) S20268C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20268C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20268C1)");
    check_base_class_offset(lv, (S20268C2*), 0, "S20268C1");
    set_bf_and_test(lv, s20268c1f0, ABISELECT(8,4), 0, 8, 1, "S20268C1");
    set_bf_and_test(lv, s20268c1f0, ABISELECT(8,4), 0, 8, hide_sll(1LL<<7), "S20268C1");
    test_class_info(&lv, &cd_S20268C1);
    dp->~S20268C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20268C1(Test_S20268C1, "S20268C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20268C1C1Ev();
extern void _ZN8S20268C1D1Ev();
Name_Map name_map_S20268C1[] = {
  NSPAIR(_ZN8S20268C1C1Ev),
  NSPAIR(_ZN8S20268C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20268C2;
extern VTBL_ENTRY _ZTI8S20268C2[];
extern  VTBL_ENTRY _ZTV8S20268C2[];
static Base_Class bases_S20268C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20268C2,    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 _ZTI8S20268C1[];
extern void _ZN8S20268C22v5Ev();
extern void _ZN8S20268C22v6Ev();
extern void _ZN8S20268C22v7Ev();
extern void _ZN8S20268C22v8Ev();
extern void _ZN8S20268C22v9Ev();
extern void _ZN8S20268C23v10Ev();
extern void _ZN8S20268C12v1Ev();
extern void _ZN8S20268C12v2Ev();
extern void _ZN8S20268C12v3Ev();
extern void _ZN8S20268C12v4Ev();
static  VTBL_ENTRY vtc_S20268C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20268C1[0]),
  (VTBL_ENTRY)&_ZN8S20268C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20268C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20268C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20268C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20268C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20268C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20268C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20268C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20268C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20268C12v4Ev,
};
extern VTBL_ENTRY _ZTV8S20268C1[];
static  VTT_ENTRY vtt_S20268C1[] = {
  {&(_ZTV8S20268C1[9]),  9,19},
  {&(_ZTV8S20268C1[9]),  9,19},
};
extern VTBL_ENTRY _ZTI8S20268C1[];
extern  VTBL_ENTRY _ZTV8S20268C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20268C1[];
Class_Descriptor cd_S20268C1 = {  "S20268C1", // class name
  bases_S20268C1, 1,
  &(vtc_S20268C1[0]), // expected_vtbl_contents
  &(vtt_S20268C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20268C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20268C1),19, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20268C1),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  S19966C2  {
  long double s19966c2f0;
  __tsi64 s19966c2f1[9];
  virtual  ~S19966C2(); // _ZN8S19966C2D1Ev
  virtual void  v1(); // _ZN8S19966C22v1Ev
  virtual void  v2(); // _ZN8S19966C22v2Ev
  S19966C2(); // tgen
};
//SIG(-1 S19966C2) C1{ vd v1 v2 FD FL[9]}


 S19966C2 ::~S19966C2(){ note_dtor("S19966C2", this);}
void  S19966C2 ::v1(){vfunc_called(this, "_ZN8S19966C22v1Ev");}
void  S19966C2 ::v2(){vfunc_called(this, "_ZN8S19966C22v2Ev");}
S19966C2 ::S19966C2(){ note_ctor("S19966C2", this);} // tgen

static void Test_S19966C2()
{
  extern Class_Descriptor cd_S19966C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,23)];
    init_test(&cd_S19966C2, buf);
    S19966C2 *dp, &lv = *(dp=new (buf) S19966C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S19966C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19966C2)");
    check_field_offset(lv, s19966c2f0, ABISELECT(16,4), "S19966C2.s19966c2f0");
    check_field_offset(lv, s19966c2f1, ABISELECT(32,16), "S19966C2.s19966c2f1");
    test_class_info(&lv, &cd_S19966C2);
    dp->~S19966C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19966C2(Test_S19966C2, "S19966C2", ABISELECT(112,88));

#else // __cplusplus

extern void _ZN8S19966C2C1Ev();
extern void _ZN8S19966C2D1Ev();
Name_Map name_map_S19966C2[] = {
  NSPAIR(_ZN8S19966C2C1Ev),
  NSPAIR(_ZN8S19966C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19966C2[];
extern void _ZN8S19966C2D1Ev();
extern void _ZN8S19966C2D0Ev();
extern void _ZN8S19966C22v1Ev();
extern void _ZN8S19966C22v2Ev();
static  VTBL_ENTRY vtc_S19966C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19966C2[0]),
  (VTBL_ENTRY)&_ZN8S19966C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19966C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19966C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19966C22v2Ev,
};
extern VTBL_ENTRY _ZTI8S19966C2[];
extern  VTBL_ENTRY _ZTV8S19966C2[];
Class_Descriptor cd_S19966C2 = {  "S19966C2", // class name
  0,0,//no base classes
  &(vtc_S19966C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,88), // object size
  NSPAIRA(_ZTI8S19966C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19966C2),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  S19966C1  : virtual S19966C2 {
  char s19966c1f0;
  ::S19966C2 s19966c1f1;
  __tsi64 s19966c1f2;
  virtual  ~S19966C1(); // _ZN8S19966C1D2Ev
  S19966C1(); // tgen
};
//SIG(1 S19966C1) C1{ VBC2{ vd v1 v2 FD FL[9]} vd Fc FC2 FL}


 S19966C1 ::~S19966C1(){ note_dtor("S19966C1", this);}
S19966C1 ::S19966C1(){ note_ctor("S19966C1", this);} // tgen

static void Test_S19966C1()
{
  extern Class_Descriptor cd_S19966C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(17,49)];
    init_test(&cd_S19966C1, buf);
    S19966C1 *dp, &lv = *(dp=new (buf) S19966C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,192), "sizeof(S19966C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19966C1)");
    check_base_class_offset(lv, (S19966C2*), ABISELECT(144,104), "S19966C1");
    check_field_offset(lv, s19966c1f0, ABISELECT(8,4), "S19966C1.s19966c1f0");
    check_field_offset(lv, s19966c1f1, ABISELECT(16,8), "S19966C1.s19966c1f1");
    check_field_offset(lv, s19966c1f2, ABISELECT(128,96), "S19966C1.s19966c1f2");
    test_class_info(&lv, &cd_S19966C1);
    dp->~S19966C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19966C1(Test_S19966C1, "S19966C1", ABISELECT(256,192));

#else // __cplusplus

extern void _ZN8S19966C1C1Ev();
extern void _ZN8S19966C1D2Ev();
Name_Map name_map_S19966C1[] = {
  NSPAIR(_ZN8S19966C1C1Ev),
  NSPAIR(_ZN8S19966C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19966C2;
extern VTBL_ENTRY _ZTI8S19966C2[];
extern  VTBL_ENTRY _ZTV8S19966C2[];
static Base_Class bases_S19966C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19966C2,    ABISELECT(144,104), //bcp->offset
    5, //bcp->virtual_function_table_offset
    5, //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 _ZTI8S19966C1[];
extern void _ZN8S19966C1D1Ev();
extern void _ZN8S19966C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19966C1D1Ev,_ZTv0_n12_N8S19966C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S19966C1D1Ev,_ZThn104_N8S19966C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19966C1D0Ev,_ZTv0_n12_N8S19966C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S19966C1D0Ev,_ZThn104_N8S19966C1D0Ev)() __attribute__((weak));
extern void _ZN8S19966C22v1Ev();
extern void _ZN8S19966C22v2Ev();
static  VTBL_ENTRY vtc_S19966C1[] = {
  ABISELECT(144,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S19966C1[0]),
  (VTBL_ENTRY)&_ZN8S19966C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19966C1D0Ev,
  0,
  0,
  ABISELECT(-144,-104),
  ABISELECT(-144,-104),
  (VTBL_ENTRY)&(_ZTI8S19966C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19966C1D1Ev,_ZTv0_n12_N8S19966C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19966C1D0Ev,_ZTv0_n12_N8S19966C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19966C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19966C22v2Ev,
};
extern VTBL_ENTRY _ZTV8S19966C1[];
static  VTT_ENTRY vtt_S19966C1[] = {
  {&(_ZTV8S19966C1[3]),  3,14},
  {&(_ZTV8S19966C1[10]),  10,14},
};
extern VTBL_ENTRY _ZTI8S19966C1[];
extern  VTBL_ENTRY _ZTV8S19966C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19966C1[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19966C1D0Ev,_ZTv0_n12_N8S19966C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19966C1D0Ev,_ZThn104_N8S19966C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19966C1D1Ev,_ZTv0_n12_N8S19966C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S19966C1D1Ev,_ZThn104_N8S19966C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19966C1 = {  "S19966C1", // class name
  bases_S19966C1, 1,
  &(vtc_S19966C1[0]), // expected_vtbl_contents
  &(vtt_S19966C1[0]), // expected_vtt_contents
  ABISELECT(256,192), // object size
  NSPAIRA(_ZTI8S19966C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19966C1),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19966C1),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7542C3  {
  int s7542c3f0;
  virtual void  v2(); // _ZN7S7542C32v2Ev
  ~S7542C3(); // tgen
  S7542C3(); // tgen
};
//SIG(-1 S7542C3) C1{ v1 Fi}


void  S7542C3 ::v2(){vfunc_called(this, "_ZN7S7542C32v2Ev");}
S7542C3 ::~S7542C3(){ note_dtor("S7542C3", this);} // tgen
S7542C3 ::S7542C3(){ note_ctor("S7542C3", this);} // tgen

static void Test_S7542C3()
{
  extern Class_Descriptor cd_S7542C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7542C3, buf);
    S7542C3 *dp, &lv = *(dp=new (buf) S7542C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7542C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7542C3)");
    check_field_offset(lv, s7542c3f0, ABISELECT(8,4), "S7542C3.s7542c3f0");
    test_class_info(&lv, &cd_S7542C3);
    dp->~S7542C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7542C3(Test_S7542C3, "S7542C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7542C3C1Ev();
extern void _ZN7S7542C3D1Ev();
Name_Map name_map_S7542C3[] = {
  NSPAIR(_ZN7S7542C3C1Ev),
  NSPAIR(_ZN7S7542C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7542C3[];
extern void _ZN7S7542C32v2Ev();
static  VTBL_ENTRY vtc_S7542C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7542C3[0]),
  (VTBL_ENTRY)&_ZN7S7542C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S7542C3[];
extern  VTBL_ENTRY _ZTV7S7542C3[];
Class_Descriptor cd_S7542C3 = {  "S7542C3", // class name
  0,0,//no base classes
  &(vtc_S7542C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7542C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7542C3),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  S7542C2  : virtual S7542C3 {
  int s7542c2f0;
  ~S7542C2(); // tgen
  S7542C2(); // tgen
};
//SIG(-1 S7542C2) C1{ VBC2{ v1 Fi} Fi}


S7542C2 ::~S7542C2(){ note_dtor("S7542C2", this);} // tgen
S7542C2 ::S7542C2(){ note_ctor("S7542C2", this);} // tgen

static void Test_S7542C2()
{
  extern Class_Descriptor cd_S7542C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7542C2, buf);
    S7542C2 *dp, &lv = *(dp=new (buf) S7542C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7542C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7542C2)");
    check_base_class_offset(lv, (S7542C3*), ABISELECT(16,8), "S7542C2");
    check_field_offset(lv, s7542c2f0, ABISELECT(8,4), "S7542C2.s7542c2f0");
    test_class_info(&lv, &cd_S7542C2);
    dp->~S7542C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7542C2(Test_S7542C2, "S7542C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7542C2C1Ev();
extern void _ZN7S7542C2D1Ev();
Name_Map name_map_S7542C2[] = {
  NSPAIR(_ZN7S7542C2C1Ev),
  NSPAIR(_ZN7S7542C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7542C3;
extern VTBL_ENTRY _ZTI7S7542C3[];
extern  VTBL_ENTRY _ZTV7S7542C3[];
static Base_Class bases_S7542C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7542C3,    ABISELECT(16,8), //bcp->offset
    3, //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 _ZTI7S7542C2[];
extern void _ZN7S7542C32v2Ev();
static  VTBL_ENTRY vtc_S7542C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7542C2[0]),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7542C2[0]),
  (VTBL_ENTRY)&_ZN7S7542C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7542C2[];
static  VTT_ENTRY vtt_S7542C2[] = {
  {&(_ZTV7S7542C2[3]),  3,7},
  {&(_ZTV7S7542C2[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S7542C2[];
extern  VTBL_ENTRY _ZTV7S7542C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7542C2[];
Class_Descriptor cd_S7542C2 = {  "S7542C2", // class name
  bases_S7542C2, 1,
  &(vtc_S7542C2[0]), // expected_vtbl_contents
  &(vtt_S7542C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7542C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7542C2),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7542C2),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  S7542C4  : virtual S7542C3 {
  int s7542c4f0;
  ~S7542C4(); // tgen
  S7542C4(); // tgen
};
//SIG(-1 S7542C4) C1{ VBC2{ v1 Fi} Fi}


S7542C4 ::~S7542C4(){ note_dtor("S7542C4", this);} // tgen
S7542C4 ::S7542C4(){ note_ctor("S7542C4", this);} // tgen

static void Test_S7542C4()
{
  extern Class_Descriptor cd_S7542C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7542C4, buf);
    S7542C4 *dp, &lv = *(dp=new (buf) S7542C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7542C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7542C4)");
    check_base_class_offset(lv, (S7542C3*), ABISELECT(16,8), "S7542C4");
    check_field_offset(lv, s7542c4f0, ABISELECT(8,4), "S7542C4.s7542c4f0");
    test_class_info(&lv, &cd_S7542C4);
    dp->~S7542C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7542C4(Test_S7542C4, "S7542C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7542C4C1Ev();
extern void _ZN7S7542C4D1Ev();
Name_Map name_map_S7542C4[] = {
  NSPAIR(_ZN7S7542C4C1Ev),
  NSPAIR(_ZN7S7542C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7542C3;
extern VTBL_ENTRY _ZTI7S7542C3[];
extern  VTBL_ENTRY _ZTV7S7542C3[];
static Base_Class bases_S7542C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7542C3,    ABISELECT(16,8), //bcp->offset
    3, //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 _ZTI7S7542C4[];
extern void _ZN7S7542C32v2Ev();
static  VTBL_ENTRY vtc_S7542C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7542C4[0]),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7542C4[0]),
  (VTBL_ENTRY)&_ZN7S7542C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7542C4[];
static  VTT_ENTRY vtt_S7542C4[] = {
  {&(_ZTV7S7542C4[3]),  3,7},
  {&(_ZTV7S7542C4[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S7542C4[];
extern  VTBL_ENTRY _ZTV7S7542C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7542C4[];
Class_Descriptor cd_S7542C4 = {  "S7542C4", // class name
  bases_S7542C4, 1,
  &(vtc_S7542C4[0]), // expected_vtbl_contents
  &(vtt_S7542C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7542C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7542C4),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7542C4),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  S7542C1  : S7542C2 , S7542C4 {
  int s7542c1f0;
  virtual void  v1(); // _ZN7S7542C12v1Ev
  ~S7542C1(); // tgen
  S7542C1(); // tgen
};
//SIG(1 S7542C1) C1{ BC2{ VBC3{ v2 Fi} Fi} BC4{ VBC3 Fi} v1 Fi}


void  S7542C1 ::v1(){vfunc_called(this, "_ZN7S7542C12v1Ev");}
S7542C1 ::~S7542C1(){ note_dtor("S7542C1", this);} // tgen
S7542C1 ::S7542C1(){ note_ctor("S7542C1", this);} // tgen

static void Test_S7542C1()
{
  extern Class_Descriptor cd_S7542C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S7542C1, buf);
    S7542C1 *dp, &lv = *(dp=new (buf) S7542C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S7542C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7542C1)");
    check_base_class_offset(lv, (S7542C3*)(S7542C2*), ABISELECT(32,20), "S7542C1");
    check_base_class_offset(lv, (S7542C3*)(S7542C4*), ABISELECT(32,20), "S7542C1");
    check_base_class_offset(lv, (S7542C2*), 0, "S7542C1");
    check_base_class_offset(lv, (S7542C4*), ABISELECT(16,8), "S7542C1");
    check_field_offset(lv, s7542c1f0, ABISELECT(28,16), "S7542C1.s7542c1f0");
    test_class_info(&lv, &cd_S7542C1);
    dp->~S7542C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7542C1(Test_S7542C1, "S7542C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S7542C1C1Ev();
extern void _ZN7S7542C1D1Ev();
Name_Map name_map_S7542C1[] = {
  NSPAIR(_ZN7S7542C1C1Ev),
  NSPAIR(_ZN7S7542C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7542C3;
extern VTBL_ENTRY _ZTI7S7542C3[];
extern  VTBL_ENTRY _ZTV7S7542C3[];
extern Class_Descriptor cd_S7542C2;
extern VTBL_ENTRY _ZTI7S7542C2[];
extern  VTBL_ENTRY _ZTV7S7542C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7542C2[];
extern Class_Descriptor cd_S7542C4;
extern VTBL_ENTRY _ZTI7S7542C4[];
extern  VTBL_ENTRY _ZTV7S7542C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7542C4[];
static Base_Class bases_S7542C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7542C3,    ABISELECT(32,20), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //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_S7542C2,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7542C4,    ABISELECT(16,8), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7542C1[];
extern void _ZN7S7542C12v1Ev();
extern void _ZN7S7542C32v2Ev();
static  VTBL_ENTRY vtc_S7542C1[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7542C1[0]),
  (VTBL_ENTRY)&_ZN7S7542C12v1Ev,
  ABISELECT(16,12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7542C1[0]),
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7542C1[0]),
  (VTBL_ENTRY)&_ZN7S7542C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7542C1[];
static  VTBL_ENTRY _tg__ZTV7S7542C2__7S7542C1[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7542C2[0]),
};
extern void _ZN7S7542C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7542C3__7S7542C2__7S7542C1[] = {
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7542C2[0]),
  (VTBL_ENTRY)&_ZN7S7542C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7542C4__7S7542C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7542C4[0]),
};
extern void _ZN7S7542C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7542C3__7S7542C4__7S7542C1[] = {
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7542C4[0]),
  (VTBL_ENTRY)&_ZN7S7542C32v2Ev,
};
static  VTT_ENTRY vtt_S7542C1[] = {
  {&(_ZTV7S7542C1[3]),  3,11},
  {&(_tg__ZTV7S7542C2__7S7542C1[3]),  3,3},
  {&(_tg__ZTV7S7542C3__7S7542C2__7S7542C1[3]),  3,4},
  {&(_tg__ZTV7S7542C4__7S7542C1[3]),  3,3},
  {&(_tg__ZTV7S7542C3__7S7542C4__7S7542C1[3]),  3,4},
  {&(_ZTV7S7542C1[10]),  10,11},
  {&(_ZTV7S7542C1[7]),  7,11},
};
extern VTBL_ENTRY _ZTI7S7542C1[];
extern  VTBL_ENTRY _ZTV7S7542C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7542C1[];
Class_Descriptor cd_S7542C1 = {  "S7542C1", // class name
  bases_S7542C1, 3,
  &(vtc_S7542C1[0]), // expected_vtbl_contents
  &(vtt_S7542C1[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S7542C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7542C1),11, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7542C1),7, //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  S7503C3  {
  int s7503c3f0;
  virtual void  v1(); // _ZN7S7503C32v1Ev
  ~S7503C3(); // tgen
  S7503C3(); // tgen
};
//SIG(-1 S7503C3) C1{ v1 Fi}


void  S7503C3 ::v1(){vfunc_called(this, "_ZN7S7503C32v1Ev");}
S7503C3 ::~S7503C3(){ note_dtor("S7503C3", this);} // tgen
S7503C3 ::S7503C3(){ note_ctor("S7503C3", this);} // tgen

static void Test_S7503C3()
{
  extern Class_Descriptor cd_S7503C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7503C3, buf);
    S7503C3 *dp, &lv = *(dp=new (buf) S7503C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7503C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7503C3)");
    check_field_offset(lv, s7503c3f0, ABISELECT(8,4), "S7503C3.s7503c3f0");
    test_class_info(&lv, &cd_S7503C3);
    dp->~S7503C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7503C3(Test_S7503C3, "S7503C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7503C3C1Ev();
extern void _ZN7S7503C3D1Ev();
Name_Map name_map_S7503C3[] = {
  NSPAIR(_ZN7S7503C3C1Ev),
  NSPAIR(_ZN7S7503C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7503C3[];
extern void _ZN7S7503C32v1Ev();
static  VTBL_ENTRY vtc_S7503C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7503C3[0]),
  (VTBL_ENTRY)&_ZN7S7503C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S7503C3[];
extern  VTBL_ENTRY _ZTV7S7503C3[];
Class_Descriptor cd_S7503C3 = {  "S7503C3", // class name
  0,0,//no base classes
  &(vtc_S7503C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7503C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7503C3),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  S7503C2  : virtual S7503C3 {
  ::S7503C3 s7503c2f0;
  virtual void  v2(); // _ZN7S7503C22v2Ev
  ~S7503C2(); // tgen
  S7503C2(); // tgen
};
//SIG(-1 S7503C2) C1{ VBC2{ v2 Fi} v1 FC2}


void  S7503C2 ::v2(){vfunc_called(this, "_ZN7S7503C22v2Ev");}
S7503C2 ::~S7503C2(){ note_dtor("S7503C2", this);} // tgen
S7503C2 ::S7503C2(){ note_ctor("S7503C2", this);} // tgen

static void Test_S7503C2()
{
  extern Class_Descriptor cd_S7503C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7503C2, buf);
    S7503C2 *dp, &lv = *(dp=new (buf) S7503C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7503C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7503C2)");
    check_base_class_offset(lv, (S7503C3*), ABISELECT(24,12), "S7503C2");
    check_field_offset(lv, s7503c2f0, ABISELECT(8,4), "S7503C2.s7503c2f0");
    test_class_info(&lv, &cd_S7503C2);
    dp->~S7503C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7503C2(Test_S7503C2, "S7503C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7503C2C1Ev();
extern void _ZN7S7503C2D1Ev();
Name_Map name_map_S7503C2[] = {
  NSPAIR(_ZN7S7503C2C1Ev),
  NSPAIR(_ZN7S7503C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7503C3;
extern VTBL_ENTRY _ZTI7S7503C3[];
extern  VTBL_ENTRY _ZTV7S7503C3[];
static Base_Class bases_S7503C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7503C3,    ABISELECT(24,12), //bcp->offset
    4, //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 _ZTI7S7503C2[];
extern void _ZN7S7503C22v2Ev();
extern void _ZN7S7503C32v1Ev();
static  VTBL_ENTRY vtc_S7503C2[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7503C2[0]),
  (VTBL_ENTRY)&_ZN7S7503C22v2Ev,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7503C2[0]),
  (VTBL_ENTRY)&_ZN7S7503C32v1Ev,
};
extern VTBL_ENTRY _ZTV7S7503C2[];
static  VTT_ENTRY vtt_S7503C2[] = {
  {&(_ZTV7S7503C2[3]),  3,8},
  {&(_ZTV7S7503C2[7]),  7,8},
};
extern VTBL_ENTRY _ZTI7S7503C2[];
extern  VTBL_ENTRY _ZTV7S7503C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7503C2[];
Class_Descriptor cd_S7503C2 = {  "S7503C2", // class name
  bases_S7503C2, 1,
  &(vtc_S7503C2[0]), // expected_vtbl_contents
  &(vtt_S7503C2[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7503C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7503C2),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7503C2),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  S7503C4  : virtual S7503C3 {
  ::S7503C3 s7503c4f0;
  ~S7503C4(); // tgen
  S7503C4(); // tgen
};
//SIG(-1 S7503C4) C1{ VBC2{ v1 Fi} FC2}


S7503C4 ::~S7503C4(){ note_dtor("S7503C4", this);} // tgen
S7503C4 ::S7503C4(){ note_ctor("S7503C4", this);} // tgen

static void Test_S7503C4()
{
  extern Class_Descriptor cd_S7503C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7503C4, buf);
    S7503C4 *dp, &lv = *(dp=new (buf) S7503C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7503C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7503C4)");
    check_base_class_offset(lv, (S7503C3*), ABISELECT(24,12), "S7503C4");
    check_field_offset(lv, s7503c4f0, ABISELECT(8,4), "S7503C4.s7503c4f0");
    test_class_info(&lv, &cd_S7503C4);
    dp->~S7503C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7503C4(Test_S7503C4, "S7503C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7503C4C1Ev();
extern void _ZN7S7503C4D1Ev();
Name_Map name_map_S7503C4[] = {
  NSPAIR(_ZN7S7503C4C1Ev),
  NSPAIR(_ZN7S7503C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7503C3;
extern VTBL_ENTRY _ZTI7S7503C3[];
extern  VTBL_ENTRY _ZTV7S7503C3[];
static Base_Class bases_S7503C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7503C3,    ABISELECT(24,12), //bcp->offset
    3, //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 _ZTI7S7503C4[];
extern void _ZN7S7503C32v1Ev();
static  VTBL_ENTRY vtc_S7503C4[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7503C4[0]),
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7503C4[0]),
  (VTBL_ENTRY)&_ZN7S7503C32v1Ev,
};
extern VTBL_ENTRY _ZTV7S7503C4[];
static  VTT_ENTRY vtt_S7503C4[] = {
  {&(_ZTV7S7503C4[3]),  3,7},
  {&(_ZTV7S7503C4[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S7503C4[];
extern  VTBL_ENTRY _ZTV7S7503C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7503C4[];
Class_Descriptor cd_S7503C4 = {  "S7503C4", // class name
  bases_S7503C4, 1,
  &(vtc_S7503C4[0]), // expected_vtbl_contents
  &(vtt_S7503C4[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7503C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7503C4),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7503C4),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  S7503C1  : S7503C2 , S7503C4 {
  ~S7503C1(); // tgen
  S7503C1(); // tgen
};
//SIG(1 S7503C1) C1{ BC2{ VBC3{ v1 Fi} v2 FC3} BC4{ VBC3 FC3}}


S7503C1 ::~S7503C1(){ note_dtor("S7503C1", this);} // tgen
S7503C1 ::S7503C1(){ note_ctor("S7503C1", this);} // tgen

static void Test_S7503C1()
{
  extern Class_Descriptor cd_S7503C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7503C1, buf);
    S7503C1 *dp, &lv = *(dp=new (buf) S7503C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7503C1)");
    check_base_class_offset(lv, (S7503C3*)(S7503C2*), ABISELECT(48,24), "S7503C1");
    check_base_class_offset(lv, (S7503C3*)(S7503C4*), ABISELECT(48,24), "S7503C1");
    check_base_class_offset(lv, (S7503C2*), 0, "S7503C1");
    check_base_class_offset(lv, (S7503C4*), ABISELECT(24,12), "S7503C1");
    test_class_info(&lv, &cd_S7503C1);
    dp->~S7503C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7503C1(Test_S7503C1, "S7503C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7503C1C1Ev();
extern void _ZN7S7503C1D1Ev();
Name_Map name_map_S7503C1[] = {
  NSPAIR(_ZN7S7503C1C1Ev),
  NSPAIR(_ZN7S7503C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7503C3;
extern VTBL_ENTRY _ZTI7S7503C3[];
extern  VTBL_ENTRY _ZTV7S7503C3[];
extern Class_Descriptor cd_S7503C2;
extern VTBL_ENTRY _ZTI7S7503C2[];
extern  VTBL_ENTRY _ZTV7S7503C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7503C2[];
extern Class_Descriptor cd_S7503C4;
extern VTBL_ENTRY _ZTI7S7503C4[];
extern  VTBL_ENTRY _ZTV7S7503C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7503C4[];
static Base_Class bases_S7503C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7503C3,    ABISELECT(48,24), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //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_S7503C2,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7503C4,    ABISELECT(24,12), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7503C1[];
extern void _ZN7S7503C22v2Ev();
extern void _ZN7S7503C32v1Ev();
static  VTBL_ENTRY vtc_S7503C1[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7503C1[0]),
  (VTBL_ENTRY)&_ZN7S7503C22v2Ev,
  ABISELECT(24,12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7503C1[0]),
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7503C1[0]),
  (VTBL_ENTRY)&_ZN7S7503C32v1Ev,
};
extern VTBL_ENTRY _ZTV7S7503C1[];
extern void _ZN7S7503C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7503C2__7S7503C1[] = {
  ABISELECT(48,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7503C2[0]),
  (VTBL_ENTRY)&_ZN7S7503C22v2Ev,
};
extern void _ZN7S7503C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7503C3__7S7503C2__7S7503C1[] = {
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S7503C2[0]),
  (VTBL_ENTRY)&_ZN7S7503C32v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7503C4__7S7503C1[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7503C4[0]),
};
extern void _ZN7S7503C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7503C3__7S7503C4__7S7503C1[] = {
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7503C4[0]),
  (VTBL_ENTRY)&_ZN7S7503C32v1Ev,
};
static  VTT_ENTRY vtt_S7503C1[] = {
  {&(_ZTV7S7503C1[3]),  3,11},
  {&(_tg__ZTV7S7503C2__7S7503C1[3]),  3,4},
  {&(_tg__ZTV7S7503C3__7S7503C2__7S7503C1[3]),  3,4},
  {&(_tg__ZTV7S7503C4__7S7503C1[3]),  3,3},
  {&(_tg__ZTV7S7503C3__7S7503C4__7S7503C1[3]),  3,4},
  {&(_ZTV7S7503C1[10]),  10,11},
  {&(_ZTV7S7503C1[7]),  7,11},
};
extern VTBL_ENTRY _ZTI7S7503C1[];
extern  VTBL_ENTRY _ZTV7S7503C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7503C1[];
Class_Descriptor cd_S7503C1 = {  "S7503C1", // class name
  bases_S7503C1, 3,
  &(vtc_S7503C1[0]), // expected_vtbl_contents
  &(vtt_S7503C1[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7503C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7503C1),11, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7503C1),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16646C3_nt  {
  void *s16646c3f0;
  int s16646c3f1;
  void  mf16646c3(); // _ZN11S16646C3_nt9mf16646c3Ev
};
//SIG(-1 S16646C3_nt) C1{ m Fp Fi}


void  S16646C3_nt ::mf16646c3(){}

//skip512 S16646C3_nt

#else // __cplusplus

Class_Descriptor cd_S16646C3_nt = {  "S16646C3_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  S16646C2  : S16646C3_nt {
  ::S5082C10_nt s16646c2f0;
};
//SIG(-1 S16646C2) C1{ BC2{ m Fp Fi} FC3{ Fc[20]}}



static void Test_S16646C2()
{
  extern Class_Descriptor cd_S16646C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S16646C2, buf);
    S16646C2 &lv = *(new (buf) S16646C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S16646C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16646C2)");
    check_base_class_offset(lv, (S16646C3_nt*), 0, "S16646C2");
    check_field_offset(lv, s16646c2f0, ABISELECT(16,8), "S16646C2.s16646c2f0");
    test_class_info(&lv, &cd_S16646C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16646C2(Test_S16646C2, "S16646C2", ABISELECT(40,28));

#else // __cplusplus

extern Class_Descriptor cd_S16646C3_nt;
static Base_Class bases_S16646C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16646C3_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_S16646C2 = {  "S16646C2", // class name
  bases_S16646C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,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  S16646C1  {
  int s16646c1f0;
  ::S16646C2 s16646c1f1;
  void  mf16646c1(); // _ZN8S16646C19mf16646c1Ev
};
//SIG(1 S16646C1) C1{ m Fi FC2{ BC3{ m Fp Fi} FC4{ Fc[20]}}}


void  S16646C1 ::mf16646c1(){}

static void Test_S16646C1()
{
  {
    init_simple_test("S16646C1");
    S16646C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S16646C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16646C1)");
    check_field_offset(lv, s16646c1f0, 0, "S16646C1.s16646c1f0");
    check_field_offset(lv, s16646c1f1, ABISELECT(8,4), "S16646C1.s16646c1f1");
  }
}
static Arrange_To_Call_Me vS16646C1(Test_S16646C1, "S16646C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16962C1  {
  int s16962c1f0;
  void *s16962c1f1[2];
  ::S2173C14 s16962c1f2;
  void  mf16962c1(); // _ZN8S16962C19mf16962c1Ev
};
//SIG(1 S16962C1) C1{ m Fi Fp[2] FC2{ m Fp Fi[2] FC3{ m}}}


void  S16962C1 ::mf16962c1(){}

static void Test_S16962C1()
{
  {
    init_simple_test("S16962C1");
    S16962C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S16962C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16962C1)");
    check_field_offset(lv, s16962c1f0, 0, "S16962C1.s16962c1f0");
    check_field_offset(lv, s16962c1f1, ABISELECT(8,4), "S16962C1.s16962c1f1");
    check_field_offset(lv, s16962c1f2, ABISELECT(24,12), "S16962C1.s16962c1f2");
  }
}
static Arrange_To_Call_Me vS16962C1(Test_S16962C1, "S16962C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19701C2  {
  int s19701c2f0;
  void *s19701c2f1;
  long double s19701c2f2;
  void *s19701c2f3[7];
  void  mf19701c2(); // _ZN8S19701C29mf19701c2Ev
};
//SIG(-1 S19701C2) C1{ m Fi Fp FD Fp[7]}


void  S19701C2 ::mf19701c2(){}

static void Test_S19701C2()
{
  {
    init_simple_test("S19701C2");
    S19701C2 lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S19701C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19701C2)");
    check_field_offset(lv, s19701c2f0, 0, "S19701C2.s19701c2f0");
    check_field_offset(lv, s19701c2f1, ABISELECT(8,4), "S19701C2.s19701c2f1");
    check_field_offset(lv, s19701c2f2, ABISELECT(16,8), "S19701C2.s19701c2f2");
    check_field_offset(lv, s19701c2f3, ABISELECT(32,20), "S19701C2.s19701c2f3");
  }
}
static Arrange_To_Call_Me vS19701C2(Test_S19701C2, "S19701C2", ABISELECT(96,48));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19701C2[];
VTBL_ENTRY *P__ZTI8S19701C2 = _ZTI8S19701C2; 
Class_Descriptor cd_S19701C2 = {  "S19701C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S19701C2),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  S19701C1  : virtual S19701C2 {
  ::S19701C2 s19701c1f0;
  ::S19701C2 s19701c1f1;
  virtual  ~S19701C1(); // _ZN8S19701C1D2Ev
  S19701C1(); // tgen
};
//SIG(1 S19701C1) C1{ VBC2{ m Fi Fp FD Fp[7]} vd FC2 FC2}


 S19701C1 ::~S19701C1(){ note_dtor("S19701C1", this);}
S19701C1 ::S19701C1(){ note_ctor("S19701C1", this);} // tgen

static void Test_S19701C1()
{
  extern Class_Descriptor cd_S19701C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(20,38)];
    init_test(&cd_S19701C1, buf);
    S19701C1 *dp, &lv = *(dp=new (buf) S19701C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,148), "sizeof(S19701C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19701C1)");
    check_base_class_offset(lv, (S19701C2*), ABISELECT(208,100), "S19701C1");
    check_field_offset(lv, s19701c1f0, ABISELECT(16,4), "S19701C1.s19701c1f0");
    check_field_offset(lv, s19701c1f1, ABISELECT(112,52), "S19701C1.s19701c1f1");
    test_class_info(&lv, &cd_S19701C1);
    dp->~S19701C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19701C1(Test_S19701C1, "S19701C1", ABISELECT(304,148));

#else // __cplusplus

extern void _ZN8S19701C1C1Ev();
extern void _ZN8S19701C1D2Ev();
Name_Map name_map_S19701C1[] = {
  NSPAIR(_ZN8S19701C1C1Ev),
  NSPAIR(_ZN8S19701C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19701C2;
extern VTBL_ENTRY _ZTI8S19701C2[];
static Base_Class bases_S19701C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19701C2,    ABISELECT(208,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19701C1[];
extern void _ZN8S19701C1D1Ev();
extern void _ZN8S19701C1D0Ev();
static  VTBL_ENTRY vtc_S19701C1[] = {
  ABISELECT(208,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S19701C1[0]),
  (VTBL_ENTRY)&_ZN8S19701C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19701C1D0Ev,
};
extern VTBL_ENTRY _ZTV8S19701C1[];
static  VTT_ENTRY vtt_S19701C1[] = {
  {&(_ZTV8S19701C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19701C1[];
extern  VTBL_ENTRY _ZTV8S19701C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19701C1[];
Class_Descriptor cd_S19701C1 = {  "S19701C1", // class name
  bases_S19701C1, 1,
  &(vtc_S19701C1[0]), // expected_vtbl_contents
  &(vtt_S19701C1[0]), // expected_vtt_contents
  ABISELECT(304,148), // object size
  NSPAIRA(_ZTI8S19701C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19701C1),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19701C1),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17632C1  {
  void *s17632c1f0;
  ::S4473C12_nt s17632c1f1;
  __tsi64 s17632c1f2;
  int s17632c1f3[2];
  void  mf17632c1(); // _ZN8S17632C19mf17632c1Ev
};
//SIG(1 S17632C1) C1{ m Fp FC2{ m Fp Fi FC3{ m}} FL Fi[2]}


void  S17632C1 ::mf17632c1(){}

static void Test_S17632C1()
{
  {
    init_simple_test("S17632C1");
    S17632C1 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S17632C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17632C1)");
    check_field_offset(lv, s17632c1f0, 0, "S17632C1.s17632c1f0");
    check_field_offset(lv, s17632c1f1, ABISELECT(8,4), "S17632C1.s17632c1f1");
    check_field_offset(lv, s17632c1f2, ABISELECT(24,16), "S17632C1.s17632c1f2");
    check_field_offset(lv, s17632c1f3, ABISELECT(32,24), "S17632C1.s17632c1f3");
  }
}
static Arrange_To_Call_Me vS17632C1(Test_S17632C1, "S17632C1", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3053C3  {
  int s3053c3f0;
  virtual void  v2(); // _ZN7S3053C32v2Ev
  ~S3053C3(); // tgen
  S3053C3(); // tgen
};
//SIG(-1 S3053C3) C1{ v1 Fi}


void  S3053C3 ::v2(){vfunc_called(this, "_ZN7S3053C32v2Ev");}
S3053C3 ::~S3053C3(){ note_dtor("S3053C3", this);} // tgen
S3053C3 ::S3053C3(){ note_ctor("S3053C3", this);} // tgen

static void Test_S3053C3()
{
  extern Class_Descriptor cd_S3053C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3053C3, buf);
    S3053C3 *dp, &lv = *(dp=new (buf) S3053C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3053C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3053C3)");
    check_field_offset(lv, s3053c3f0, ABISELECT(8,4), "S3053C3.s3053c3f0");
    test_class_info(&lv, &cd_S3053C3);
    dp->~S3053C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3053C3(Test_S3053C3, "S3053C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3053C3C1Ev();
extern void _ZN7S3053C3D1Ev();
Name_Map name_map_S3053C3[] = {
  NSPAIR(_ZN7S3053C3C1Ev),
  NSPAIR(_ZN7S3053C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3053C3[];
extern void _ZN7S3053C32v2Ev();
static  VTBL_ENTRY vtc_S3053C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3053C3[0]),
  (VTBL_ENTRY)&_ZN7S3053C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3053C3[];
extern  VTBL_ENTRY _ZTV7S3053C3[];
Class_Descriptor cd_S3053C3 = {  "S3053C3", // class name
  0,0,//no base classes
  &(vtc_S3053C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3053C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3053C3),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  S3053C2  : S3053C3 {
  int s3053c2f0;
  ~S3053C2(); // tgen
  S3053C2(); // tgen
};
//SIG(-1 S3053C2) C1{ BC2{ v1 Fi} Fi}


S3053C2 ::~S3053C2(){ note_dtor("S3053C2", this);} // tgen
S3053C2 ::S3053C2(){ note_ctor("S3053C2", this);} // tgen

static void Test_S3053C2()
{
  extern Class_Descriptor cd_S3053C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3053C2, buf);
    S3053C2 *dp, &lv = *(dp=new (buf) S3053C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3053C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3053C2)");
    check_base_class_offset(lv, (S3053C3*), 0, "S3053C2");
    check_field_offset(lv, s3053c2f0, ABISELECT(12,8), "S3053C2.s3053c2f0");
    test_class_info(&lv, &cd_S3053C2);
    dp->~S3053C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3053C2(Test_S3053C2, "S3053C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3053C2C1Ev();
extern void _ZN7S3053C2D1Ev();
Name_Map name_map_S3053C2[] = {
  NSPAIR(_ZN7S3053C2C1Ev),
  NSPAIR(_ZN7S3053C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3053C3;
extern VTBL_ENTRY _ZTI7S3053C3[];
extern  VTBL_ENTRY _ZTV7S3053C3[];
static Base_Class bases_S3053C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3053C3,    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 _ZTI7S3053C2[];
extern void _ZN7S3053C32v2Ev();
static  VTBL_ENTRY vtc_S3053C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3053C2[0]),
  (VTBL_ENTRY)&_ZN7S3053C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3053C2[];
extern  VTBL_ENTRY _ZTV7S3053C2[];
Class_Descriptor cd_S3053C2 = {  "S3053C2", // class name
  bases_S3053C2, 1,
  &(vtc_S3053C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3053C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3053C2),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  S3053C1  : S3053C2 , S1503C9_nt {
  int s3053c1f0;
  virtual void  v1(); // _ZN7S3053C12v1Ev
  ~S3053C1(); // tgen
  S3053C1(); // tgen
};
//SIG(1 S3053C1) C1{ BC2{ BC3{ v2 Fi} Fi} BC4{ m Fi} v1 Fi}


void  S3053C1 ::v1(){vfunc_called(this, "_ZN7S3053C12v1Ev");}
S3053C1 ::~S3053C1(){ note_dtor("S3053C1", this);} // tgen
S3053C1 ::S3053C1(){ note_ctor("S3053C1", this);} // tgen

static void Test_S3053C1()
{
  extern Class_Descriptor cd_S3053C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S3053C1, buf);
    S3053C1 *dp, &lv = *(dp=new (buf) S3053C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S3053C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3053C1)");
    check_base_class_offset(lv, (S3053C3*)(S3053C2*), 0, "S3053C1");
    check_base_class_offset(lv, (S3053C2*), 0, "S3053C1");
    check_base_class_offset(lv, (S1503C9_nt*), ABISELECT(16,12), "S3053C1");
    check_field_offset(lv, s3053c1f0, ABISELECT(20,16), "S3053C1.s3053c1f0");
    test_class_info(&lv, &cd_S3053C1);
    dp->~S3053C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3053C1(Test_S3053C1, "S3053C1", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S3053C1C1Ev();
extern void _ZN7S3053C1D1Ev();
Name_Map name_map_S3053C1[] = {
  NSPAIR(_ZN7S3053C1C1Ev),
  NSPAIR(_ZN7S3053C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3053C3;
extern VTBL_ENTRY _ZTI7S3053C3[];
extern  VTBL_ENTRY _ZTV7S3053C3[];
extern Class_Descriptor cd_S3053C2;
extern VTBL_ENTRY _ZTI7S3053C2[];
extern  VTBL_ENTRY _ZTV7S3053C2[];
extern Class_Descriptor cd_S1503C9_nt;
extern VTBL_ENTRY _ZTI10S1503C9_nt[];
static Base_Class bases_S3053C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3053C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3053C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S1503C9_nt,    ABISELECT(16,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 _ZTI7S3053C1[];
extern void _ZN7S3053C32v2Ev();
extern void _ZN7S3053C12v1Ev();
static  VTBL_ENTRY vtc_S3053C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3053C1[0]),
  (VTBL_ENTRY)&_ZN7S3053C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3053C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3053C1[];
extern  VTBL_ENTRY _ZTV7S3053C1[];
Class_Descriptor cd_S3053C1 = {  "S3053C1", // class name
  bases_S3053C1, 3,
  &(vtc_S3053C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S3053C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3053C1),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  S8988C2_nt  {
  virtual  ~S8988C2_nt(); // _ZN10S8988C2_ntD1Ev
  virtual void  v2(); // _ZN10S8988C2_nt2v2Ev
  virtual void  v3(); // _ZN10S8988C2_nt2v3Ev
  virtual void  v4(); // _ZN10S8988C2_nt2v4Ev
  virtual void  v5(); // _ZN10S8988C2_nt2v5Ev
  S8988C2_nt(); // tgen
};
//SIG(-1 S8988C2_nt) C1{ vd v1 v2 v3 v4}


 S8988C2_nt ::~S8988C2_nt(){ note_dtor("S8988C2_nt", this);}
void  S8988C2_nt ::v2(){vfunc_called(this, "_ZN10S8988C2_nt2v2Ev");}
void  S8988C2_nt ::v3(){vfunc_called(this, "_ZN10S8988C2_nt2v3Ev");}
void  S8988C2_nt ::v4(){vfunc_called(this, "_ZN10S8988C2_nt2v4Ev");}
void  S8988C2_nt ::v5(){vfunc_called(this, "_ZN10S8988C2_nt2v5Ev");}
S8988C2_nt ::S8988C2_nt(){ note_ctor("S8988C2_nt", this);} // tgen

//skip512 S8988C2_nt

#else // __cplusplus

extern void _ZN10S8988C2_ntC1Ev();
extern void _ZN10S8988C2_ntD1Ev();
Name_Map name_map_S8988C2_nt[] = {
  NSPAIR(_ZN10S8988C2_ntC1Ev),
  NSPAIR(_ZN10S8988C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8988C2_nt[];
extern void _ZN10S8988C2_ntD1Ev();
extern void _ZN10S8988C2_ntD0Ev();
extern void _ZN10S8988C2_nt2v2Ev();
extern void _ZN10S8988C2_nt2v3Ev();
extern void _ZN10S8988C2_nt2v4Ev();
extern void _ZN10S8988C2_nt2v5Ev();
static  VTBL_ENTRY vtc_S8988C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8988C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8988C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S8988C2_nt[];
VTBL_ENTRY *P__ZTI10S8988C2_nt = _ZTI10S8988C2_nt; 
extern  VTBL_ENTRY _ZTV10S8988C2_nt[];
Class_Descriptor cd_S8988C2_nt = {  "S8988C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8988C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S8988C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8988C2_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  S8988C1  : S8988C2_nt {
  void *s8988c1f0[2];
  int s8988c1f1;
  virtual void  v1(); // _ZN7S8988C12v1Ev
  ~S8988C1(); // tgen
  S8988C1(); // tgen
};
//SIG(1 S8988C1) C1{ BC2{ vd v2 v3 v4 v5} v1 Fp[2] Fi}


void  S8988C1 ::v1(){vfunc_called(this, "_ZN7S8988C12v1Ev");}
S8988C1 ::~S8988C1(){ note_dtor("S8988C1", this);} // tgen
S8988C1 ::S8988C1(){ note_ctor("S8988C1", this);} // tgen

static void Test_S8988C1()
{
  extern Class_Descriptor cd_S8988C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8988C1, buf);
    S8988C1 *dp, &lv = *(dp=new (buf) S8988C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8988C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8988C1)");
    check_base_class_offset(lv, (S8988C2_nt*), 0, "S8988C1");
    check_field_offset(lv, s8988c1f0, ABISELECT(8,4), "S8988C1.s8988c1f0");
    check_field_offset(lv, s8988c1f1, ABISELECT(24,12), "S8988C1.s8988c1f1");
    test_class_info(&lv, &cd_S8988C1);
    dp->~S8988C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8988C1(Test_S8988C1, "S8988C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8988C1C1Ev();
extern void _ZN7S8988C1D1Ev();
Name_Map name_map_S8988C1[] = {
  NSPAIR(_ZN7S8988C1C1Ev),
  NSPAIR(_ZN7S8988C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8988C2_nt;
extern VTBL_ENTRY _ZTI10S8988C2_nt[];
extern  VTBL_ENTRY _ZTV10S8988C2_nt[];
static Base_Class bases_S8988C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8988C2_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 _ZTI7S8988C1[];
extern void _ZN7S8988C1D1Ev();
extern void _ZN7S8988C1D0Ev();
extern void _ZN10S8988C2_nt2v2Ev();
extern void _ZN10S8988C2_nt2v3Ev();
extern void _ZN10S8988C2_nt2v4Ev();
extern void _ZN10S8988C2_nt2v5Ev();
extern void _ZN7S8988C12v1Ev();
static  VTBL_ENTRY vtc_S8988C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8988C1[0]),
  (VTBL_ENTRY)&_ZN7S8988C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8988C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S8988C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S8988C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8988C1[];
extern  VTBL_ENTRY _ZTV7S8988C1[];
Class_Descriptor cd_S8988C1 = {  "S8988C1", // class name
  bases_S8988C1, 1,
  &(vtc_S8988C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8988C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8988C1),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  S10660C1  {
  char s10660c1f0[2];
  ::S4473C12_nt s10660c1f1;
  __tsi64 s10660c1f2;
  int s10660c1f3;
};
//SIG(1 S10660C1) C1{ Fc[2] FC2{ m Fp Fi FC3{ m}} FL Fi}



static void Test_S10660C1()
{
  {
    init_simple_test("S10660C1");
    S10660C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S10660C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10660C1)");
    check_field_offset(lv, s10660c1f0, 0, "S10660C1.s10660c1f0");
    check_field_offset(lv, s10660c1f1, ABISELECT(8,4), "S10660C1.s10660c1f1");
    check_field_offset(lv, s10660c1f2, ABISELECT(24,16), "S10660C1.s10660c1f2");
    check_field_offset(lv, s10660c1f3, ABISELECT(32,24), "S10660C1.s10660c1f3");
  }
}
static Arrange_To_Call_Me vS10660C1(Test_S10660C1, "S10660C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16298C1  {
  ::S4473C12_nt s16298c1f0;
  void *s16298c1f1[3];
  char s16298c1f2;
  void  mf16298c1(); // _ZN8S16298C19mf16298c1Ev
};
//SIG(1 S16298C1) C1{ m FC2{ m Fp Fi FC3{ m}} Fp[3] Fc}


void  S16298C1 ::mf16298c1(){}

static void Test_S16298C1()
{
  {
    init_simple_test("S16298C1");
    S16298C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S16298C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16298C1)");
    check_field_offset(lv, s16298c1f0, 0, "S16298C1.s16298c1f0");
    check_field_offset(lv, s16298c1f1, ABISELECT(16,12), "S16298C1.s16298c1f1");
    check_field_offset(lv, s16298c1f2, ABISELECT(40,24), "S16298C1.s16298c1f2");
  }
}
static Arrange_To_Call_Me vS16298C1(Test_S16298C1, "S16298C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17635C1  {
  void *s17635c1f0;
  ::S4473C12_nt s17635c1f1;
  void *s17635c1f2[7];
  void  mf17635c1(); // _ZN8S17635C19mf17635c1Ev
};
//SIG(1 S17635C1) C1{ m Fp FC2{ m Fp Fi FC3{ m}} Fp[7]}


void  S17635C1 ::mf17635c1(){}

static void Test_S17635C1()
{
  {
    init_simple_test("S17635C1");
    S17635C1 lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S17635C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17635C1)");
    check_field_offset(lv, s17635c1f0, 0, "S17635C1.s17635c1f0");
    check_field_offset(lv, s17635c1f1, ABISELECT(8,4), "S17635C1.s17635c1f1");
    check_field_offset(lv, s17635c1f2, ABISELECT(24,16), "S17635C1.s17635c1f2");
  }
}
static Arrange_To_Call_Me vS17635C1(Test_S17635C1, "S17635C1", ABISELECT(80,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16149C1  {
  ::S5306C7_nt s16149c1f0;
  void *s16149c1f1[2];
  short s16149c1f2;
  char s16149c1f3[2];
  void  mf16149c1(); // _ZN8S16149C19mf16149c1Ev
};
//SIG(1 S16149C1) C1{ m FC2{ m FL[4]} Fp[2] Fs Fc[2]}


void  S16149C1 ::mf16149c1(){}

static void Test_S16149C1()
{
  {
    init_simple_test("S16149C1");
    S16149C1 lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S16149C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16149C1)");
    check_field_offset(lv, s16149c1f0, 0, "S16149C1.s16149c1f0");
    check_field_offset(lv, s16149c1f1, 32, "S16149C1.s16149c1f1");
    check_field_offset(lv, s16149c1f2, ABISELECT(48,40), "S16149C1.s16149c1f2");
    check_field_offset(lv, s16149c1f3, ABISELECT(50,42), "S16149C1.s16149c1f3");
  }
}
static Arrange_To_Call_Me vS16149C1(Test_S16149C1, "S16149C1", ABISELECT(56,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3131C3  {
  int s3131c3f0;
  virtual void  v3(); // _ZN7S3131C32v3Ev
  ~S3131C3(); // tgen
  S3131C3(); // tgen
};
//SIG(-1 S3131C3) C1{ v1 Fi}


void  S3131C3 ::v3(){vfunc_called(this, "_ZN7S3131C32v3Ev");}
S3131C3 ::~S3131C3(){ note_dtor("S3131C3", this);} // tgen
S3131C3 ::S3131C3(){ note_ctor("S3131C3", this);} // tgen

static void Test_S3131C3()
{
  extern Class_Descriptor cd_S3131C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3131C3, buf);
    S3131C3 *dp, &lv = *(dp=new (buf) S3131C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3131C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3131C3)");
    check_field_offset(lv, s3131c3f0, ABISELECT(8,4), "S3131C3.s3131c3f0");
    test_class_info(&lv, &cd_S3131C3);
    dp->~S3131C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3131C3(Test_S3131C3, "S3131C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3131C3C1Ev();
extern void _ZN7S3131C3D1Ev();
Name_Map name_map_S3131C3[] = {
  NSPAIR(_ZN7S3131C3C1Ev),
  NSPAIR(_ZN7S3131C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3131C3[];
extern void _ZN7S3131C32v3Ev();
static  VTBL_ENTRY vtc_S3131C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3131C3[0]),
  (VTBL_ENTRY)&_ZN7S3131C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S3131C3[];
extern  VTBL_ENTRY _ZTV7S3131C3[];
Class_Descriptor cd_S3131C3 = {  "S3131C3", // class name
  0,0,//no base classes
  &(vtc_S3131C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3131C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3131C3),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  S3131C2  : S3131C3 {
  int s3131c2f0;
  virtual void  v4(); // _ZN7S3131C22v4Ev
  ~S3131C2(); // tgen
  S3131C2(); // tgen
};
//SIG(-1 S3131C2) C1{ BC2{ v2 Fi} v1 Fi}


void  S3131C2 ::v4(){vfunc_called(this, "_ZN7S3131C22v4Ev");}
S3131C2 ::~S3131C2(){ note_dtor("S3131C2", this);} // tgen
S3131C2 ::S3131C2(){ note_ctor("S3131C2", this);} // tgen

static void Test_S3131C2()
{
  extern Class_Descriptor cd_S3131C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3131C2, buf);
    S3131C2 *dp, &lv = *(dp=new (buf) S3131C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3131C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3131C2)");
    check_base_class_offset(lv, (S3131C3*), 0, "S3131C2");
    check_field_offset(lv, s3131c2f0, ABISELECT(12,8), "S3131C2.s3131c2f0");
    test_class_info(&lv, &cd_S3131C2);
    dp->~S3131C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3131C2(Test_S3131C2, "S3131C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3131C2C1Ev();
extern void _ZN7S3131C2D1Ev();
Name_Map name_map_S3131C2[] = {
  NSPAIR(_ZN7S3131C2C1Ev),
  NSPAIR(_ZN7S3131C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3131C3;
extern VTBL_ENTRY _ZTI7S3131C3[];
extern  VTBL_ENTRY _ZTV7S3131C3[];
static Base_Class bases_S3131C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3131C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S3131C2[];
extern void _ZN7S3131C32v3Ev();
extern void _ZN7S3131C22v4Ev();
static  VTBL_ENTRY vtc_S3131C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3131C2[0]),
  (VTBL_ENTRY)&_ZN7S3131C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3131C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S3131C2[];
extern  VTBL_ENTRY _ZTV7S3131C2[];
Class_Descriptor cd_S3131C2 = {  "S3131C2", // class name
  bases_S3131C2, 1,
  &(vtc_S3131C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3131C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3131C2),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  S3131C1  : S3131C2 {
  int s3131c1f0;
  virtual void  v1(); // _ZN7S3131C12v1Ev
  virtual void  v2(); // _ZN7S3131C12v2Ev
  ~S3131C1(); // tgen
  S3131C1(); // tgen
};
//SIG(1 S3131C1) C1{ BC2{ BC3{ v3 Fi} v4 Fi} v1 v2 Fi}


void  S3131C1 ::v1(){vfunc_called(this, "_ZN7S3131C12v1Ev");}
void  S3131C1 ::v2(){vfunc_called(this, "_ZN7S3131C12v2Ev");}
S3131C1 ::~S3131C1(){ note_dtor("S3131C1", this);} // tgen
S3131C1 ::S3131C1(){ note_ctor("S3131C1", this);} // tgen

static void Test_S3131C1()
{
  extern Class_Descriptor cd_S3131C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3131C1, buf);
    S3131C1 *dp, &lv = *(dp=new (buf) S3131C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3131C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3131C1)");
    check_base_class_offset(lv, (S3131C3*)(S3131C2*), 0, "S3131C1");
    check_base_class_offset(lv, (S3131C2*), 0, "S3131C1");
    check_field_offset(lv, s3131c1f0, ABISELECT(16,12), "S3131C1.s3131c1f0");
    test_class_info(&lv, &cd_S3131C1);
    dp->~S3131C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3131C1(Test_S3131C1, "S3131C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3131C1C1Ev();
extern void _ZN7S3131C1D1Ev();
Name_Map name_map_S3131C1[] = {
  NSPAIR(_ZN7S3131C1C1Ev),
  NSPAIR(_ZN7S3131C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3131C3;
extern VTBL_ENTRY _ZTI7S3131C3[];
extern  VTBL_ENTRY _ZTV7S3131C3[];
extern Class_Descriptor cd_S3131C2;
extern VTBL_ENTRY _ZTI7S3131C2[];
extern  VTBL_ENTRY _ZTV7S3131C2[];
static Base_Class bases_S3131C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3131C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3131C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3131C1[];
extern void _ZN7S3131C32v3Ev();
extern void _ZN7S3131C22v4Ev();
extern void _ZN7S3131C12v1Ev();
extern void _ZN7S3131C12v2Ev();
static  VTBL_ENTRY vtc_S3131C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3131C1[0]),
  (VTBL_ENTRY)&_ZN7S3131C32v3Ev,
  (VTBL_ENTRY)&_ZN7S3131C22v4Ev,
  (VTBL_ENTRY)&_ZN7S3131C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3131C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S3131C1[];
extern  VTBL_ENTRY _ZTV7S3131C1[];
Class_Descriptor cd_S3131C1 = {  "S3131C1", // class name
  bases_S3131C1, 2,
  &(vtc_S3131C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3131C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3131C1),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  S8225C2_nt  {
  void *s8225c2f0;
  void  mf8225c2(); // _ZN10S8225C2_nt8mf8225c2Ev
  virtual  ~S8225C2_nt(); // _ZN10S8225C2_ntD1Ev
  S8225C2_nt(); // tgen
};
//SIG(-1 S8225C2_nt) C1{ vd m Fp}


void  S8225C2_nt ::mf8225c2(){}
 S8225C2_nt ::~S8225C2_nt(){ note_dtor("S8225C2_nt", this);}
S8225C2_nt ::S8225C2_nt(){ note_ctor("S8225C2_nt", this);} // tgen

//skip512 S8225C2_nt

#else // __cplusplus

extern void _ZN10S8225C2_ntC1Ev();
extern void _ZN10S8225C2_ntD1Ev();
Name_Map name_map_S8225C2_nt[] = {
  NSPAIR(_ZN10S8225C2_ntC1Ev),
  NSPAIR(_ZN10S8225C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8225C2_nt[];
extern void _ZN10S8225C2_ntD1Ev();
extern void _ZN10S8225C2_ntD0Ev();
static  VTBL_ENTRY vtc_S8225C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8225C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8225C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8225C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8225C2_nt[];
VTBL_ENTRY *P__ZTI10S8225C2_nt = _ZTI10S8225C2_nt; 
extern  VTBL_ENTRY _ZTV10S8225C2_nt[];
Class_Descriptor cd_S8225C2_nt = {  "S8225C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8225C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S8225C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8225C2_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  S8225C1  : S8225C2_nt {
  void *s8225c1f0;
  int s8225c1f1;
  void *s8225c1f2[20];
  virtual  ~S8225C1(); // _ZN7S8225C1D1Ev
  S8225C1(); // tgen
};
//SIG(1 S8225C1) C1{ BC2{ vd m Fp} vd Fp Fi Fp[20]}


 S8225C1 ::~S8225C1(){ note_dtor("S8225C1", this);}
S8225C1 ::S8225C1(){ note_ctor("S8225C1", this);} // tgen

static void Test_S8225C1()
{
  extern Class_Descriptor cd_S8225C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[25];
    init_test(&cd_S8225C1, buf);
    S8225C1 *dp, &lv = *(dp=new (buf) S8225C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,96), "sizeof(S8225C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8225C1)");
    check_base_class_offset(lv, (S8225C2_nt*), 0, "S8225C1");
    check_field_offset(lv, s8225c1f0, ABISELECT(16,8), "S8225C1.s8225c1f0");
    check_field_offset(lv, s8225c1f1, ABISELECT(24,12), "S8225C1.s8225c1f1");
    check_field_offset(lv, s8225c1f2, ABISELECT(32,16), "S8225C1.s8225c1f2");
    test_class_info(&lv, &cd_S8225C1);
    dp->~S8225C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8225C1(Test_S8225C1, "S8225C1", ABISELECT(192,96));

#else // __cplusplus

extern void _ZN7S8225C1C1Ev();
extern void _ZN7S8225C1D1Ev();
Name_Map name_map_S8225C1[] = {
  NSPAIR(_ZN7S8225C1C1Ev),
  NSPAIR(_ZN7S8225C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8225C2_nt;
extern VTBL_ENTRY _ZTI10S8225C2_nt[];
extern  VTBL_ENTRY _ZTV10S8225C2_nt[];
static Base_Class bases_S8225C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8225C2_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 _ZTI7S8225C1[];
extern void _ZN7S8225C1D1Ev();
extern void _ZN7S8225C1D0Ev();
static  VTBL_ENTRY vtc_S8225C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8225C1[0]),
  (VTBL_ENTRY)&_ZN7S8225C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8225C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8225C1[];
extern  VTBL_ENTRY _ZTV7S8225C1[];
Class_Descriptor cd_S8225C1 = {  "S8225C1", // class name
  bases_S8225C1, 1,
  &(vtc_S8225C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,96), // object size
  NSPAIRA(_ZTI7S8225C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8225C1),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  S6798C2  {
  int s6798c2f0;
  virtual void  v4(); // _ZN7S6798C22v4Ev
  ~S6798C2(); // tgen
  S6798C2(); // tgen
};
//SIG(-1 S6798C2) C1{ v1 Fi}


void  S6798C2 ::v4(){vfunc_called(this, "_ZN7S6798C22v4Ev");}
S6798C2 ::~S6798C2(){ note_dtor("S6798C2", this);} // tgen
S6798C2 ::S6798C2(){ note_ctor("S6798C2", this);} // tgen

static void Test_S6798C2()
{
  extern Class_Descriptor cd_S6798C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6798C2, buf);
    S6798C2 *dp, &lv = *(dp=new (buf) S6798C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6798C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6798C2)");
    check_field_offset(lv, s6798c2f0, ABISELECT(8,4), "S6798C2.s6798c2f0");
    test_class_info(&lv, &cd_S6798C2);
    dp->~S6798C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6798C2(Test_S6798C2, "S6798C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6798C2C1Ev();
extern void _ZN7S6798C2D1Ev();
Name_Map name_map_S6798C2[] = {
  NSPAIR(_ZN7S6798C2C1Ev),
  NSPAIR(_ZN7S6798C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6798C2[];
extern void _ZN7S6798C22v4Ev();
static  VTBL_ENTRY vtc_S6798C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6798C2[0]),
  (VTBL_ENTRY)&_ZN7S6798C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6798C2[];
extern  VTBL_ENTRY _ZTV7S6798C2[];
Class_Descriptor cd_S6798C2 = {  "S6798C2", // class name
  0,0,//no base classes
  &(vtc_S6798C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6798C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6798C2),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  S6798C1  : S6798C2 {
  void *s6798c1f0;
  char s6798c1f1;
  void *s6798c1f2;
  virtual void  v1(); // _ZN7S6798C12v1Ev
  virtual void  v2(); // _ZN7S6798C12v2Ev
  virtual void  v3(); // _ZN7S6798C12v3Ev
  ~S6798C1(); // tgen
  S6798C1(); // tgen
};
//SIG(1 S6798C1) C1{ BC2{ v4 Fi} v1 v2 v3 Fp Fc Fp}


void  S6798C1 ::v1(){vfunc_called(this, "_ZN7S6798C12v1Ev");}
void  S6798C1 ::v2(){vfunc_called(this, "_ZN7S6798C12v2Ev");}
void  S6798C1 ::v3(){vfunc_called(this, "_ZN7S6798C12v3Ev");}
S6798C1 ::~S6798C1(){ note_dtor("S6798C1", this);} // tgen
S6798C1 ::S6798C1(){ note_ctor("S6798C1", this);} // tgen

static void Test_S6798C1()
{
  extern Class_Descriptor cd_S6798C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6798C1, buf);
    S6798C1 *dp, &lv = *(dp=new (buf) S6798C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6798C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6798C1)");
    check_base_class_offset(lv, (S6798C2*), 0, "S6798C1");
    check_field_offset(lv, s6798c1f0, ABISELECT(16,8), "S6798C1.s6798c1f0");
    check_field_offset(lv, s6798c1f1, ABISELECT(24,12), "S6798C1.s6798c1f1");
    check_field_offset(lv, s6798c1f2, ABISELECT(32,16), "S6798C1.s6798c1f2");
    test_class_info(&lv, &cd_S6798C1);
    dp->~S6798C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6798C1(Test_S6798C1, "S6798C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6798C1C1Ev();
extern void _ZN7S6798C1D1Ev();
Name_Map name_map_S6798C1[] = {
  NSPAIR(_ZN7S6798C1C1Ev),
  NSPAIR(_ZN7S6798C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6798C2;
extern VTBL_ENTRY _ZTI7S6798C2[];
extern  VTBL_ENTRY _ZTV7S6798C2[];
static Base_Class bases_S6798C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6798C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S6798C1[];
extern void _ZN7S6798C22v4Ev();
extern void _ZN7S6798C12v1Ev();
extern void _ZN7S6798C12v2Ev();
extern void _ZN7S6798C12v3Ev();
static  VTBL_ENTRY vtc_S6798C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6798C1[0]),
  (VTBL_ENTRY)&_ZN7S6798C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6798C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6798C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6798C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S6798C1[];
extern  VTBL_ENTRY _ZTV7S6798C1[];
Class_Descriptor cd_S6798C1 = {  "S6798C1", // class name
  bases_S6798C1, 1,
  &(vtc_S6798C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6798C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6798C1),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  S16806C1  {
  int s16806c1f0;
  ::S4473C12_nt s16806c1f1;
  __tsi64 s16806c1f2;
  void  mf16806c1(); // _ZN8S16806C19mf16806c1Ev
};
//SIG(1 S16806C1) C1{ m Fi FC2{ m Fp Fi FC3{ m}} FL}


void  S16806C1 ::mf16806c1(){}

static void Test_S16806C1()
{
  {
    init_simple_test("S16806C1");
    S16806C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S16806C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16806C1)");
    check_field_offset(lv, s16806c1f0, 0, "S16806C1.s16806c1f0");
    check_field_offset(lv, s16806c1f1, ABISELECT(8,4), "S16806C1.s16806c1f1");
    check_field_offset(lv, s16806c1f2, ABISELECT(24,16), "S16806C1.s16806c1f2");
  }
}
static Arrange_To_Call_Me vS16806C1(Test_S16806C1, "S16806C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12521C2_nt  {
  void *s12521c2f0[2];
};
//SIG(-1 S12521C2_nt) C1{ Fp[2]}



//skip512 S12521C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12521C3_nt  {
  int s12521c3f0;
};
//SIG(-1 S12521C3_nt) C1{ Fi}



//skip512 S12521C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12521C1  {
  int s12521c1f0;
  ::S12521C2_nt s12521c1f1;
  int s12521c1f2[2];
  ::S12521C3_nt s12521c1f3;
};
//SIG(1 S12521C1) C1{ Fi FC2{ Fp[2]} Fi[2] FC3{ Fi}}



static void Test_S12521C1()
{
  {
    init_simple_test("S12521C1");
    S12521C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S12521C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12521C1)");
    check_field_offset(lv, s12521c1f0, 0, "S12521C1.s12521c1f0");
    check_field_offset(lv, s12521c1f1, ABISELECT(8,4), "S12521C1.s12521c1f1");
    check_field_offset(lv, s12521c1f2, ABISELECT(24,12), "S12521C1.s12521c1f2");
    check_field_offset(lv, s12521c1f3, ABISELECT(32,20), "S12521C1.s12521c1f3");
  }
}
static Arrange_To_Call_Me vS12521C1(Test_S12521C1, "S12521C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13755C1  {
  __tsi64 s13755c1f0;
  int s13755c1f1;
  __tsi64 s13755c1f2;
  int s13755c1f3;
  __tsi64 s13755c1f4;
  int s13755c1f5[4];
  void *s13755c1f6;
  int s13755c1f7;
};
//SIG(1 S13755C1) C1{ FL Fi FL Fi FL Fi[4] Fp Fi}



static void Test_S13755C1()
{
  {
    init_simple_test("S13755C1");
    S13755C1 lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S13755C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13755C1)");
    check_field_offset(lv, s13755c1f0, 0, "S13755C1.s13755c1f0");
    check_field_offset(lv, s13755c1f1, 8, "S13755C1.s13755c1f1");
    check_field_offset(lv, s13755c1f2, ABISELECT(16,12), "S13755C1.s13755c1f2");
    check_field_offset(lv, s13755c1f3, ABISELECT(24,20), "S13755C1.s13755c1f3");
    check_field_offset(lv, s13755c1f4, ABISELECT(32,24), "S13755C1.s13755c1f4");
    check_field_offset(lv, s13755c1f5, ABISELECT(40,32), "S13755C1.s13755c1f5");
    check_field_offset(lv, s13755c1f6, ABISELECT(56,48), "S13755C1.s13755c1f6");
    check_field_offset(lv, s13755c1f7, ABISELECT(64,52), "S13755C1.s13755c1f7");
  }
}
static Arrange_To_Call_Me vS13755C1(Test_S13755C1, "S13755C1", ABISELECT(72,56));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20331C2  {
  virtual void  v6(); // _ZN8S20331C22v6Ev
  ~S20331C2(); // tgen
  S20331C2(); // tgen
};
//SIG(-1 S20331C2) C1{ v1}


void  S20331C2 ::v6(){vfunc_called(this, "_ZN8S20331C22v6Ev");}
S20331C2 ::~S20331C2(){ note_dtor("S20331C2", this);} // tgen
S20331C2 ::S20331C2(){ note_ctor("S20331C2", this);} // tgen

static void Test_S20331C2()
{
  extern Class_Descriptor cd_S20331C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20331C2, buf);
    S20331C2 *dp, &lv = *(dp=new (buf) S20331C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20331C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20331C2)");
    test_class_info(&lv, &cd_S20331C2);
    dp->~S20331C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20331C2(Test_S20331C2, "S20331C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20331C2C1Ev();
extern void _ZN8S20331C2D1Ev();
Name_Map name_map_S20331C2[] = {
  NSPAIR(_ZN8S20331C2C1Ev),
  NSPAIR(_ZN8S20331C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20331C2[];
extern void _ZN8S20331C22v6Ev();
static  VTBL_ENTRY vtc_S20331C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20331C2[0]),
  (VTBL_ENTRY)&_ZN8S20331C22v6Ev,
};
extern VTBL_ENTRY _ZTI8S20331C2[];
extern  VTBL_ENTRY _ZTV8S20331C2[];
Class_Descriptor cd_S20331C2 = {  "S20331C2", // class name
  0,0,//no base classes
  &(vtc_S20331C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20331C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20331C2),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  S20331C1  : virtual S20331C2 {
  void *s20331c1f0;
  virtual void  v1(); // _ZN8S20331C12v1Ev
  virtual void  v2(); // _ZN8S20331C12v2Ev
  virtual void  v3(); // _ZN8S20331C12v3Ev
  virtual void  v4(); // _ZN8S20331C12v4Ev
  virtual void  v5(); // _ZN8S20331C12v5Ev
  ~S20331C1(); // tgen
  S20331C1(); // tgen
};
//SIG(1 S20331C1) C1{ VBC2{ v6} v1 v2 v3 v4 v5 Fp}


void  S20331C1 ::v1(){vfunc_called(this, "_ZN8S20331C12v1Ev");}
void  S20331C1 ::v2(){vfunc_called(this, "_ZN8S20331C12v2Ev");}
void  S20331C1 ::v3(){vfunc_called(this, "_ZN8S20331C12v3Ev");}
void  S20331C1 ::v4(){vfunc_called(this, "_ZN8S20331C12v4Ev");}
void  S20331C1 ::v5(){vfunc_called(this, "_ZN8S20331C12v5Ev");}
S20331C1 ::~S20331C1(){ note_dtor("S20331C1", this);} // tgen
S20331C1 ::S20331C1(){ note_ctor("S20331C1", this);} // tgen

static void Test_S20331C1()
{
  extern Class_Descriptor cd_S20331C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20331C1, buf);
    S20331C1 *dp, &lv = *(dp=new (buf) S20331C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20331C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20331C1)");
    check_base_class_offset(lv, (S20331C2*), 0, "S20331C1");
    check_field_offset(lv, s20331c1f0, ABISELECT(8,4), "S20331C1.s20331c1f0");
    test_class_info(&lv, &cd_S20331C1);
    dp->~S20331C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20331C1(Test_S20331C1, "S20331C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20331C1C1Ev();
extern void _ZN8S20331C1D1Ev();
Name_Map name_map_S20331C1[] = {
  NSPAIR(_ZN8S20331C1C1Ev),
  NSPAIR(_ZN8S20331C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20331C2;
extern VTBL_ENTRY _ZTI8S20331C2[];
extern  VTBL_ENTRY _ZTV8S20331C2[];
static Base_Class bases_S20331C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20331C2,    0, //bcp->offset
    -1, //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 _ZTI8S20331C1[];
extern void _ZN8S20331C22v6Ev();
extern void _ZN8S20331C12v1Ev();
extern void _ZN8S20331C12v2Ev();
extern void _ZN8S20331C12v3Ev();
extern void _ZN8S20331C12v4Ev();
extern void _ZN8S20331C12v5Ev();
static  VTBL_ENTRY vtc_S20331C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20331C1[0]),
  (VTBL_ENTRY)&_ZN8S20331C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20331C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20331C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20331C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20331C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20331C12v5Ev,
};
extern VTBL_ENTRY _ZTV8S20331C1[];
static  VTT_ENTRY vtt_S20331C1[] = {
  {&(_ZTV8S20331C1[4]),  4,10},
  {&(_ZTV8S20331C1[4]),  4,10},
};
extern VTBL_ENTRY _ZTI8S20331C1[];
extern  VTBL_ENTRY _ZTV8S20331C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20331C1[];
Class_Descriptor cd_S20331C1 = {  "S20331C1", // class name
  bases_S20331C1, 1,
  &(vtc_S20331C1[0]), // expected_vtbl_contents
  &(vtt_S20331C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20331C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20331C1),10, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20331C1),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  S3056C3  {
  int s3056c3f0;
  virtual void  v2(); // _ZN7S3056C32v2Ev
  ~S3056C3(); // tgen
  S3056C3(); // tgen
};
//SIG(-1 S3056C3) C1{ v1 Fi}


void  S3056C3 ::v2(){vfunc_called(this, "_ZN7S3056C32v2Ev");}
S3056C3 ::~S3056C3(){ note_dtor("S3056C3", this);} // tgen
S3056C3 ::S3056C3(){ note_ctor("S3056C3", this);} // tgen

static void Test_S3056C3()
{
  extern Class_Descriptor cd_S3056C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3056C3, buf);
    S3056C3 *dp, &lv = *(dp=new (buf) S3056C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3056C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3056C3)");
    check_field_offset(lv, s3056c3f0, ABISELECT(8,4), "S3056C3.s3056c3f0");
    test_class_info(&lv, &cd_S3056C3);
    dp->~S3056C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3056C3(Test_S3056C3, "S3056C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3056C3C1Ev();
extern void _ZN7S3056C3D1Ev();
Name_Map name_map_S3056C3[] = {
  NSPAIR(_ZN7S3056C3C1Ev),
  NSPAIR(_ZN7S3056C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3056C3[];
extern void _ZN7S3056C32v2Ev();
static  VTBL_ENTRY vtc_S3056C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3056C3[0]),
  (VTBL_ENTRY)&_ZN7S3056C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3056C3[];
extern  VTBL_ENTRY _ZTV7S3056C3[];
Class_Descriptor cd_S3056C3 = {  "S3056C3", // class name
  0,0,//no base classes
  &(vtc_S3056C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3056C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3056C3),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  S3056C2  : S3056C3 {
  int s3056c2f0;
  virtual void  v3(); // _ZN7S3056C22v3Ev
  ~S3056C2(); // tgen
  S3056C2(); // tgen
};
//SIG(-1 S3056C2) C1{ BC2{ v2 Fi} v1 Fi}


void  S3056C2 ::v3(){vfunc_called(this, "_ZN7S3056C22v3Ev");}
S3056C2 ::~S3056C2(){ note_dtor("S3056C2", this);} // tgen
S3056C2 ::S3056C2(){ note_ctor("S3056C2", this);} // tgen

static void Test_S3056C2()
{
  extern Class_Descriptor cd_S3056C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3056C2, buf);
    S3056C2 *dp, &lv = *(dp=new (buf) S3056C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3056C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3056C2)");
    check_base_class_offset(lv, (S3056C3*), 0, "S3056C2");
    check_field_offset(lv, s3056c2f0, ABISELECT(12,8), "S3056C2.s3056c2f0");
    test_class_info(&lv, &cd_S3056C2);
    dp->~S3056C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3056C2(Test_S3056C2, "S3056C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3056C2C1Ev();
extern void _ZN7S3056C2D1Ev();
Name_Map name_map_S3056C2[] = {
  NSPAIR(_ZN7S3056C2C1Ev),
  NSPAIR(_ZN7S3056C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3056C3;
extern VTBL_ENTRY _ZTI7S3056C3[];
extern  VTBL_ENTRY _ZTV7S3056C3[];
static Base_Class bases_S3056C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3056C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S3056C2[];
extern void _ZN7S3056C32v2Ev();
extern void _ZN7S3056C22v3Ev();
static  VTBL_ENTRY vtc_S3056C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3056C2[0]),
  (VTBL_ENTRY)&_ZN7S3056C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3056C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S3056C2[];
extern  VTBL_ENTRY _ZTV7S3056C2[];
Class_Descriptor cd_S3056C2 = {  "S3056C2", // class name
  bases_S3056C2, 1,
  &(vtc_S3056C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3056C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3056C2),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  S3056C1  : S3056C2 {
  int s3056c1f0;
  virtual void  v1(); // _ZN7S3056C12v1Ev
  ~S3056C1(); // tgen
  S3056C1(); // tgen
};
//SIG(1 S3056C1) C1{ BC2{ BC3{ v2 Fi} v3 Fi} v1 Fi}


void  S3056C1 ::v1(){vfunc_called(this, "_ZN7S3056C12v1Ev");}
S3056C1 ::~S3056C1(){ note_dtor("S3056C1", this);} // tgen
S3056C1 ::S3056C1(){ note_ctor("S3056C1", this);} // tgen

static void Test_S3056C1()
{
  extern Class_Descriptor cd_S3056C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3056C1, buf);
    S3056C1 *dp, &lv = *(dp=new (buf) S3056C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3056C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3056C1)");
    check_base_class_offset(lv, (S3056C3*)(S3056C2*), 0, "S3056C1");
    check_base_class_offset(lv, (S3056C2*), 0, "S3056C1");
    check_field_offset(lv, s3056c1f0, ABISELECT(16,12), "S3056C1.s3056c1f0");
    test_class_info(&lv, &cd_S3056C1);
    dp->~S3056C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3056C1(Test_S3056C1, "S3056C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3056C1C1Ev();
extern void _ZN7S3056C1D1Ev();
Name_Map name_map_S3056C1[] = {
  NSPAIR(_ZN7S3056C1C1Ev),
  NSPAIR(_ZN7S3056C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3056C3;
extern VTBL_ENTRY _ZTI7S3056C3[];
extern  VTBL_ENTRY _ZTV7S3056C3[];
extern Class_Descriptor cd_S3056C2;
extern VTBL_ENTRY _ZTI7S3056C2[];
extern  VTBL_ENTRY _ZTV7S3056C2[];
static Base_Class bases_S3056C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3056C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3056C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3056C1[];
extern void _ZN7S3056C32v2Ev();
extern void _ZN7S3056C22v3Ev();
extern void _ZN7S3056C12v1Ev();
static  VTBL_ENTRY vtc_S3056C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3056C1[0]),
  (VTBL_ENTRY)&_ZN7S3056C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3056C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3056C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3056C1[];
extern  VTBL_ENTRY _ZTV7S3056C1[];
Class_Descriptor cd_S3056C1 = {  "S3056C1", // class name
  bases_S3056C1, 2,
  &(vtc_S3056C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3056C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3056C1),5, //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  S16036C1  {
  ::S1503C14_nt s16036c1f0;
  ::S1503C14_nt s16036c1f1;
  ::S2811C15_nt s16036c1f2;
  void  mf16036c1(); // _ZN8S16036C19mf16036c1Ev
};
//SIG(1 S16036C1) C1{ m FC2{ m Fi[3]} FC2 FC3{ m}}


void  S16036C1 ::mf16036c1(){}

static void Test_S16036C1()
{
  {
    init_simple_test("S16036C1");
    S16036C1 lv;
    check2(sizeof(lv), 28, "sizeof(S16036C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16036C1)");
    check_field_offset(lv, s16036c1f0, 0, "S16036C1.s16036c1f0");
    check_field_offset(lv, s16036c1f1, 12, "S16036C1.s16036c1f1");
    check_field_offset(lv, s16036c1f2, 24, "S16036C1.s16036c1f2");
  }
}
static Arrange_To_Call_Me vS16036C1(Test_S16036C1, "S16036C1", 28);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12780C1  {
  int s12780c1f0;
  void *s12780c1f1[3];
  int s12780c1f2[4];
  void *s12780c1f3[2];
  int s12780c1f4;
};
//SIG(1 S12780C1) C1{ Fi Fp[3] Fi[4] Fp[2] Fi}



static void Test_S12780C1()
{
  {
    init_simple_test("S12780C1");
    S12780C1 lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S12780C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12780C1)");
    check_field_offset(lv, s12780c1f0, 0, "S12780C1.s12780c1f0");
    check_field_offset(lv, s12780c1f1, ABISELECT(8,4), "S12780C1.s12780c1f1");
    check_field_offset(lv, s12780c1f2, ABISELECT(32,16), "S12780C1.s12780c1f2");
    check_field_offset(lv, s12780c1f3, ABISELECT(48,32), "S12780C1.s12780c1f3");
    check_field_offset(lv, s12780c1f4, ABISELECT(64,40), "S12780C1.s12780c1f4");
  }
}
static Arrange_To_Call_Me vS12780C1(Test_S12780C1, "S12780C1", ABISELECT(72,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14318C1  {
  void *s14318c1f0;
  int s14318c1f1[3];
  char s14318c1f2;
  short s14318c1f3[2];
  char s14318c1f4;
  void *s14318c1f5;
};
//SIG(1 S14318C1) C1{ Fp Fi[3] Fc Fs[2] Fc Fp}



static void Test_S14318C1()
{
  {
    init_simple_test("S14318C1");
    S14318C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S14318C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14318C1)");
    check_field_offset(lv, s14318c1f0, 0, "S14318C1.s14318c1f0");
    check_field_offset(lv, s14318c1f1, ABISELECT(8,4), "S14318C1.s14318c1f1");
    check_field_offset(lv, s14318c1f2, ABISELECT(20,16), "S14318C1.s14318c1f2");
    check_field_offset(lv, s14318c1f3, ABISELECT(22,18), "S14318C1.s14318c1f3");
    check_field_offset(lv, s14318c1f4, ABISELECT(26,22), "S14318C1.s14318c1f4");
    check_field_offset(lv, s14318c1f5, ABISELECT(32,24), "S14318C1.s14318c1f5");
  }
}
static Arrange_To_Call_Me vS14318C1(Test_S14318C1, "S14318C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18097C1  {
  void *s18097c1f0[2];
  int s18097c1f1[2];
  ::S2811C15_nt s18097c1f2;
  ::S2811C15_nt s18097c1f3;
  void  mf18097c1(); // _ZN8S18097C19mf18097c1Ev
};
//SIG(1 S18097C1) C1{ m Fp[2] Fi[2] FC2{ m} FC2}


void  S18097C1 ::mf18097c1(){}

static void Test_S18097C1()
{
  {
    init_simple_test("S18097C1");
    S18097C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18097C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18097C1)");
    check_field_offset(lv, s18097c1f0, 0, "S18097C1.s18097c1f0");
    check_field_offset(lv, s18097c1f1, ABISELECT(16,8), "S18097C1.s18097c1f1");
    check_field_offset(lv, s18097c1f2, ABISELECT(24,16), "S18097C1.s18097c1f2");
    check_field_offset(lv, s18097c1f3, ABISELECT(25,17), "S18097C1.s18097c1f3");
  }
}
static Arrange_To_Call_Me vS18097C1(Test_S18097C1, "S18097C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3054C3  {
  int s3054c3f0;
  virtual void  v2(); // _ZN7S3054C32v2Ev
  ~S3054C3(); // tgen
  S3054C3(); // tgen
};
//SIG(-1 S3054C3) C1{ v1 Fi}


void  S3054C3 ::v2(){vfunc_called(this, "_ZN7S3054C32v2Ev");}
S3054C3 ::~S3054C3(){ note_dtor("S3054C3", this);} // tgen
S3054C3 ::S3054C3(){ note_ctor("S3054C3", this);} // tgen

static void Test_S3054C3()
{
  extern Class_Descriptor cd_S3054C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3054C3, buf);
    S3054C3 *dp, &lv = *(dp=new (buf) S3054C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3054C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3054C3)");
    check_field_offset(lv, s3054c3f0, ABISELECT(8,4), "S3054C3.s3054c3f0");
    test_class_info(&lv, &cd_S3054C3);
    dp->~S3054C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3054C3(Test_S3054C3, "S3054C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3054C3C1Ev();
extern void _ZN7S3054C3D1Ev();
Name_Map name_map_S3054C3[] = {
  NSPAIR(_ZN7S3054C3C1Ev),
  NSPAIR(_ZN7S3054C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3054C3[];
extern void _ZN7S3054C32v2Ev();
static  VTBL_ENTRY vtc_S3054C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3054C3[0]),
  (VTBL_ENTRY)&_ZN7S3054C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3054C3[];
extern  VTBL_ENTRY _ZTV7S3054C3[];
Class_Descriptor cd_S3054C3 = {  "S3054C3", // class name
  0,0,//no base classes
  &(vtc_S3054C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3054C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3054C3),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  S3054C2  : S3054C3 {
  int s3054c2f0;
  ~S3054C2(); // tgen
  S3054C2(); // tgen
};
//SIG(-1 S3054C2) C1{ BC2{ v1 Fi} Fi}


S3054C2 ::~S3054C2(){ note_dtor("S3054C2", this);} // tgen
S3054C2 ::S3054C2(){ note_ctor("S3054C2", this);} // tgen

static void Test_S3054C2()
{
  extern Class_Descriptor cd_S3054C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3054C2, buf);
    S3054C2 *dp, &lv = *(dp=new (buf) S3054C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3054C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3054C2)");
    check_base_class_offset(lv, (S3054C3*), 0, "S3054C2");
    check_field_offset(lv, s3054c2f0, ABISELECT(12,8), "S3054C2.s3054c2f0");
    test_class_info(&lv, &cd_S3054C2);
    dp->~S3054C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3054C2(Test_S3054C2, "S3054C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3054C2C1Ev();
extern void _ZN7S3054C2D1Ev();
Name_Map name_map_S3054C2[] = {
  NSPAIR(_ZN7S3054C2C1Ev),
  NSPAIR(_ZN7S3054C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3054C3;
extern VTBL_ENTRY _ZTI7S3054C3[];
extern  VTBL_ENTRY _ZTV7S3054C3[];
static Base_Class bases_S3054C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3054C3,    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 _ZTI7S3054C2[];
extern void _ZN7S3054C32v2Ev();
static  VTBL_ENTRY vtc_S3054C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3054C2[0]),
  (VTBL_ENTRY)&_ZN7S3054C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3054C2[];
extern  VTBL_ENTRY _ZTV7S3054C2[];
Class_Descriptor cd_S3054C2 = {  "S3054C2", // class name
  bases_S3054C2, 1,
  &(vtc_S3054C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3054C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3054C2),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  S3054C1  : S3054C2 {
  int s3054c1f0;
  virtual void  v1(); // _ZN7S3054C12v1Ev
  ~S3054C1(); // tgen
  S3054C1(); // tgen
};
//SIG(1 S3054C1) C1{ BC2{ BC3{ v2 Fi} Fi} v1 Fi}


void  S3054C1 ::v1(){vfunc_called(this, "_ZN7S3054C12v1Ev");}
S3054C1 ::~S3054C1(){ note_dtor("S3054C1", this);} // tgen
S3054C1 ::S3054C1(){ note_ctor("S3054C1", this);} // tgen

static void Test_S3054C1()
{
  extern Class_Descriptor cd_S3054C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3054C1, buf);
    S3054C1 *dp, &lv = *(dp=new (buf) S3054C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3054C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3054C1)");
    check_base_class_offset(lv, (S3054C3*)(S3054C2*), 0, "S3054C1");
    check_base_class_offset(lv, (S3054C2*), 0, "S3054C1");
    check_field_offset(lv, s3054c1f0, ABISELECT(16,12), "S3054C1.s3054c1f0");
    test_class_info(&lv, &cd_S3054C1);
    dp->~S3054C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3054C1(Test_S3054C1, "S3054C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3054C1C1Ev();
extern void _ZN7S3054C1D1Ev();
Name_Map name_map_S3054C1[] = {
  NSPAIR(_ZN7S3054C1C1Ev),
  NSPAIR(_ZN7S3054C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3054C3;
extern VTBL_ENTRY _ZTI7S3054C3[];
extern  VTBL_ENTRY _ZTV7S3054C3[];
extern Class_Descriptor cd_S3054C2;
extern VTBL_ENTRY _ZTI7S3054C2[];
extern  VTBL_ENTRY _ZTV7S3054C2[];
static Base_Class bases_S3054C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3054C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3054C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3054C1[];
extern void _ZN7S3054C32v2Ev();
extern void _ZN7S3054C12v1Ev();
static  VTBL_ENTRY vtc_S3054C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3054C1[0]),
  (VTBL_ENTRY)&_ZN7S3054C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3054C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3054C1[];
extern  VTBL_ENTRY _ZTV7S3054C1[];
Class_Descriptor cd_S3054C1 = {  "S3054C1", // class name
  bases_S3054C1, 2,
  &(vtc_S3054C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3054C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3054C1),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  S17141C1  {
  int s17141c1f0[2];
  void *s17141c1f1;
  int s17141c1f2[3];
  void *s17141c1f3[2];
  void  mf17141c1(); // _ZN8S17141C19mf17141c1Ev
};
//SIG(1 S17141C1) C1{ m Fi[2] Fp Fi[3] Fp[2]}


void  S17141C1 ::mf17141c1(){}

static void Test_S17141C1()
{
  {
    init_simple_test("S17141C1");
    S17141C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S17141C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17141C1)");
    check_field_offset(lv, s17141c1f0, 0, "S17141C1.s17141c1f0");
    check_field_offset(lv, s17141c1f1, 8, "S17141C1.s17141c1f1");
    check_field_offset(lv, s17141c1f2, ABISELECT(16,12), "S17141C1.s17141c1f2");
    check_field_offset(lv, s17141c1f3, ABISELECT(32,24), "S17141C1.s17141c1f3");
  }
}
static Arrange_To_Call_Me vS17141C1(Test_S17141C1, "S17141C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11710C2  {
  long s11710c2f0;
  void *s11710c2f1[9];
};
//SIG(-1 S11710C2) C1{ Fl Fp[9]}



static void Test_S11710C2()
{
  {
    init_simple_test("S11710C2");
    S11710C2 lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S11710C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11710C2)");
    check_field_offset(lv, s11710c2f0, 0, "S11710C2.s11710c2f0");
    check_field_offset(lv, s11710c2f1, ABISELECT(8,4), "S11710C2.s11710c2f1");
  }
}
static Arrange_To_Call_Me vS11710C2(Test_S11710C2, "S11710C2", ABISELECT(80,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11710C1  {
  ::S11710C2 s11710c1f0;
  int s11710c1f1;
  void *s11710c1f2[2];
};
//SIG(1 S11710C1) C1{ FC2{ Fl Fp[9]} Fi Fp[2]}



static void Test_S11710C1()
{
  {
    init_simple_test("S11710C1");
    S11710C1 lv;
    check2(sizeof(lv), ABISELECT(104,52), "sizeof(S11710C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11710C1)");
    check_field_offset(lv, s11710c1f0, 0, "S11710C1.s11710c1f0");
    check_field_offset(lv, s11710c1f1, ABISELECT(80,40), "S11710C1.s11710c1f1");
    check_field_offset(lv, s11710c1f2, ABISELECT(88,44), "S11710C1.s11710c1f2");
  }
}
static Arrange_To_Call_Me vS11710C1(Test_S11710C1, "S11710C1", ABISELECT(104,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17787C1  {
  void *s17787c1f0;
  int s17787c1f1[2];
  ::S1503C9_nt s17787c1f2;
  void  mf17787c1(); // _ZN8S17787C19mf17787c1Ev
};
//SIG(1 S17787C1) C1{ m Fp Fi[2] FC2{ m Fi}}


void  S17787C1 ::mf17787c1(){}

static void Test_S17787C1()
{
  {
    init_simple_test("S17787C1");
    S17787C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S17787C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17787C1)");
    check_field_offset(lv, s17787c1f0, 0, "S17787C1.s17787c1f0");
    check_field_offset(lv, s17787c1f1, ABISELECT(8,4), "S17787C1.s17787c1f1");
    check_field_offset(lv, s17787c1f2, ABISELECT(16,12), "S17787C1.s17787c1f2");
  }
}
static Arrange_To_Call_Me vS17787C1(Test_S17787C1, "S17787C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17061C1  {
  int s17061c1f0[2];
  unsigned char s17061c1f1:1;
  unsigned char s17061c1f2:1;
  int s17061c1f3;
  void  mf17061c1(); // _ZN8S17061C19mf17061c1Ev
};
//SIG(1 S17061C1) C1{ m Fi[2] Fc:1 Fc:1 Fi}


void  S17061C1 ::mf17061c1(){}

static void Test_S17061C1()
{
  {
    init_simple_test("S17061C1");
    static S17061C1 lv;
    check2(sizeof(lv), 16, "sizeof(S17061C1)");
    check2(__alignof__(lv), 4, "__alignof__(S17061C1)");
    check_field_offset(lv, s17061c1f0, 0, "S17061C1.s17061c1f0");
    set_bf_and_test(lv, s17061c1f1, 8, 0, 1, 1, "S17061C1");
    set_bf_and_test(lv, s17061c1f2, 8, 1, 1, 1, "S17061C1");
    check_field_offset(lv, s17061c1f3, 12, "S17061C1.s17061c1f3");
  }
}
static Arrange_To_Call_Me vS17061C1(Test_S17061C1, "S17061C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18730C1  {
  __tsi64 s18730c1f0;
  int s18730c1f1;
  virtual void  v1(); // _ZN8S18730C12v1Ev
  virtual void  v2(); // _ZN8S18730C12v2Ev
  virtual void  v3(); // _ZN8S18730C12v3Ev
  virtual void  v4(); // _ZN8S18730C12v4Ev
  virtual void  v5(); // _ZN8S18730C12v5Ev
  ~S18730C1(); // tgen
  S18730C1(); // tgen
};
//SIG(1 S18730C1) C1{ v1 v2 v3 v4 v5 FL Fi}


void  S18730C1 ::v1(){vfunc_called(this, "_ZN8S18730C12v1Ev");}
void  S18730C1 ::v2(){vfunc_called(this, "_ZN8S18730C12v2Ev");}
void  S18730C1 ::v3(){vfunc_called(this, "_ZN8S18730C12v3Ev");}
void  S18730C1 ::v4(){vfunc_called(this, "_ZN8S18730C12v4Ev");}
void  S18730C1 ::v5(){vfunc_called(this, "_ZN8S18730C12v5Ev");}
S18730C1 ::~S18730C1(){ note_dtor("S18730C1", this);} // tgen
S18730C1 ::S18730C1(){ note_ctor("S18730C1", this);} // tgen

static void Test_S18730C1()
{
  extern Class_Descriptor cd_S18730C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S18730C1, buf);
    S18730C1 *dp, &lv = *(dp=new (buf) S18730C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S18730C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18730C1)");
    check_field_offset(lv, s18730c1f0, ABISELECT(8,4), "S18730C1.s18730c1f0");
    check_field_offset(lv, s18730c1f1, ABISELECT(16,12), "S18730C1.s18730c1f1");
    test_class_info(&lv, &cd_S18730C1);
    dp->~S18730C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18730C1(Test_S18730C1, "S18730C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S18730C1C1Ev();
extern void _ZN8S18730C1D1Ev();
Name_Map name_map_S18730C1[] = {
  NSPAIR(_ZN8S18730C1C1Ev),
  NSPAIR(_ZN8S18730C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18730C1[];
extern void _ZN8S18730C12v1Ev();
extern void _ZN8S18730C12v2Ev();
extern void _ZN8S18730C12v3Ev();
extern void _ZN8S18730C12v4Ev();
extern void _ZN8S18730C12v5Ev();
static  VTBL_ENTRY vtc_S18730C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18730C1[0]),
  (VTBL_ENTRY)&_ZN8S18730C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18730C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18730C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18730C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18730C12v5Ev,
};
extern VTBL_ENTRY _ZTI8S18730C1[];
extern  VTBL_ENTRY _ZTV8S18730C1[];
Class_Descriptor cd_S18730C1 = {  "S18730C1", // class name
  0,0,//no base classes
  &(vtc_S18730C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S18730C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18730C1),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  S14686C1  {
  void *s14686c1f0[4];
  short s14686c1f1[2];
  long s14686c1f2;
  void *s14686c1f3[2];
};
//SIG(1 S14686C1) C1{ Fp[4] Fs[2] Fl Fp[2]}



static void Test_S14686C1()
{
  {
    init_simple_test("S14686C1");
    S14686C1 lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S14686C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14686C1)");
    check_field_offset(lv, s14686c1f0, 0, "S14686C1.s14686c1f0");
    check_field_offset(lv, s14686c1f1, ABISELECT(32,16), "S14686C1.s14686c1f1");
    check_field_offset(lv, s14686c1f2, ABISELECT(40,20), "S14686C1.s14686c1f2");
    check_field_offset(lv, s14686c1f3, ABISELECT(48,24), "S14686C1.s14686c1f3");
  }
}
static Arrange_To_Call_Me vS14686C1(Test_S14686C1, "S14686C1", ABISELECT(64,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15100C1  {
  char s15100c1f0;
  int s15100c1f1[2];
  void *s15100c1f2;
  int s15100c1f3[3];
  void  mf15100c1(); // _ZN8S15100C19mf15100c1Ev
};
//SIG(1 S15100C1) C1{ m Fc Fi[2] Fp Fi[3]}


void  S15100C1 ::mf15100c1(){}

static void Test_S15100C1()
{
  {
    init_simple_test("S15100C1");
    S15100C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S15100C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15100C1)");
    check_field_offset(lv, s15100c1f0, 0, "S15100C1.s15100c1f0");
    check_field_offset(lv, s15100c1f1, 4, "S15100C1.s15100c1f1");
    check_field_offset(lv, s15100c1f2, ABISELECT(16,12), "S15100C1.s15100c1f2");
    check_field_offset(lv, s15100c1f3, ABISELECT(24,16), "S15100C1.s15100c1f3");
  }
}
static Arrange_To_Call_Me vS15100C1(Test_S15100C1, "S15100C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3057C3  {
  int s3057c3f0;
  virtual void  v2(); // _ZN7S3057C32v2Ev
  ~S3057C3(); // tgen
  S3057C3(); // tgen
};
//SIG(-1 S3057C3) C1{ v1 Fi}


void  S3057C3 ::v2(){vfunc_called(this, "_ZN7S3057C32v2Ev");}
S3057C3 ::~S3057C3(){ note_dtor("S3057C3", this);} // tgen
S3057C3 ::S3057C3(){ note_ctor("S3057C3", this);} // tgen

static void Test_S3057C3()
{
  extern Class_Descriptor cd_S3057C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3057C3, buf);
    S3057C3 *dp, &lv = *(dp=new (buf) S3057C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3057C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3057C3)");
    check_field_offset(lv, s3057c3f0, ABISELECT(8,4), "S3057C3.s3057c3f0");
    test_class_info(&lv, &cd_S3057C3);
    dp->~S3057C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3057C3(Test_S3057C3, "S3057C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3057C3C1Ev();
extern void _ZN7S3057C3D1Ev();
Name_Map name_map_S3057C3[] = {
  NSPAIR(_ZN7S3057C3C1Ev),
  NSPAIR(_ZN7S3057C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3057C3[];
extern void _ZN7S3057C32v2Ev();
static  VTBL_ENTRY vtc_S3057C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3057C3[0]),
  (VTBL_ENTRY)&_ZN7S3057C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3057C3[];
extern  VTBL_ENTRY _ZTV7S3057C3[];
Class_Descriptor cd_S3057C3 = {  "S3057C3", // class name
  0,0,//no base classes
  &(vtc_S3057C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3057C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3057C3),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  S3057C2  : S3057C3 {
  virtual void  v3(); // _ZN7S3057C22v3Ev
  ~S3057C2(); // tgen
  S3057C2(); // tgen
};
//SIG(-1 S3057C2) C1{ BC2{ v2 Fi} v1}


void  S3057C2 ::v3(){vfunc_called(this, "_ZN7S3057C22v3Ev");}
S3057C2 ::~S3057C2(){ note_dtor("S3057C2", this);} // tgen
S3057C2 ::S3057C2(){ note_ctor("S3057C2", this);} // tgen

static void Test_S3057C2()
{
  extern Class_Descriptor cd_S3057C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3057C2, buf);
    S3057C2 *dp, &lv = *(dp=new (buf) S3057C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3057C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3057C2)");
    check_base_class_offset(lv, (S3057C3*), 0, "S3057C2");
    test_class_info(&lv, &cd_S3057C2);
    dp->~S3057C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3057C2(Test_S3057C2, "S3057C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3057C2C1Ev();
extern void _ZN7S3057C2D1Ev();
Name_Map name_map_S3057C2[] = {
  NSPAIR(_ZN7S3057C2C1Ev),
  NSPAIR(_ZN7S3057C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3057C3;
extern VTBL_ENTRY _ZTI7S3057C3[];
extern  VTBL_ENTRY _ZTV7S3057C3[];
static Base_Class bases_S3057C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3057C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S3057C2[];
extern void _ZN7S3057C32v2Ev();
extern void _ZN7S3057C22v3Ev();
static  VTBL_ENTRY vtc_S3057C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3057C2[0]),
  (VTBL_ENTRY)&_ZN7S3057C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3057C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S3057C2[];
extern  VTBL_ENTRY _ZTV7S3057C2[];
Class_Descriptor cd_S3057C2 = {  "S3057C2", // class name
  bases_S3057C2, 1,
  &(vtc_S3057C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3057C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3057C2),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  S3057C1  : S3057C2 {
  virtual void  v1(); // _ZN7S3057C12v1Ev
  ~S3057C1(); // tgen
  S3057C1(); // tgen
};
//SIG(1 S3057C1) C1{ BC2{ BC3{ v2 Fi} v3} v1}


void  S3057C1 ::v1(){vfunc_called(this, "_ZN7S3057C12v1Ev");}
S3057C1 ::~S3057C1(){ note_dtor("S3057C1", this);} // tgen
S3057C1 ::S3057C1(){ note_ctor("S3057C1", this);} // tgen

static void Test_S3057C1()
{
  extern Class_Descriptor cd_S3057C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3057C1, buf);
    S3057C1 *dp, &lv = *(dp=new (buf) S3057C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3057C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3057C1)");
    check_base_class_offset(lv, (S3057C3*)(S3057C2*), 0, "S3057C1");
    check_base_class_offset(lv, (S3057C2*), 0, "S3057C1");
    test_class_info(&lv, &cd_S3057C1);
    dp->~S3057C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3057C1(Test_S3057C1, "S3057C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3057C1C1Ev();
extern void _ZN7S3057C1D1Ev();
Name_Map name_map_S3057C1[] = {
  NSPAIR(_ZN7S3057C1C1Ev),
  NSPAIR(_ZN7S3057C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3057C3;
extern VTBL_ENTRY _ZTI7S3057C3[];
extern  VTBL_ENTRY _ZTV7S3057C3[];
extern Class_Descriptor cd_S3057C2;
extern VTBL_ENTRY _ZTI7S3057C2[];
extern  VTBL_ENTRY _ZTV7S3057C2[];
static Base_Class bases_S3057C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3057C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3057C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3057C1[];
extern void _ZN7S3057C32v2Ev();
extern void _ZN7S3057C22v3Ev();
extern void _ZN7S3057C12v1Ev();
static  VTBL_ENTRY vtc_S3057C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3057C1[0]),
  (VTBL_ENTRY)&_ZN7S3057C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3057C22v3Ev,
  (VTBL_ENTRY)&_ZN7S3057C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3057C1[];
extern  VTBL_ENTRY _ZTV7S3057C1[];
Class_Descriptor cd_S3057C1 = {  "S3057C1", // class name
  bases_S3057C1, 2,
  &(vtc_S3057C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3057C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3057C1),5, //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  S3055C3  {
  int s3055c3f0;
  virtual void  v2(); // _ZN7S3055C32v2Ev
  ~S3055C3(); // tgen
  S3055C3(); // tgen
};
//SIG(-1 S3055C3) C1{ v1 Fi}


void  S3055C3 ::v2(){vfunc_called(this, "_ZN7S3055C32v2Ev");}
S3055C3 ::~S3055C3(){ note_dtor("S3055C3", this);} // tgen
S3055C3 ::S3055C3(){ note_ctor("S3055C3", this);} // tgen

static void Test_S3055C3()
{
  extern Class_Descriptor cd_S3055C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3055C3, buf);
    S3055C3 *dp, &lv = *(dp=new (buf) S3055C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3055C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3055C3)");
    check_field_offset(lv, s3055c3f0, ABISELECT(8,4), "S3055C3.s3055c3f0");
    test_class_info(&lv, &cd_S3055C3);
    dp->~S3055C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3055C3(Test_S3055C3, "S3055C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3055C3C1Ev();
extern void _ZN7S3055C3D1Ev();
Name_Map name_map_S3055C3[] = {
  NSPAIR(_ZN7S3055C3C1Ev),
  NSPAIR(_ZN7S3055C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3055C3[];
extern void _ZN7S3055C32v2Ev();
static  VTBL_ENTRY vtc_S3055C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3055C3[0]),
  (VTBL_ENTRY)&_ZN7S3055C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3055C3[];
extern  VTBL_ENTRY _ZTV7S3055C3[];
Class_Descriptor cd_S3055C3 = {  "S3055C3", // class name
  0,0,//no base classes
  &(vtc_S3055C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3055C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3055C3),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  S3055C2  : S3055C3 {
  int s3055c2f0;
  ~S3055C2(); // tgen
  S3055C2(); // tgen
};
//SIG(-1 S3055C2) C1{ BC2{ v1 Fi} Fi}


S3055C2 ::~S3055C2(){ note_dtor("S3055C2", this);} // tgen
S3055C2 ::S3055C2(){ note_ctor("S3055C2", this);} // tgen

static void Test_S3055C2()
{
  extern Class_Descriptor cd_S3055C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3055C2, buf);
    S3055C2 *dp, &lv = *(dp=new (buf) S3055C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3055C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3055C2)");
    check_base_class_offset(lv, (S3055C3*), 0, "S3055C2");
    check_field_offset(lv, s3055c2f0, ABISELECT(12,8), "S3055C2.s3055c2f0");
    test_class_info(&lv, &cd_S3055C2);
    dp->~S3055C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3055C2(Test_S3055C2, "S3055C2", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3055C2C1Ev();
extern void _ZN7S3055C2D1Ev();
Name_Map name_map_S3055C2[] = {
  NSPAIR(_ZN7S3055C2C1Ev),
  NSPAIR(_ZN7S3055C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3055C3;
extern VTBL_ENTRY _ZTI7S3055C3[];
extern  VTBL_ENTRY _ZTV7S3055C3[];
static Base_Class bases_S3055C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3055C3,    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 _ZTI7S3055C2[];
extern void _ZN7S3055C32v2Ev();
static  VTBL_ENTRY vtc_S3055C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3055C2[0]),
  (VTBL_ENTRY)&_ZN7S3055C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3055C2[];
extern  VTBL_ENTRY _ZTV7S3055C2[];
Class_Descriptor cd_S3055C2 = {  "S3055C2", // class name
  bases_S3055C2, 1,
  &(vtc_S3055C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3055C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3055C2),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  S3055C1  : S3055C2 {
  virtual void  v1(); // _ZN7S3055C12v1Ev
  ~S3055C1(); // tgen
  S3055C1(); // tgen
};
//SIG(1 S3055C1) C1{ BC2{ BC3{ v2 Fi} Fi} v1}


void  S3055C1 ::v1(){vfunc_called(this, "_ZN7S3055C12v1Ev");}
S3055C1 ::~S3055C1(){ note_dtor("S3055C1", this);} // tgen
S3055C1 ::S3055C1(){ note_ctor("S3055C1", this);} // tgen

static void Test_S3055C1()
{
  extern Class_Descriptor cd_S3055C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3055C1, buf);
    S3055C1 *dp, &lv = *(dp=new (buf) S3055C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3055C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3055C1)");
    check_base_class_offset(lv, (S3055C3*)(S3055C2*), 0, "S3055C1");
    check_base_class_offset(lv, (S3055C2*), 0, "S3055C1");
    test_class_info(&lv, &cd_S3055C1);
    dp->~S3055C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3055C1(Test_S3055C1, "S3055C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S3055C1C1Ev();
extern void _ZN7S3055C1D1Ev();
Name_Map name_map_S3055C1[] = {
  NSPAIR(_ZN7S3055C1C1Ev),
  NSPAIR(_ZN7S3055C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3055C3;
extern VTBL_ENTRY _ZTI7S3055C3[];
extern  VTBL_ENTRY _ZTV7S3055C3[];
extern Class_Descriptor cd_S3055C2;
extern VTBL_ENTRY _ZTI7S3055C2[];
extern  VTBL_ENTRY _ZTV7S3055C2[];
static Base_Class bases_S3055C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3055C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3055C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3055C1[];
extern void _ZN7S3055C32v2Ev();
extern void _ZN7S3055C12v1Ev();
static  VTBL_ENTRY vtc_S3055C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3055C1[0]),
  (VTBL_ENTRY)&_ZN7S3055C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3055C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3055C1[];
extern  VTBL_ENTRY _ZTV7S3055C1[];
Class_Descriptor cd_S3055C1 = {  "S3055C1", // class name
  bases_S3055C1, 2,
  &(vtc_S3055C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S3055C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3055C1),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  S20178C2  {
  int s20178c2f0;
  virtual void  v4(); // _ZN8S20178C22v4Ev
  ~S20178C2(); // tgen
  S20178C2(); // tgen
};
//SIG(-1 S20178C2) C1{ v1 Fi}


void  S20178C2 ::v4(){vfunc_called(this, "_ZN8S20178C22v4Ev");}
S20178C2 ::~S20178C2(){ note_dtor("S20178C2", this);} // tgen
S20178C2 ::S20178C2(){ note_ctor("S20178C2", this);} // tgen

static void Test_S20178C2()
{
  extern Class_Descriptor cd_S20178C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20178C2, buf);
    S20178C2 *dp, &lv = *(dp=new (buf) S20178C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20178C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20178C2)");
    check_field_offset(lv, s20178c2f0, ABISELECT(8,4), "S20178C2.s20178c2f0");
    test_class_info(&lv, &cd_S20178C2);
    dp->~S20178C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20178C2(Test_S20178C2, "S20178C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20178C2C1Ev();
extern void _ZN8S20178C2D1Ev();
Name_Map name_map_S20178C2[] = {
  NSPAIR(_ZN8S20178C2C1Ev),
  NSPAIR(_ZN8S20178C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20178C2[];
extern void _ZN8S20178C22v4Ev();
static  VTBL_ENTRY vtc_S20178C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20178C2[0]),
  (VTBL_ENTRY)&_ZN8S20178C22v4Ev,
};
extern VTBL_ENTRY _ZTI8S20178C2[];
extern  VTBL_ENTRY _ZTV8S20178C2[];
Class_Descriptor cd_S20178C2 = {  "S20178C2", // class name
  0,0,//no base classes
  &(vtc_S20178C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20178C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20178C2),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  S20178C1  : virtual S20178C2 {
  virtual void  v1(); // _ZN8S20178C12v1Ev
  virtual void  v2(); // _ZN8S20178C12v2Ev
  virtual void  v3(); // _ZN8S20178C12v3Ev
  ~S20178C1(); // tgen
  S20178C1(); // tgen
};
//SIG(1 S20178C1) C1{ VBC2{ v4 Fi} v1 v2 v3}


void  S20178C1 ::v1(){vfunc_called(this, "_ZN8S20178C12v1Ev");}
void  S20178C1 ::v2(){vfunc_called(this, "_ZN8S20178C12v2Ev");}
void  S20178C1 ::v3(){vfunc_called(this, "_ZN8S20178C12v3Ev");}
S20178C1 ::~S20178C1(){ note_dtor("S20178C1", this);} // tgen
S20178C1 ::S20178C1(){ note_ctor("S20178C1", this);} // tgen

static void Test_S20178C1()
{
  extern Class_Descriptor cd_S20178C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20178C1, buf);
    S20178C1 *dp, &lv = *(dp=new (buf) S20178C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20178C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20178C1)");
    check_base_class_offset(lv, (S20178C2*), ABISELECT(8,4), "S20178C1");
    test_class_info(&lv, &cd_S20178C1);
    dp->~S20178C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20178C1(Test_S20178C1, "S20178C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20178C1C1Ev();
extern void _ZN8S20178C1D1Ev();
Name_Map name_map_S20178C1[] = {
  NSPAIR(_ZN8S20178C1C1Ev),
  NSPAIR(_ZN8S20178C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20178C2;
extern VTBL_ENTRY _ZTI8S20178C2[];
extern  VTBL_ENTRY _ZTV8S20178C2[];
static Base_Class bases_S20178C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20178C2,    ABISELECT(8,4), //bcp->offset
    6, //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 _ZTI8S20178C1[];
extern void _ZN8S20178C12v1Ev();
extern void _ZN8S20178C12v2Ev();
extern void _ZN8S20178C12v3Ev();
extern void _ZN8S20178C22v4Ev();
static  VTBL_ENTRY vtc_S20178C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20178C1[0]),
  (VTBL_ENTRY)&_ZN8S20178C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20178C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20178C12v3Ev,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20178C1[0]),
  (VTBL_ENTRY)&_ZN8S20178C22v4Ev,
};
extern VTBL_ENTRY _ZTV8S20178C1[];
static  VTT_ENTRY vtt_S20178C1[] = {
  {&(_ZTV8S20178C1[3]),  3,10},
  {&(_ZTV8S20178C1[9]),  9,10},
};
extern VTBL_ENTRY _ZTI8S20178C1[];
extern  VTBL_ENTRY _ZTV8S20178C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20178C1[];
Class_Descriptor cd_S20178C1 = {  "S20178C1", // class name
  bases_S20178C1, 1,
  &(vtc_S20178C1[0]), // expected_vtbl_contents
  &(vtt_S20178C1[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20178C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20178C1),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20178C1),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  S14626C1  {
  void *s14626c1f0[3];
  int s14626c1f1[3];
  char s14626c1f2[2];
};
//SIG(1 S14626C1) C1{ Fp[3] Fi[3] Fc[2]}



static void Test_S14626C1()
{
  {
    init_simple_test("S14626C1");
    S14626C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S14626C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14626C1)");
    check_field_offset(lv, s14626c1f0, 0, "S14626C1.s14626c1f0");
    check_field_offset(lv, s14626c1f1, ABISELECT(24,12), "S14626C1.s14626c1f1");
    check_field_offset(lv, s14626c1f2, ABISELECT(36,24), "S14626C1.s14626c1f2");
  }
}
static Arrange_To_Call_Me vS14626C1(Test_S14626C1, "S14626C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12057C1  {
  ::S2366C14_nt s12057c1f0;
  int s12057c1f1[3];
};
//SIG(1 S12057C1) C1{ FC2{ m Fi[2]} Fi[3]}



static void Test_S12057C1()
{
  {
    init_simple_test("S12057C1");
    S12057C1 lv;
    check2(sizeof(lv), 20, "sizeof(S12057C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12057C1)");
    check_field_offset(lv, s12057c1f0, 0, "S12057C1.s12057c1f0");
    check_field_offset(lv, s12057c1f1, 8, "S12057C1.s12057c1f1");
  }
}
static Arrange_To_Call_Me vS12057C1(Test_S12057C1, "S12057C1", 20);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14156C1  {
  void *s14156c1f0;
  int s14156c1f1;
  char s14156c1f2[100];
  int s14156c1f3;
};
//SIG(1 S14156C1) C1{ Fp Fi Fc[100] Fi}



static void Test_S14156C1()
{
  {
    init_simple_test("S14156C1");
    S14156C1 lv;
    check2(sizeof(lv), ABISELECT(120,112), "sizeof(S14156C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14156C1)");
    check_field_offset(lv, s14156c1f0, 0, "S14156C1.s14156c1f0");
    check_field_offset(lv, s14156c1f1, ABISELECT(8,4), "S14156C1.s14156c1f1");
    check_field_offset(lv, s14156c1f2, ABISELECT(12,8), "S14156C1.s14156c1f2");
    check_field_offset(lv, s14156c1f3, ABISELECT(112,108), "S14156C1.s14156c1f3");
  }
}
static Arrange_To_Call_Me vS14156C1(Test_S14156C1, "S14156C1", ABISELECT(120,112));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13049C1  {
  int s13049c1f0[2];
  char s13049c1f1[512];
  int s13049c1f2;
};
//SIG(1 S13049C1) C1{ Fi[2] Fc[512] Fi}



static void Test_S13049C1()
{
  {
    init_simple_test("S13049C1");
    S13049C1 lv;
    check2(sizeof(lv), 524, "sizeof(S13049C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13049C1)");
    check_field_offset(lv, s13049c1f0, 0, "S13049C1.s13049c1f0");
    check_field_offset(lv, s13049c1f1, 8, "S13049C1.s13049c1f1");
    check_field_offset(lv, s13049c1f2, 520, "S13049C1.s13049c1f2");
  }
}
static Arrange_To_Call_Me vS13049C1(Test_S13049C1, "S13049C1", 524);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12253C1  {
  int s12253c1f0;
  char s12253c1f1[256];
  int s12253c1f2[3];
};
//SIG(1 S12253C1) C1{ Fi Fc[256] Fi[3]}



static void Test_S12253C1()
{
  {
    init_simple_test("S12253C1");
    S12253C1 lv;
    check2(sizeof(lv), 272, "sizeof(S12253C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12253C1)");
    check_field_offset(lv, s12253c1f0, 0, "S12253C1.s12253c1f0");
    check_field_offset(lv, s12253c1f1, 4, "S12253C1.s12253c1f1");
    check_field_offset(lv, s12253c1f2, 260, "S12253C1.s12253c1f2");
  }
}
static Arrange_To_Call_Me vS12253C1(Test_S12253C1, "S12253C1", 272);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14493C1  {
  void *s14493c1f0[2];
  ::S2366C19 s14493c1f1;
};
//SIG(1 S14493C1) C1{ Fp[2] FC2{ m Fp}}



static void Test_S14493C1()
{
  {
    init_simple_test("S14493C1");
    S14493C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S14493C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14493C1)");
    check_field_offset(lv, s14493c1f0, 0, "S14493C1.s14493c1f0");
    check_field_offset(lv, s14493c1f1, ABISELECT(16,8), "S14493C1.s14493c1f1");
  }
}
static Arrange_To_Call_Me vS14493C1(Test_S14493C1, "S14493C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6270C1  : S2811C15_nt , virtual S629C14 {
  long double s6270c1f0;
  ~S6270C1(); // tgen
  S6270C1(); // tgen
};
//SIG(1 S6270C1) C1{ BC2{ m} VBC3{ m} FD}


S6270C1 ::~S6270C1(){ note_dtor("S6270C1", this);} // tgen
S6270C1 ::S6270C1(){ note_ctor("S6270C1", this);} // tgen

static void Test_S6270C1()
{
  extern Class_Descriptor cd_S6270C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,5)];
    init_test(&cd_S6270C1, buf);
    S6270C1 *dp, &lv = *(dp=new (buf) S6270C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S6270C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6270C1)");
    check_base_class_offset(lv, (S2811C15_nt*), 0, "S6270C1");
    check_base_class_offset(lv, (S629C14*), 0, "S6270C1");
    check_field_offset(lv, s6270c1f0, ABISELECT(16,4), "S6270C1.s6270c1f0");
    test_class_info(&lv, &cd_S6270C1);
    dp->~S6270C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6270C1(Test_S6270C1, "S6270C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S6270C1C1Ev();
extern void _ZN7S6270C1D1Ev();
Name_Map name_map_S6270C1[] = {
  NSPAIR(_ZN7S6270C1C1Ev),
  NSPAIR(_ZN7S6270C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2811C15_nt;
extern VTBL_ENTRY _ZTI11S2811C15_nt[];
extern Class_Descriptor cd_S629C14;
extern VTBL_ENTRY _ZTI7S629C14[];
static Base_Class bases_S6270C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2811C15_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_S629C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S6270C1[];
static  VTBL_ENTRY vtc_S6270C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6270C1[0]),
};
extern VTBL_ENTRY _ZTV7S6270C1[];
static  VTT_ENTRY vtt_S6270C1[] = {
  {&(_ZTV7S6270C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S6270C1[];
extern  VTBL_ENTRY _ZTV7S6270C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6270C1[];
Class_Descriptor cd_S6270C1 = {  "S6270C1", // class name
  bases_S6270C1, 2,
  &(vtc_S6270C1[0]), // expected_vtbl_contents
  &(vtt_S6270C1[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S6270C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6270C1),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6270C1),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  S6235C1  : S2811C15_nt {
  void *s6235c1f0;
  int s6235c1f1[5];
};
//SIG(1 S6235C1) C1{ BC2{ m} Fp Fi[5]}



static void Test_S6235C1()
{
  extern Class_Descriptor cd_S6235C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S6235C1, buf);
    S6235C1 &lv = *(new (buf) S6235C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S6235C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6235C1)");
    check_base_class_offset(lv, (S2811C15_nt*), 0, "S6235C1");
    check_field_offset(lv, s6235c1f0, 0, "S6235C1.s6235c1f0");
    check_field_offset(lv, s6235c1f1, ABISELECT(8,4), "S6235C1.s6235c1f1");
    test_class_info(&lv, &cd_S6235C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6235C1(Test_S6235C1, "S6235C1", ABISELECT(32,24));

#else // __cplusplus

extern Class_Descriptor cd_S2811C15_nt;
extern VTBL_ENTRY _ZTI11S2811C15_nt[];
static Base_Class bases_S6235C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2811C15_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_S6235C1 = {  "S6235C1", // class name
  bases_S6235C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(32,24), // 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  S18637C1  {
  long s18637c1f0[8];
  virtual void  v1(); // _ZN8S18637C12v1Ev
  virtual void  v2(); // _ZN8S18637C12v2Ev
  virtual void  v3(); // _ZN8S18637C12v3Ev
  ~S18637C1(); // tgen
  S18637C1(); // tgen
};
//SIG(1 S18637C1) C1{ v1 v2 v3 Fl[8]}


void  S18637C1 ::v1(){vfunc_called(this, "_ZN8S18637C12v1Ev");}
void  S18637C1 ::v2(){vfunc_called(this, "_ZN8S18637C12v2Ev");}
void  S18637C1 ::v3(){vfunc_called(this, "_ZN8S18637C12v3Ev");}
S18637C1 ::~S18637C1(){ note_dtor("S18637C1", this);} // tgen
S18637C1 ::S18637C1(){ note_ctor("S18637C1", this);} // tgen

static void Test_S18637C1()
{
  extern Class_Descriptor cd_S18637C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S18637C1, buf);
    S18637C1 *dp, &lv = *(dp=new (buf) S18637C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S18637C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18637C1)");
    check_field_offset(lv, s18637c1f0, ABISELECT(8,4), "S18637C1.s18637c1f0");
    test_class_info(&lv, &cd_S18637C1);
    dp->~S18637C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18637C1(Test_S18637C1, "S18637C1", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S18637C1C1Ev();
extern void _ZN8S18637C1D1Ev();
Name_Map name_map_S18637C1[] = {
  NSPAIR(_ZN8S18637C1C1Ev),
  NSPAIR(_ZN8S18637C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18637C1[];
extern void _ZN8S18637C12v1Ev();
extern void _ZN8S18637C12v2Ev();
extern void _ZN8S18637C12v3Ev();
static  VTBL_ENTRY vtc_S18637C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18637C1[0]),
  (VTBL_ENTRY)&_ZN8S18637C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18637C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18637C12v3Ev,
};
extern VTBL_ENTRY _ZTI8S18637C1[];
extern  VTBL_ENTRY _ZTV8S18637C1[];
Class_Descriptor cd_S18637C1 = {  "S18637C1", // class name
  0,0,//no base classes
  &(vtc_S18637C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S18637C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18637C1),5, //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  S17866C1  {
  void *s17866c1f0[2];
  char s17866c1f1[2];
  void  mf17866c1(); // _ZN8S17866C19mf17866c1Ev
};
//SIG(1 S17866C1) C1{ m Fp[2] Fc[2]}


void  S17866C1 ::mf17866c1(){}

static void Test_S17866C1()
{
  {
    init_simple_test("S17866C1");
    S17866C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S17866C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17866C1)");
    check_field_offset(lv, s17866c1f0, 0, "S17866C1.s17866c1f0");
    check_field_offset(lv, s17866c1f1, ABISELECT(16,8), "S17866C1.s17866c1f1");
  }
}
static Arrange_To_Call_Me vS17866C1(Test_S17866C1, "S17866C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17279C1  {
  int s17279c1f0[6];
  void *s17279c1f1[3];
  void  mf17279c1(); // _ZN8S17279C19mf17279c1Ev
};
//SIG(1 S17279C1) C1{ m Fi[6] Fp[3]}


void  S17279C1 ::mf17279c1(){}

static void Test_S17279C1()
{
  {
    init_simple_test("S17279C1");
    S17279C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S17279C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17279C1)");
    check_field_offset(lv, s17279c1f0, 0, "S17279C1.s17279c1f0");
    check_field_offset(lv, s17279c1f1, 24, "S17279C1.s17279c1f1");
  }
}
static Arrange_To_Call_Me vS17279C1(Test_S17279C1, "S17279C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17794C1  {
  void *s17794c1f0;
  int s17794c1f1[2];
  __tsi64 s17794c1f2;
  void  mf17794c1(); // _ZN8S17794C19mf17794c1Ev
};
//SIG(1 S17794C1) C1{ m Fp Fi[2] FL}


void  S17794C1 ::mf17794c1(){}

static void Test_S17794C1()
{
  {
    init_simple_test("S17794C1");
    S17794C1 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S17794C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17794C1)");
    check_field_offset(lv, s17794c1f0, 0, "S17794C1.s17794c1f0");
    check_field_offset(lv, s17794c1f1, ABISELECT(8,4), "S17794C1.s17794c1f1");
    check_field_offset(lv, s17794c1f2, ABISELECT(16,12), "S17794C1.s17794c1f2");
  }
}
static Arrange_To_Call_Me vS17794C1(Test_S17794C1, "S17794C1", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11800C2_nt  {
  long s11800c2f0;
};
//SIG(-1 S11800C2_nt) C1{ Fl}



//skip512 S11800C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11800C1  {
  ::S11800C2_nt s11800c1f0;
  int s11800c1f1[3];
};
//SIG(1 S11800C1) C1{ FC2{ Fl} Fi[3]}



static void Test_S11800C1()
{
  {
    init_simple_test("S11800C1");
    S11800C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S11800C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11800C1)");
    check_field_offset(lv, s11800c1f0, 0, "S11800C1.s11800c1f0");
    check_field_offset(lv, s11800c1f1, ABISELECT(8,4), "S11800C1.s11800c1f1");
  }
}
static Arrange_To_Call_Me vS11800C1(Test_S11800C1, "S11800C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21939C1  {
  void *s21939c1f0[5];
  virtual  ~S21939C1(); // _ZN8S21939C1D1Ev
  virtual void  v1(); // _ZN8S21939C12v1Ev
  S21939C1(); // tgen
};
//SIG(1 S21939C1) C1{ vd v1 Fp[5]}


 S21939C1 ::~S21939C1(){ note_dtor("S21939C1", this);}
void  S21939C1 ::v1(){vfunc_called(this, "_ZN8S21939C12v1Ev");}
S21939C1 ::S21939C1(){ note_ctor("S21939C1", this);} // tgen

static void Test_S21939C1()
{
  extern Class_Descriptor cd_S21939C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S21939C1, buf);
    S21939C1 *dp, &lv = *(dp=new (buf) S21939C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S21939C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21939C1)");
    check_field_offset(lv, s21939c1f0, ABISELECT(8,4), "S21939C1.s21939c1f0");
    test_class_info(&lv, &cd_S21939C1);
    dp->~S21939C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21939C1(Test_S21939C1, "S21939C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S21939C1C1Ev();
extern void _ZN8S21939C1D1Ev();
Name_Map name_map_S21939C1[] = {
  NSPAIR(_ZN8S21939C1C1Ev),
  NSPAIR(_ZN8S21939C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21939C1[];
extern void _ZN8S21939C1D1Ev();
extern void _ZN8S21939C1D0Ev();
extern void _ZN8S21939C12v1Ev();
static  VTBL_ENTRY vtc_S21939C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21939C1[0]),
  (VTBL_ENTRY)&_ZN8S21939C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21939C1D0Ev,
  (VTBL_ENTRY)&_ZN8S21939C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S21939C1[];
extern  VTBL_ENTRY _ZTV8S21939C1[];
Class_Descriptor cd_S21939C1 = {  "S21939C1", // class name
  0,0,//no base classes
  &(vtc_S21939C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S21939C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21939C1),5, //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  S12747C1  {
  int s12747c1f0;
  void *s12747c1f1[2];
  char s12747c1f2;
};
//SIG(1 S12747C1) C1{ Fi Fp[2] Fc}



static void Test_S12747C1()
{
  {
    init_simple_test("S12747C1");
    S12747C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S12747C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12747C1)");
    check_field_offset(lv, s12747c1f0, 0, "S12747C1.s12747c1f0");
    check_field_offset(lv, s12747c1f1, ABISELECT(8,4), "S12747C1.s12747c1f1");
    check_field_offset(lv, s12747c1f2, ABISELECT(24,12), "S12747C1.s12747c1f2");
  }
}
static Arrange_To_Call_Me vS12747C1(Test_S12747C1, "S12747C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14160C1  {
  void *s14160c1f0;
  int s14160c1f1;
  char s14160c1f2[2];
};
//SIG(1 S14160C1) C1{ Fp Fi Fc[2]}



static void Test_S14160C1()
{
  {
    init_simple_test("S14160C1");
    S14160C1 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S14160C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14160C1)");
    check_field_offset(lv, s14160c1f0, 0, "S14160C1.s14160c1f0");
    check_field_offset(lv, s14160c1f1, ABISELECT(8,4), "S14160C1.s14160c1f1");
    check_field_offset(lv, s14160c1f2, ABISELECT(12,8), "S14160C1.s14160c1f2");
  }
}
static Arrange_To_Call_Me vS14160C1(Test_S14160C1, "S14160C1", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13377C1  {
  int s13377c1f0[3];
  void *s13377c1f1;
  __tsi64 s13377c1f2;
};
//SIG(1 S13377C1) C1{ Fi[3] Fp FL}



static void Test_S13377C1()
{
  {
    init_simple_test("S13377C1");
    S13377C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S13377C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13377C1)");
    check_field_offset(lv, s13377c1f0, 0, "S13377C1.s13377c1f0");
    check_field_offset(lv, s13377c1f1, ABISELECT(16,12), "S13377C1.s13377c1f1");
    check_field_offset(lv, s13377c1f2, ABISELECT(24,16), "S13377C1.s13377c1f2");
  }
}
static Arrange_To_Call_Me vS13377C1(Test_S13377C1, "S13377C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18331C1  {
  void *s18331c1f0[3];
  __tsi64 s18331c1f1;
  void  mf18331c1(); // _ZN8S18331C19mf18331c1Ev
};
//SIG(1 S18331C1) C1{ m Fp[3] FL}


void  S18331C1 ::mf18331c1(){}

static void Test_S18331C1()
{
  {
    init_simple_test("S18331C1");
    S18331C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18331C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18331C1)");
    check_field_offset(lv, s18331c1f0, 0, "S18331C1.s18331c1f0");
    check_field_offset(lv, s18331c1f1, ABISELECT(24,12), "S18331C1.s18331c1f1");
  }
}
static Arrange_To_Call_Me vS18331C1(Test_S18331C1, "S18331C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6366C2  {
  int s6366c2f0;
  virtual void  v1(); // _ZN7S6366C22v1Ev
  ~S6366C2(); // tgen
  S6366C2(); // tgen
};
//SIG(-1 S6366C2) C1{ v1 Fi}


void  S6366C2 ::v1(){vfunc_called(this, "_ZN7S6366C22v1Ev");}
S6366C2 ::~S6366C2(){ note_dtor("S6366C2", this);} // tgen
S6366C2 ::S6366C2(){ note_ctor("S6366C2", this);} // tgen

static void Test_S6366C2()
{
  extern Class_Descriptor cd_S6366C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6366C2, buf);
    S6366C2 *dp, &lv = *(dp=new (buf) S6366C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6366C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6366C2)");
    check_field_offset(lv, s6366c2f0, ABISELECT(8,4), "S6366C2.s6366c2f0");
    test_class_info(&lv, &cd_S6366C2);
    dp->~S6366C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6366C2(Test_S6366C2, "S6366C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6366C2C1Ev();
extern void _ZN7S6366C2D1Ev();
Name_Map name_map_S6366C2[] = {
  NSPAIR(_ZN7S6366C2C1Ev),
  NSPAIR(_ZN7S6366C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6366C2[];
extern void _ZN7S6366C22v1Ev();
static  VTBL_ENTRY vtc_S6366C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6366C2[0]),
  (VTBL_ENTRY)&_ZN7S6366C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6366C2[];
extern  VTBL_ENTRY _ZTV7S6366C2[];
Class_Descriptor cd_S6366C2 = {  "S6366C2", // class name
  0,0,//no base classes
  &(vtc_S6366C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6366C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6366C2),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  S6366C1  : S6366C2 {
  ~S6366C1(); // tgen
  S6366C1(); // tgen
};
//SIG(1 S6366C1) C1{ BC2{ v1 Fi}}


S6366C1 ::~S6366C1(){ note_dtor("S6366C1", this);} // tgen
S6366C1 ::S6366C1(){ note_ctor("S6366C1", this);} // tgen

static void Test_S6366C1()
{
  extern Class_Descriptor cd_S6366C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6366C1, buf);
    S6366C1 *dp, &lv = *(dp=new (buf) S6366C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6366C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6366C1)");
    check_base_class_offset(lv, (S6366C2*), 0, "S6366C1");
    test_class_info(&lv, &cd_S6366C1);
    dp->~S6366C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6366C1(Test_S6366C1, "S6366C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6366C1C1Ev();
extern void _ZN7S6366C1D1Ev();
Name_Map name_map_S6366C1[] = {
  NSPAIR(_ZN7S6366C1C1Ev),
  NSPAIR(_ZN7S6366C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6366C2;
extern VTBL_ENTRY _ZTI7S6366C2[];
extern  VTBL_ENTRY _ZTV7S6366C2[];
static Base_Class bases_S6366C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6366C2,    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 _ZTI7S6366C1[];
extern void _ZN7S6366C22v1Ev();
static  VTBL_ENTRY vtc_S6366C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6366C1[0]),
  (VTBL_ENTRY)&_ZN7S6366C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6366C1[];
extern  VTBL_ENTRY _ZTV7S6366C1[];
Class_Descriptor cd_S6366C1 = {  "S6366C1", // class name
  bases_S6366C1, 1,
  &(vtc_S6366C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6366C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6366C1),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  S12208C1  {
  int s12208c1f0;
  char s12208c1f1;
  int s12208c1f2;
};
//SIG(1 S12208C1) C1{ Fi Fc Fi}



static void Test_S12208C1()
{
  {
    init_simple_test("S12208C1");
    S12208C1 lv;
    check2(sizeof(lv), 12, "sizeof(S12208C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12208C1)");
    check_field_offset(lv, s12208c1f0, 0, "S12208C1.s12208c1f0");
    check_field_offset(lv, s12208c1f1, 4, "S12208C1.s12208c1f1");
    check_field_offset(lv, s12208c1f2, 8, "S12208C1.s12208c1f2");
  }
}
static Arrange_To_Call_Me vS12208C1(Test_S12208C1, "S12208C1", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12191C1  {
  ::S20677C6_nt s12191c1f0;
  void *s12191c1f1;
};
//SIG(1 S12191C1) C1{ FC2{} Fp}



static void Test_S12191C1()
{
  {
    init_simple_test("S12191C1");
    S12191C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S12191C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12191C1)");
    check_field_offset(lv, s12191c1f0, 0, "S12191C1.s12191c1f0");
    check_field_offset(lv, s12191c1f1, ABISELECT(8,4), "S12191C1.s12191c1f1");
  }
}
static Arrange_To_Call_Me vS12191C1(Test_S12191C1, "S12191C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

